I thought yesterday was our most difficult day so far… now Day 60 has surpassed it.

Today we built an app from scratch with just some requirements to fetch data and build a couple views. Straightforward but a lot of work! #100DaysOfSwiftUI

The iOS Simulator displays a “Friendface” app with the current screen on a user profile view for one of the contacts. The “general info” section includes the contact’s name, age, company, email, and address. Below, an about section contains placeholder text, and a tags section lists terms separated by commas.

Wow, I’m impressed with myself for learning and SwiftData/SwiftUI for being easy.

For Day 59, we had to go back to an old app and upgrade it to use SwiftData, add sorting, and add filtering. It took me about an hour to do everything, which is a lot faster than I expected. #100DaysOfSwiftUI

The iOS Simulator displays an “iExpense” app. The toolbar includes buttons to add new expenses and sort. A segmented control allows the main list of expenses to be sorted by “All,” “Business,” or “Personal” (with Business currently selected). The two listed expenses include “Phone, $34.35” and “Travel, $123.45.”

Day 58: Continuing yesterday’s project and learning about NSPredicate, changing fetch requests dynamically, and creating relationships. One of today’s sections is about syncing SwiftData with CloudKit, but I skipped it because I don’t have a paid developer account (yet)! #100DaysOfSwiftUI

The iOS Simulator shows a Users screen with a sortable list. Names include Ed Sheeran, Johnny English, Piper Chapman, Rosa Diaz, and Roy Kent. Each name has a blue badge (indicating job counts) showing the number zero except Piper Chapman, which shows two.

Starting a new project for Day 57, so don’t have much to show so far. We’re learning how to edit SwiftData objects with SwiftUI and filter data using #Predicate. #100DaysOfSwiftUI

The iOS Simulator displays a list titled Users, showing names Ed Sheeran, Johnny English, Rosa Diaz, and Roy Kent. Each name is in a row with a right-facing arrow, and a plus icon is at the top right for adding users.

Day 56 was a review and challenge (on our own) day, so I updated the detail view to handle missing data more gracefully. #100DaysOfSwiftUI

The iOS Simulator displays a Bookworm app screen showing a book with a forest-themed cover labeled Fantasy. The text says No author. Below is a rating of three out of five stars and a note saved on Nov 16, 2024, at 8:01 PM.

For Day 55 we learned how to delete SwiftData objects, sort queries using SortDescriptor, and add custom buttons to alerts. #100DaysOfSwiftUI

The iOS Simulator displays a confirmation dialog asking, “Delete book. Are you sure?” with options to “Cancel” or “Delete.” The app shows “The Little Prince” by Antoine de Saint-Exupéry, with a fantasy-themed cover image and navigation tabs at the bottom.

For Day 54, we earnestly started the implementation of a “Bookworm” app and created new SwiftData models and SwiftUI components.

I think the only new APIs were .constant() and using .buttonStyle(.plain) to disable the whole “tap the row to trigger its buttons” behavior. #100DaysOfSwiftUI

The iOS Simulator displays an “Add Book” screen with fields for the title “The Little Prince,” author “Antoine de Saint-Exupéry,” genre set to “Fantasy,” a review input containing “Fantastic,” a five-star rating, and a “Save” button.

Day 53 is the start of our first project with SwiftData. So far all the terminology reminds me of my Core Data days. #100DaysOfSwiftUI

The iOS Simulator displays a Classroom app with a list of student names: Ginny Weasley, Ron Lovegood, and Hermione Potter. A header reads “Classroom” with an “Add” button in the top-right. The bottom navigation shows icons labeled Students and Notes.

Day 52 is a review quiz and challenge day. I found the challenges pretty easy this time around! #100DaysOfSwiftUI

The iOS Simulator shows a checkout screen featuring cupcakes and a total of $37.50. A pop-up alert error message says, “Checkout failed. Received error: resource exceeds maximum size.” App navigation icons appear along the bottom of the screen.

It’s our first day using the debugger! I love debuggers so much. I feel like teaching how to use real debuggers is undervalued by the developer community.

Day 51, officially over half-way done with #100DaysOfSwiftUI!

Xcode displays three panels: the first with a breakpoint paused on a line of code in a `placeOrder` function, the second with the running app’s preview paused (showing a “Place Order” screen), and the third with a JSON object as a string.

Continuing our new project in Day 50 by using CodingKeys to make @Observable get along with JSONEncoder().encode(), and learning about haptics with the .sensoryFeedback() modifier and CHHapticEngine. #100DaysOfSwiftUI

The iOS Simulator displays a “Cupcake Corner” app with a form to select the cake type (set to “Rainbow”), adjust the quantity (set to “18”), add extra frosting or sprinkles, and enter delivery details. Toggle switches for frosting and sprinkles are on and off, respectively. A navigation bar at the bottom has tabs for Order (currently selected), List, Image, Form, and More.

New project day! Day 49 was focused on async/await, URLSession.shared.data(), AsyncImage, and the .disabled() modifier. I’m continuing to use TabView so I can keep all the sample code around in a project. #100DaysOfSwiftUI

An iOS simulator displays an app with three tabs at the bottom: List, Image, and Form. The current tab is “List” and the view shows a long list of Taylor Swift songs. Titles include “Our Song,” “Tim McGraw,” and more.

Day 48 included watching two videos. Paul’s had a fun premise (“What Star Wars Can Teach Us About Swift”) and Woz’s video seemed aimed at high-schoolers, but had some good takeaways: “make your studies… a fun part of life” and “always try to be creative and think different.” #100DaysOfSwiftUI


Day 47 was a review and challenge day, with an entire app we had to build from scratch on our own. I’m stoked it only took me 30 minutes to put together this app! #100DaysOfSwiftUI


Day 46 was a review quiz and a challenge!

Today is the first day I’ve run into this error (that I’ve seen so many SwiftUI developers complain about):

The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions

Does that make me a real SwiftUI dev now? #100DaysOfSwiftUI


Adding a tab bar wasn’t part of Day 45, but I wanted to keep my other view and start “fresh” with today’s code. We actually went through navigationBarTitleDisplayMode(), toolbarBackground(), toolbarColorScheme(), toolbar(), ToolbarItem, and passing bindings to navigationTitle(). #100DaysOfSwiftUI

An iOS simulator displays a list interface with rows labeled from Row 0 to Row 14. The top navigation bar shows an editable title “SwiftUI” with Cancel, Confirm, and Destroy buttons. The bottom tab bar shows the current view and one other tab.

For Day 44 I made this abomination while learning the ins and outs of NavigationPath. #100DaysOfSwiftUI

An iOS simulator displays the text “Number: 0” at the top. Below are three clickable links labeled “Go to Random Number,” “Push 556,” and “Push Hello.” A list follows with options labeled Select Number and Select String, each paired with a value from 0 to 4.

I had been wondering about how to only load detail views when they’re navigated to, and in Day 43 I got my answer! Hello navigationDestination(for:destination:) 👋 #100DaysOfSwiftUI


Day 42 (hey!) is a challenge day and I am taking it easy with just a refactoring of some views and not adding a brand new list view (with a toggle between it and the grid view). 🇺🇸 #100DaysOfSwiftUI


Day 41 was our last day of adding pre-made #100DaysOfSwiftUI code to this Moonshot project. Tomorrow, challenge!

I really appreciate Xcode’s previews. It reminds me of the love I professed for demo files in my CSS-Tricks “modlets” article years ago.

An iOS simulator displays the Moonshot app with a biography of astronaut James A. Lovell Jr. at the top. Lovell, wearing a spacesuit with a U.S. flag patch, smiles beside a model of the Moon. Text below details his NASA missions, including Apollo 13 and two Gemini flights.