Standard notifications using Notification Center are only concurrency-safe when using the MainActorMessage or AsyncMessage protocols. These protocols are available since iOS & macOS 26+ and should become the standard for using thread-safe notifications. The Notification type is nonisolated by default, even in cases where it’s posted from known isolation domains like the main actor. To …
Simulator Camera: Test your app without a physical device
Camera testing in Xcode’s Simulator is possible, but I’m sure you’re now wondering: how?! For years, this has not been possible. Literally, it never has been possible to test the camera on the Simulator. Crazy if you think about it. Android’s Simulator has a way of at least basic functionality, but on iOS, we’re always …
Build performance analysis for speeding up Xcode builds
Build performance can be analyzed in Xcode to speed up your builds. This can quickly speed up your workflow and save a lot of time during the day for all developers working on the project. Slow builds often distract us as they enable us to focus on distractions like social media and Slack. By investigating …
SwiftUI Architecture: Structure Views for Reusability and Clarity
As your SwiftUI projects grow, the need for a better SwiftUI architecture grows, as it’s easy for view bodies to become very long. You start with a simple screen, and before you realize it, your body includes dozens of nested VStacks, HStacks, and custom modifiers. At some point, scrolling through the body feels like reading a novel. In …
Why Swift Migration Tooling Matters
Swift offers migration tooling to help you migrate existing code to new upcoming features. Swift Evolution proposals on GitHub will mention an upcoming feature flag that you can use to opt in early. For most of these features, it’s likely that they’ll become the default in the future. Therefore, it’s essential to know how to …
The 5 biggest mistakes iOS Developers make with async/await
App Store Rejections, your UI freezing for 5 seconds, and migration projects taking months instead of days (even if you’ve been writing Swift for years). These could all be the result of common mistakes that are easy to make when writing Swift Concurrency code. I’ve created a 65+ lessons course, wrote tens of articles on …
Derived Data: 5 Things iOS Developers Do Wrong
The Derived Data folder is one of the most important directories an iOS developer relies on. While you don’t work with it directly, Xcode is using it heavily to cache information and optimize the developer experience. Yet, there are many opportunities for iOS engineers to maximize the benefits of Derived Data. Whether it’s deleting files …
App Store Optimization: Real-world Best Practices
App Store Optimization is important for every app’s success. You’ve spent a lot of time building a fantastic product, so you’d better get it in front of as many potential users as possible. Yet, it’s a whole different paradigm; it requires different knowledge and tools. I’ve been here myself, and today, I’m sharing my personal …
SwiftUI Toggle: A Complete Guide
A SwiftUI Toggle is a common UI element that allows users to switch between states. It often turns a binding value on or off, and it’s commonly used for settings or binary choices. In this guide, I’ll walk through everything you need to know about a Toggle in SwiftUI: from the basics to customization, accessibility, and real-world …
@ViewBuilder usage explained with code examples
The @ViewBuilder attribute is one of the few result builders available for you to use in SwiftUI. You typically use it to create child views for a specific SwiftUI view in a readable way without having to use any return keywords. I encourage you to read my article Result builders in Swift explained with code …