Xcode 26.4 quietly removed the ability to run app-hosted unit tests against physical iOS 16 devices, and Xcode 27 finally added a Delete Derived Data menu item — which the community correctly read as Apple admitting the IDE corrupts its own caches on a regular basis. Between those two announcements is the entire reality of…
How to unblock a stuck notarization, fix Team ID prefix errors, and survive 3.1.1 review
A notarization stuck “In Progress” for 60 hours. A returning developer’s app failing validation with error 90286 because Automatic Signing prefixed the bundle ID with a 15-year-old Developer ID instead of a Team ID. A Canadian VoIP startup rejected under guideline 3.1.1 with no clear test for whether prepaid calling credits count as “intermediary currency.”…
How to structure SwiftUI navigation with NavigationSplitView and a router
You moved your SwiftUI app to a router pattern with a top-level NavigationPath, added a NavigationSplitView for iPad and Mac, and now pushing a view from the router replaces the entire content column instead of stacking inside the sidebar. You reach for .isDetailLink(false) — the old escape hatch — and find it does nothing once…
How to keep craft and signal in an AI-flooded iOS dev community
Two of the most-upvoted threads on r/iOSProgramming this month say the same thing in different words: “I miss the programming aspect of iOS programming” and “Why would anyone start a new app today?”. The complaint underneath both is not really about LLMs. It is about signal. The phrase “iOS developer” used to mean someone who…
How to plan for the iOS 27 SDK cliff: Liquid Glass, size classes, and Reality Composer Pro migrations
Apple’s annual SDK cycle keeps shipping silent breaking changes. The UIDesignRequiresCompatibility plist key is honored on Xcode 26 builds and ignored on Xcode 27 builds. iOS 27 collapses iPhone horizontal size classes to compact, breaking ten years of storyboard constraint variations with no runtime warning. Reality Composer Pro 3 imports projects from RCP 2 with…
How to survive Xcode 26 and 27 regressions: IB gutters, beta-OS crashes, AI pane, and orphaned simulators
Xcode 26.4 silently broke Interface Builder for Objective-C projects. Xcode 26 crashes with EXC_BAD_ACCESS the moment you launch onto an iOS 27 beta device. Xcode 27’s new Coding Assistant opens conversations in a floating window instead of next to your code. And nobody’s Mac can delete the 9–85 GB of orphaned simulator runtime sitting under…
How to structure an ARKit/SceneKit game
A practical guide to separating game logic, scene management, and entities in an ARKit/SceneKit iOS game using GameplayKit’s entity-component system.
How to defend a shipping app against iOS 26 and 27 beta regressions
Your HealthKit completion handler reports success = YES, but no permission was ever granted. UserDefaults.standard.integer(forKey:) crashes inside App.init(). A system extension that worked all last year now fails with errno 13 for half your customers. These are not edge cases — they are real regressions that shipped in iOS 26.5 and iOS 27 beta 1,…
How to load local HTML files in WKWebView on iOS and macOS
Since iOS 13, loading local HTML via WKWebView requires the purpose-built loadFileURL(_:allowingReadAccessTo:) API. This post covers the correct approach, how to handle inter-page navigation including the /nextPage sandbox trap, and when to use WKURLSchemeHandler for same-origin-sensitive apps.
The Blast Door Design Pattern: A Secure Software Architecture
Real-life blast doors keeps fire, explosion, and radiation at bay. Designing blast doors into your system can also make it more secure, more resilient, and serves as a protective barrier from attacks.
Native vs Web: Technologies Available to Native Apps but not Web Apps
Progressive web applications have access to many features previously available only to native applications. However, there are still platform capabilities available exclusively to native applications. This article summarizes what are those.
How to Define Your Own Uniform Type Identifier (UTI)
Uniform Type Identifiers (UTIs) are a standardized way for macOS and iOS applications to identify data types. UTIs are used to identify a wide range of data types, from images and audio files to text documents. UTIs are hierarchical, allowing applications to recognize and work with related data types. Developers can define their own UTIs in their applications to provide better integration with other applications in the ecosystem.
How to Get Started with FMDB using Swift
My latest guest post for Waldo shows you how to use SQLite databases using Swift through Gus Muller’s FMDB library. Head to Waldo for the article: Getting Started with FMDB and Swift: A Guide.
SwiftUI vs. Storyboard: Which Is the Best?
Comparing SwiftUI with storyboards for iOS development – which one is better when.




