Nil Coalescing Newsletter - July 2025
Hi there,
We are now almost two months into the iOS 26 beta period, and we’ve been spending more time trying out the new frameworks and APIs. Earlier this month, I also attended an online Apple event recapping the biggest updates from WWDC25 — I thought it was a great overview, and I’ll share more about it below.
It’s hard to believe how quickly time is moving, and the production release of iOS 26 is fast approaching. I’m still aiming to launch a new app on day one, and we are working hard on refreshing our existing apps too.
I've updated almost all of my devices to the developer beta, and the more I work with the new Liquid Glass design, the more I like it. I’m really looking forward to seeing all the new and updated apps taking advantage of this new design from our developer community when iOS 26 lands in September.
Explore the biggest updates from WWDC25
This month, Apple organized an event both in developer centers around the world and online to present a recap of the biggest announcements from WWDC. We don’t have an Apple Developer Center in New Zealand, so I attended the online event. It was just a livestream, but I found it very useful nonetheless. In case you missed it, here is a summary of my key takeaways.
The new Liquid Glass design system got the most attention in the recap. A lot of the design updates will come for free when we rebuild our apps for iOS 26, as long as we are using standard system components. But there are still a few things we can tweak to really take advantage of the new design system and make our apps feel right at home on iOS 26.
For apps with tab-based navigation, we can now minimize the tab bar on scroll using the tabBarMinimizeBehavior() modifier in SwiftUI, making our content stand out more. There is also a new tabViewBottomAccessory() modifier that lets us place a custom view above the tab bar for application-wide content, like Now Playing in Apple Music or Podcasts. And if we have a dedicated search tab, we can define a Tab
with the search
role, which will appear separated from the rest of the tab bar items in iOS 26 and morph into a search field when selected.
Toolbars have also gone through many changes in iOS 26, and there are a few design considerations to keep in mind to ensure our UI works well. The main point is that it’s now recommended to rely more on SF Symbols in toolbar items instead of text, especially when there is a clear symbol that communicates the action — for example, using a checkmark for Done or an xmark for Close. However, Apple doesn’t recommend using symbols for actions like Edit or Select, as there aren’t good symbols to represent them clearly. When we use both symbol-based and text-based toolbar items at the same time, they should be grouped separately. Toolbar buttons now also automatically morph into the menus they present. And we can implement a similar morphing transition manually for sheets by using the zoom navigation transition. I show how this can be done in my blog post on presenting Liquid Glass sheets in SwiftUI.
There are now additional considerations for using color in our apps. We should use it sparingly in Liquid Glass elements and instead bring more color into the main content of the app. When we do need to emphasize a primary action presented as a glass button, we should use built-in tinting, such as the SwiftUI tint() modifier.
Another big design-related update is the new guidelines for app icons. There are multiple ways an app icon can be rendered, depending on the user's system appearance settings and how it interacts with background content. The rendering options include Default, Dark, Clear Light, Clear Dark, Tinted Light, and Tinted Dark. To simplify the creation of icons that work well with the new Liquid Glass design, Apple introduced a new tool called Icon Composer for assembling, customizing, and exporting app icons. This is now the recommended way to create icons that remain consistent with the rest of the system.
Apart from the new design system, Apple also highlighted recent developments in Apple Intelligence, including improved image generation and writing tools. But one of the most exciting updates for developers is the introduction of the new Foundation Models framework, which gives us access to Apple’s on-device large language model that powers Apple Intelligence. The on-device model is designed to handle a wide range of text generation tasks, such as summarization, entity extraction, text understanding, refinement, dialogue for games, creative content generation, and more. In the livestream from the Apple event, Apple engineers highlighted a few common use cases, including search suggestions and personalized content generation tailored to each individual user.
In addition to these advances, several existing frameworks received important updates. The Vision framework now includes RecognizeDocumentsRequest for structured document analysis, DetectLensSmudgeRequest for identifying smudged camera lenses, and a modernized hand pose detection model with improved accuracy and efficiency. The Speech framework introduces the new SpeechAnalyzer API— a more flexible, Swift-native alternative to SFSpeechRecognizer
. SpeechAnalyzer
manages analysis sessions and supports modular components like SpeechTranscriber, an on-device speech-to-text engine optimized for long-form and distant audio. It supports real-time transcription with both volatile (intermediate) and finalized results, and is already powering features in Notes, Voice Memos, and Journal.
There were a few more updates covered, including improvements to Shortcuts, which now offer intelligent actions and give users the ability to tap directly into Apple Intelligence models. There was also a detailed section on visionOS, but I didn’t pay much attention to that since I’m not building apps for visionOS just yet.
Overall, I thought it was a well-structured event. The information was clear and well presented, and the livestream format worked well. It was also great that Apple offered multiple options for joining and scheduled it at a time that worked nicely for the New Zealand time zone, something that’s pretty rare for Apple events.
Videos
Two practical ways to use matchedGeometryEffect() in SwiftUI
Learn how to use SwiftUI’s powerful matchedGeometryEffect()
modifier to create smooth, polished animations between views. In this video, I’ll walk you through two distinct ways to use matchedGeometryEffect()
— transitioning between views in different parts of the hierarchy, and synchronizing geometry between views that are both visible on screen.
Blog
SwiftUI Search Enhancements in iOS and iPadOS 26
Take advantage of the updated search placement and behavior in iOS 26, and implement toolbar and tab bar search patterns that adapt across devices and integrate with the new Liquid Glass design.
Presenting Liquid Glass sheets in SwiftUI on iOS 26
Learn how to leverage the new glass appearance for partial sheets in iOS 26, and set up morphing transitions for sheets presented from toolbar buttons using SwiftUI APIs.
Schedule a countdown timer with AlarmKit
Step through the essential setup for AlarmKit timers in iOS 26, from requesting authorization and scheduling a countdown to presenting the Live Activity and an in-app list of active timers.
News from friends
My former colleague from Apple, James Savage, has just launched a new blog A Devlog, and I’m sure it will be full of useful insights on Apple platform development and tech in general. He kicked things off with a SwiftUI wish list and plans to cover a range of other topics as well. I highly recommend checking it out and signing up for updates. James is incredibly knowledgeable, and I’m really looking forward to seeing more of his posts as the blog grows.
Discounts
Every month, I share exclusive, limited-time offers on my books with email newsletter subscribers. Sign up so you don’t miss future newsletter issues and can take advantage of upcoming discounts!