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.

2024 iPhone Home Screens

As the year comes to a close, I want to take a quick snapshot of what my home screens look like now so I can compare them in a year from now.

I say home screens because I use focus modes extensively to change my home screens (depending on my current focus):

Focus Mode Triggered
Morning Automatically at 4:00 AM and off either at 9:00 AM (workdays) or 12:00 PM (weekends)
Fitness Automatically when I start/stop a workout
Work Automatically at 9:00 AM on weekdays
Driving Automatically when I start/stop driving
Personal Manually when I want to be in a Focus mode
Do Not Disturb Manually whenever I need to be completely offline
Evening Automatically by 8:30 PM
Sleep Automatically when my Wind Down schedule starts

Let’s go through them roughly by time of day:

Morning

Here’s what my Morning home screen looks like (in Small icon mode so it’s easier to understand with labels; I actually use Large icon mode everywhere):

An iOS home screen (in Small icon mode with labels under the icons) showing a blurred gray background, indicating an overcast day. The first row has a Health widget and Camera. The second row has Start Morning, Start Dishes, Self Care, and InBody. The third row has Take Vitamins, Brush Teeth, Face Routine, and Balance Health. The fourth row has Start Jackson, Start Stretching, Start Exercise, and Start Shower. The fifth row has Start Coffee, Start Food, Drink Water, and Start Work. The dock at the bottom has Messages, Music, Overcast, and Safari. An iOS home screen (in Large icon mode without labels under the icons) showing a blurred gray background, indicating an overcast day. The first row has a Health widget and Camera. The second row has Start Morning, Start Dishes, Self Care, and InBody. The third row has Take Vitamins, Brush Teeth, Face Routine, and Balance Health. The fourth row has Start Jackson, Start Stretching, Start Exercise, and Start Shower. The fifth row has Start Coffee, Start Food, Drink Water, and Start Work. The dock at the bottom has Messages, Music, Overcast, and Safari.

Fitness

Here’s what my Fitness home screen looks like:

An iOS home screen (in Small icon mode with labels under the icons) showing a blurred outdoor background. The first row has a Fitness widget and Camera. The second row has Voice Memos, Drink Water, Start Food, and Start Shower. The dock at the bottom has Messages, Music, Overcast, and Safari. An iOS home screen (in Large icon mode without labels under the icons) showing a blurred outdoor background. The first row has a Fitness widget and Camera. The second row has Voice Memos, Drink Water, Start Food, and Start Shower. The dock at the bottom has Messages, Music, Overcast, and Safari.

Work

Here’s what my Work home screen looks like:

An iOS home screen (in Small icon mode with labels under the icons) showing a blurred red background. The first row has a Mail widget and a Work widget. The second row has Slack, OmniFocus, Start Laundry, and Start Shower. The third row has Camera, Start Coffee, Start Food, and Drink Water. The fourth row has Start Dishes, Start Jackson, and the dock at the bottom with Messages, Music, Overcast, and Safari. An iOS home screen (in Large icon mode without labels under the icons) showing a blurred red background. The first row has a Mail widget and a Work widget. The second row has Slack, OmniFocus, Start Laundry, and Start Shower. The third row has Camera, Start Coffee, Start Food, and Drink Water. The fourth row has Start Dishes, Start Jackson, and the dock at the bottom with Messages, Music, Overcast, and Safari.

Driving

Here’s what my Driving home screen looks like:

An iOS home screen (in Small icon mode with labels under the icons) showing a blurred outdoor background. The first row has a Fitness widget and a Personal widget. The second row has Timery, Ivory, Pokémon GO, and Notes. The third row has Maps, Swarm, Mail, and Sleep++. The fourth row has Start Laundry, Start Stretching, Start Exercise, and Start Shower. The fifth row has Start Dishes, Start Food, Drink Water, and Start Jackson. The dock at the bottom has Messages, Music, Overcast, and Safari. An iOS home screen (in Large icon mode without labels under the icons) showing a blurred outdoor background. The first row has a Fitness widget and a Personal widget. The second row has Timery, Ivory, Pokémon GO, and Notes. The third row has Maps, Swarm, Mail, and Sleep++. The fourth row has Start Laundry, Start Stretching, Start Exercise, and Start Shower. The fifth row has Start Dishes, Start Food, Drink Water, and Start Jackson. The dock at the bottom has Messages, Music, Overcast, and Safari.

Personal

Here’s what my Personal home screen looks like:

An iOS home screen (in Small icon mode with labels under the icons) showing a blurred dark background. The first row has a Timery widget, HealthView widget, and Fitness widget. The second row has Camera, Balance Health, Inverter, and Sleep++. The third row has Photos. The dock at the bottom has Messages, Music, Overcast, and Safari. An iOS home screen (in Large icon mode without labels under the icons) showing a blurred dark background. The first row has a Timery widget, HealthView widget, and Fitness widget. The second row has Camera, Balance Health, Inverter, and Sleep++. The third row has Photos. The dock at the bottom has Messages, Music, Overcast, and Safari.

Do Not Disturb

Here’s what my Do Not Disturb home screen looks like:

An iOS home screen (in Small icon mode with labels under the icons) showing a blurred purple background. The first row has a Fitness widget and a Personal widget. The second row has Timery, Ivory, Pokémon GO, and Notes. The third row has Maps, Swarm, Mail, and Sleep++. The fourth row has Start Laundry, Start Stretching, Start Exercise, and Start Shower. The fifth row has Start Dishes, Start Food, Drink Water, and Start Jackson. The dock at the bottom has Messages, Music, Overcast, and Safari. An iOS home screen (in Large icon mode without labels under the icons) showing a blurred purple background. The first row has a Fitness widget and a Personal widget. The second row has Timery, Ivory, Pokémon GO, and Notes. The third row has Maps, Swarm, Mail, and Sleep++. The fourth row has Start Laundry, Start Stretching, Start Exercise, and Start Shower. The fifth row has Start Dishes, Start Food, Drink Water, and Start Jackson. The dock at the bottom has Messages, Music, Overcast, and Safari.

Evening

Here’s what my Evening home screen looks like:

An iOS home screen (in Small icon mode with labels under the icons) showing a blurred view of Earth from space. The first row has a Streaks widget, Start Medical, Camera, and Start Dishes. The second row has Start Jackson, Start Mastodon, Open RSS, and Open YouTube. The third row has Start Food, Start Stretching, Self Care, and Start Shutdown. The fourth row has Balance Health, Take Vitamins, Brush Teeth, and Drink Water. The fifth row has Play Wordle, Bedtime, and Clock. The dock at the bottom has Messages, Music, Overcast, and Safari. An iOS home screen (in Large icon mode without labels under the icons) showing a blurred view of Earth from space. The first row has a Streaks widget, Start Medical, Camera, and Start Dishes. The second row has Start Jackson, Start Mastodon, Open RSS, and Open YouTube. The third row has Start Food, Start Stretching, Self Care, and Start Shutdown. The fourth row has Balance Health, Take Vitamins, Brush Teeth, and Drink Water. The fifth row has Play Wordle, Bedtime, and Clock. The dock at the bottom has Messages, Music, Overcast, and Safari.

Sleep

Here’s what my Sleep home screen looks like:

An iOS home screen (in Small icon mode with labels under the icons) showing a blurred Mars-like space background. The first row has a Streaks widget, Start Medical, Camera, and Start Dishes. The second row has Start Jackson, Start Mastodon, Open RSS, and Open YouTube. The third row has Start Food, Start Stretching, Self Care, and Start Shutdown. The fourth row has Balance Health, Take Vitamins, Brush Teeth, and Drink Water. The fifth row has Play Wordle, Bedtime, Clock, and the dock at the bottom with Messages, Music, Overcast, and Safari. An iOS home screen (in Large icon mode without labels under the icons) showing a blurred Mars-like space background. The first row has a Streaks widget, Start Medical, Camera, and Start Dishes. The second row has Start Jackson, Start Mastodon, Open RSS, and Open YouTube. The third row has Start Food, Start Stretching, Self Care, and Start Shutdown. The fourth row has Balance Health, Take Vitamins, Brush Teeth, and Drink Water. The fifth row has Play Wordle, Bedtime, Clock, and the dock at the bottom with Messages, Music, Overcast, and Safari.

I’m so bummed that the macOS “widgets on your desktop” feature is so unreliable for me. I go to the trouble of setting up a bunch of widgets on my second display, only for them to disappear after some random number of restarts. Seems like a great feature but I can’t trust it. 😞


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.


Day 80 and we’re learning about Result, image interpolation, and context menus.

This stood out to me:

Remember, context menus are by their nature hidden, so please think twice before hiding important actions in a context menu.

Undiscoverable UI might as well be no UI at all. I value explicit UI that’s easy to discover and understand. #100DaysOfSwiftUI

The iOS Simulator shows a color selection menu with Red, Green, and Blue options. Red is highlighted and checked. The context menu comes from a Change Color button. Blurred out in the background is a tab view and a cartoon alien image from the Kenney Platform Art Deluxe bundle.

Day 79 and we’re (finally) learning about TabView, my favorite way to keep our example code around!

One actual takeaway from today: impressive that an EditButton can affect the state of a List in the same view without any explicit bindings; I’m usually cautious of “magical” APIs. #100DaysOfSwiftUI

The iOS Simulator displays a white screen with a blue button labeled Show Tab 2 in the center. A tab bar at the bottom has two tabs, One with a blue star icon and Two with a gray circle icon.

For Day 78, we started saving the user’s current location when they save one of the photos to the app. Easy peasy! #100DaysOfSwiftUI

The iOS Simulator displays a detail view with a photo of a field with green plants, one yellow flower, and a sandy background, paired with a map showing the location saved with a red pin near Anza Boulevard and the Interstate 280.

Day 77 was a doozy of a challenge: build an entire app from scratch that imported a photo, prompted for a name, stored both somehow (I chose SwiftData), display it in a list, and show a detail view.

It was a lot of work but took me about an hour from start to finish. #100DaysOfSwiftUI

The iOS Simulator displays a “Photos” app with two pictures: Flowers, with a thumbnail of pink flowers, and Waterfall, with a thumbnail of a waterfall surrounded by greenery. You can tap on a row to go to the detail view. There are edit and add buttons in the top navigation.

For Day 76, we had a quiz and challenge: fix accessibility issues in three of our past apps.

For Cupcake Corner, I couldn’t reproduce the issue.

For iExpense, the fix was easy.

For Moonshot, there were a couple images that needed labels, but I couldn’t find any other issues. #100DaysOfSwiftUI


I liked Paul’s message on Day 75 of #100DaysOfSwiftUI much better:

There’s a New York lawyer called Gregory Mansfield who fights for disability rights, and he once wrote this: “Accessibility is not charity. Accessibility is not generosity. Accessibility is not an amenity. Accessibility is not a gratuity. You don’t bestow access – you ensure it.”

👏


On Day 74 we’ve started learning about accessibility.

I‘m not a fan of how this is framed:

Tony Fadell – the creator of the iPod at Apple – had this to say: “you are defined by what you do and also by what you don’t do.”

Sure, you can skip accessibility and 90% of people won’t notice, but do you want to be defined by that? I’d wager that the answer is no.

I wish this focused on accessibility as a fundamental human right that’s needed by all of us at one point or another… not just an arbitrary percentage (that is really low as well). #100DaysOfSwiftUI

The iOS Simulator displays a screen with a photo of a yellow flower field under a blue sky. Below, text shows “Your score is 1000.” Further down, “Value 10” appears with “Increment” and “Decrement” buttons in blue.

Day 73 was a challenge day, so I had fun refactoring some of the code from the main View into a ViewModel and adding error handling. #100DaysOfSwiftUI

The iOS Simulator displays a view with a blue button labeled “Unlock Places” and an alert is above the view with an error message stating “Biometry is not enrolled,” with an OK button to dismiss. The bottom tab bar shows tabs for Day 70, Day 69, and Day 68.