Reflecting on 100 Days of SwiftUI

Reflecting on my experience with the “100 Days of SwiftUI” course, with tips on how to make the most of it.


Woo hoo! Day 100 is “just” a final exam and I passed (with merit)! Almost hard to believe that I’ve come to the end of my #100DaysOfSwiftUI journey.

A “certificate of merit” presented to “Chasen” for completing 100 Days of SwiftUI. It includes a quote: “Programming is an art. Don’t spend all your time sharpening your pencil when you should be drawing.” Below is Paul Hudson’s signature with “Founder” underneath.  The white background features faint dotted patterns and a blue-toned calendar on the left, with the “Hacking with Swift” logo in the upper left.

Day 99 included our last quiz and challenge: add a photo credit over the image, fill in some loading/saving methods for favorites, and add sorting to the resorts list. #100DaysOfSwiftUI

The iOS Simulator displays an iPad with a “Resorts” app open in split view. The left pane lists ski resorts with country flags, names, and run counts. At the top of the list, a sort picker is open, showing options “Default,” “Alphabetical” (selected), and “Country.” In the list, “Deer Valley” is highlighted with a heart icon, showing “103 runs.” The right detail view displays a skier in a red jacket navigating deep snow, with the caption “Photo Credit: Maarten Duineveld” in the lower corner. Below the image, resort details are presented, including “Size: Small,” “Price: $$$,” “Elevation: 2,000m,” and “Snow: 103cm.” A descriptive paragraph highlights Deer Valley’s location in Utah, upscale amenities, and its role in the 2002 Winter Olympics.

For Day 98, we implemented searching resorts, replaced the facility info with icons, added a button for the user to mark favorite resorts, and added a favorite indicator in the Resorts list. #100DaysOfSwiftUI

The iOS Simulator displays an iPad with a “Resorts” app open in split view. The left pane lists resorts, and “Vail Ski Resort” is selected with a heart icon. The right detail view shows the resort’s information. A modal alert labeled “Family” overlays the entire screen and says, “This resort is popular with families” with an OK button.

For Day 97 we started actually building a new project using NavigationSplitView, NavigationLink, and format: .list(type: .and) (for concatenating strings). #100DaysOfSwiftUI

The iOS Simulator displays an iPad app with a split view layout. The left sidebar lists ski resorts with names, flags, and run counts, e.g. Squaw Valley in the U.S. has 270 runs. The detail view on the right shows the text, “Welcome to SnowSeeker!” with a prompt to “select a resort from the left-hand menu; swipe from the left edge to show it.”The iOS Simulator displays the same iPad app, now showing “Deer Valley” selected in the sidebar. The detail view features an image of a skier in red gear on snowy terrain, with stats below: size “Small,” price “$$$,” elevation “2,000m,” and snow “103cm.” A description highlights Deer Valley’s location in Utah, its upscale amenities, and its history as a 2002 Winter Olympics venue. Facilities include “Family, Beginners, and Accommodation.”


Day 96 and we’re looking at iPad-friendly APIs for the first time.

I’ll be honest—I had not tried running any of our previous apps in the iPad simulator, but now I see they were working fine the whole time. Pretty cool!

This screenshot looks absolutely chaotic. 👹 #100DaysOfSwiftUI

The iOS Simulator displays an iPad mini interface with a split view layout. The left pane shows a folder labeled “Primary.” The right pane features a search bar with the term “S” entered, a “Cancel” button, and two results, “Subh” and “Stefanie.” Below, links labeled “Tap for sheet” and “Tap for alert” are above text that reads “Name: Paul Country: England Pets: Luna and Arya.” A black circle appears under this text. The same text is repeated again, but in blue. Additional text at the bottom reads “Welcome! Your high score: 0.” A stepper for the high score (with plus and minus buttons) appears below. A floating keyboard bar shows the suggestion “S,” with options like “She” and a microphone icon.

Day 94 is a review and challenge day! Graphics code can be a doozy because when you get the wrong result, it’s difficult to know what’s actually wrong in the code (or with your math). 😅 I got some help with this one. 😬 #100DaysOfSwiftUI

The iOS Simulator displays a rainbow-colored list of rows labeled Row 0 to Row 14, arranged vertically in a tapered, 3D perspective. Colors shift from orange at the top (with a light opacity) to red at the bottom (at full opacity). Tab bar icons include Swift symbols labeled Day 94 (selected), Day 93, Cover Flow, Images, and More.

Day 93 was a fun walk through of using GeometryReader, including using visualEffect() and scrollTargetBehavior(). #100DaysOfSwiftUI

The iOS Simulator displays fifteen rows labeled Row 0 through Row 14, each in a different color. Each row is angled in 3D space, keeping the center in place but rotating the left or right sides, creating a cascading effect. The bottom tab bar contains icons labeled Day 93 (selected), Cover Flow, Images, Frames, and More.

For Day 92, we started a new project (our second to last!) and learned about how layout, alignment guides, and absolute positioning work within SwiftUI.

I really loved the explainer, starting from How layout works in SwiftUI. #100DaysOfSwiftUI

The iOS Simulator displays a white screen with multiple text elements, including “Hello, World!” inside a red rectangle, “Live long and prosper” in black, and overlapping versions of the phrase in varying alignments. Tab bar icons for “Day 92,” “Alignment,”, and “Custom alignment” appear at the bottom, with Day 92 selected.

Picking #100DaysOfSwiftUI back up, and in the home stretch at Day 91! It was a challenge day with a review quiz and an open-ended prompt to fix a couple minor bugs and add a feature.

The iOS Simulator displays a flashcard with a quiz question reading, “What is Taylor Swift’s birth year,” on a scratched metallic background. A timer at the top shows 91 seconds remaining, with circular buttons for cancel and confirm at the bottom corners.

For Day 90, we made a bunch of accessibility fixes and added a view for creating new cards! #100DaysOfSwiftUI

The iOS Simulator shows a card creation interface with text fields for Prompt and Answer, an Add Card button below, and a Done button at the top.

For Day 89, we learned how to detect when our app moves to the background or foreground so we could pause and restart our timer at the right moment. #100DaysOfSwiftUI

The iOS Simulator displays a trivia app with a question card reading, “Who played the 13th Doctor in Doctor Who” and a timer showing 89 seconds remaining. On the right is a “check” button and on the left is a “cancel” button. The background is a scratched metal texture.

For Day 88, we built a brand new part of the app with a stack of cards and gestures for swiping them left and right to move to the next card. #100DaysOfSwiftUI

The iOS Simulator displays a flashcard with the question, “Who played the 13th Doctor in Doctor Who,” against a gray, scratched metal background.

For Day 87, we learned a little bit about the Combine framework, Timer, and three accessibility settings: Differentiate Without Color, Reduce Motion, and Reduce Transparency. #100DaysOfSwiftUI

The iOS Simulator displays a white screen with the text Timer and ScenePhaseView near the top. A green “Success” button appears in the center, followed by blue text “ReduceMotionView!” and a gray button labeled “ReduceTransparencyView!” The bottom tab bar includes a Day 87 tab (selected) and a Day 86 tab.The iOS Simulator shows the same screen as the previous image with a couple differences. The “Success” button is now black with white text and a checkmark icon. The “ReduceTransparencyView!” button is also black with white text. Other elements remain the same.


For Day 86, we started a brand new project and started playing with all the gesture APIs and hit testing. #100DaysOfSwiftUI

The iOS Simulator displays a white screen with text prompts including double tap me, long press me, magnify me, rotate me, and tap on me at the top. Below, a small red circle is positioned above a larger red circle that partially overlaps a blue square. The text Hello is centered beneath the shapes, and World is spaced further down near the bottom of the screen. At the very bottom is a tab bar with Day 86 selected.

Day 85 is a challenge day! The quiz was easy but the challenge took me about an hour to complete. The “contacted” icon, link to an edit screen, and sort options are all new. #100DaysOfSwiftUI

The iOS Simulator displays an app with the title Everyone at the top . A sorting menu is open, offering options to sort by name or date added. Sort by Name is selected, shown with a checkmark. Below the menu, two contacts are listed: Ada with the email ada@example.com and Paul Hudson with the email paul@hackingwithswift.com. The bottom navigation bar includes five tabs: Everyone, Contacted, Uncontacted, Me, and More, with Everyone currently selected.

For Day 84, we learned how to add swipe actions to list items and show local notifications using the UserNotifications framework! #100DaysOfSwiftUI

The iOS Simulator displays a lock screen with the date Friday, December 20, the time 6:42, and a notification labeled Contact Paul Hudson with an email address. The background shows a gradient of soft pink and blue hues.

Day 83 has this tidbit:

The CPU running our code doesn’t care about data types, comments, access control, and more, but if you want to write great software that is scalable, testable, and maintainable, you need to add some rules.

There’s a little piece of me that wishes we talked more about testing and maintainability. I know they’re more advanced topics that I’ll learn on my own, but a man can still wish.

Today we added UI to scan QR codes and multi-item editing. #100DaysOfSwiftUI

The iOS Simulator displays a contact list titled Everyone, showing one contact: Paul Hudson with the email paul@hackingwithswift.com. A blue checkmark indicates the contact is selected and a blue “Delete Selected” button appears at the bottom of the view. Below that, a tab bar highlights the Everyone tab and includes options like Contacted, Uncontacted, Me, and More.

Day 82 was much easier—I don’t think there was anything new, we “just” laid the groundwork for the new tabs and added the SwiftData pieces to store the contact info. #100DaysOfSwiftUI

The iOS Simulator displays a contact list under the heading “Everyone” with one contact named Paul Hudson and the email paul@hackingwithswift.com. The bottom tab bar shows icons for Everyone, Contacted, Uncontacted, Me, and More.

Today was almost smooth sailing, learning about list row swipe actions and local/scheduled notifications, but I ran into issues with the directions for adding Swift package dependencies in Xcode.

I wrote up the issue and my fix in this issue: Day 81: No such module 'SamplePackage' #100DaysOfSwiftUI

Xcode error panel shows five issues in the HotProspects project. A red error states, “No such module SamplePackage” in Day81.swift. Four gray errors indicate missing files like HotProspects.abi.json, swiftmodule, and related outputs in the derived data folder.The Xcode Build Phases screen is open for the HotProspects project. It lists project phases like Target Dependencies, Compile Sources with five items, and Link Binary With Libraries, which includes a single required package named SamplePackage.