Articles Projects About Subscribe

The iOS Desk — Swift & SwiftUI engineering for senior iOS developers

New, in-depth articles twice a week — for senior iOS engineers.

Scroll to explore
// Why trust it

AI-drafted. Engineer-validated.

Most AI dev content ships hallucinated APIs. Here, every Swift sample is compiled against the real SDK before it goes out — so what you copy actually builds.

SDK-compiled

Every Swift snippet compiles against the real iOS, macOS & watchOS SDK before it publishes.

Gate-checked

Editorial gates strip deprecated and never-valid APIs — no copy-paste landmines.

Senior-curated

Operated by a senior iOS engineer with 11+ years shipping production apps.

Covered: Architecture · Concurrency · SwiftUI · Performance · Testing · WWDC · Apple Intelligence

All articles

32
Jul 6, 2026

MVVM or Observable? Choosing for Production SwiftUI

A feed that jitters on device but “looks fine” in Simulator often isn’t a layout bug—it can be invalidations fanning out across your view tree. I hit a case where a si...

SwiftUI · 13 min
SwiftUI
Jul 2, 2026

Custom SwiftUI Layouts with the Layout Protocol

SwiftUI’s Layout protocol turns layout from a set of hacks into a clear contract you can reason about. When stacks and geometry tricks start to jank during scroll, a p...

SwiftUI · 15 min
SwiftUI
Jun 25, 2026

OSSignposter Custom Performance Markers for iOS

Cold starts regress, frames drop, and the trace looks “fine.” The bug only reproduces when a particular asset pack is present, the device is warm, and the user lands o...

Observability · 18 min
Observability
Jun 22, 2026

Debugging App Intents Responses in Xcode

Shortcuts shows the wrong dialog, your AppEntity renders a blank icon, and logs insist everything is fine. The bug isn’t in your copy—it’s in which process you’re debu...

iOS · 20 min
iOS
Jun 18, 2026

Update Sign in with Apple Domains Without Breaking Login

Domain changes for Sign in with Apple look like DNS chores until they lock real users out. Miss a trailing slash on a redirect, swap a Service ID, or publish a bad AAS...

iOS · 17 min
iOS
Jun 15, 2026

NavigationStack Patterns for visionOS

Spatial navigation in visionOS looks effortless until 2D windows, 3D spaces, and scene timing fall out of sync. When focus shifts, spaces open or dismiss, and restorat...

visionOS · 13 min
visionOS
Jun 11, 2026

Scalable Dynamic Type in SwiftUI

I shipped a feed view that re-rendered multiple times per scroll tick because a single @Observable model instance was captured by many ancestor views. The runtime symp...

Accessibility · 9 min
Accessibility
Jun 9, 2026

Getting Your iOS App Ready for iOS 27 Betas

Platform betas change runtime timing, process lifecycles, and occasionally SDK behavior in ways your shipped assumptions may not tolerate. Early discovery in a control...

iOS · 9 min
iOS
Jun 8, 2026

Structured Concurrency Patterns for iOS Networking

Converting completion-handler networking into async/await often shifts runtime semantics: cancellation may no longer reach URLSession tasks, requests can outlive view ...

Concurrency · 10 min
Concurrency
Jun 4, 2026

Modular iOS Architecture Using Swift Packages

A cosmetic refactor that widens visibility can unintentionally expose helper types and increase runtime coupling between app binaries. This piece focuses on pragmatic ...

Architecture · 9 min
Architecture
Jun 1, 2026

On-device Marathon Coach Patterns for watchOS Apps

Consecutive guidance gaps of 10–30 seconds at crowded race starts revealed a common failure mode: critical pacing logic running off-watch and depending on a phone or n...

watchOS · 10 min
watchOS
May 28, 2026

VoiceOver for Custom SwiftUI Controls on macOS

I shipped a macOS build where a custom SwiftUI canvas looked correct but VoiceOver announced many interactive pieces as “group” and focus moved unpredictably during he...

Accessibility · 8 min
Accessibility
May 25, 2026

WidgetKit App Intents Patterns for macOS Widgets

A staged rollout can expose subtle WidgetKit integration failures: widgets that stop updating when intent payloads are malformed, or when decoders behave differently a...

WidgetKit · 10 min
WidgetKit
May 21, 2026

Xcode Time Profiler for macOS hang detection

A frozen macOS window during a customer demo erodes trust the moment it happens. Hangs frequently appear only on physical devices where GPU, scheduler, and driver inte...

Performance · 9 min
Performance
May 11, 2026

RealityKit Performance Tips for visionOS

Converting an ad-hoc RealityKit scene into a production-ready visionOS experience often fails at runtime: unexpected thermal rises, mid-session memory growth, or watch...

visionOS · 10 min
visionOS
Apr 23, 2026

Integrating Apple Intelligence into App Intents

Converting loosely typed intent inputs to AppIntent often reveals issues only after broad usage: shortcuts run unexpectedly, background work spikes, and support ticket...

Apple Intelligence · 10 min
Apple Intelligence
Apr 20, 2026

Automating Xcode Tasks with Swift Package Plugins

I once shipped a release where silently divergent local build scripts produced different generated sources for the same commit — the release build failed because CI us...

Tooling · 8 min
Tooling
Apr 16, 2026

Instrumenting iOS Apps with OSSignposter

In production timelines I often see ad-hoc logs and per-request identifiers create noisy, high-cardinality signals that hide real latency and causal boundaries. This n...

Observability · 9 min
Observability
Apr 13, 2026

Designing Custom SwiftUI EnvironmentKeys

I once diagnosed a production feed where scrolling caused excessive re-renders due to an observable-like instance being provided by multiple ancestors and scattered en...

SwiftUI · 10 min
SwiftUI
Apr 6, 2026

App Intents Patterns for iOS Shortcuts

Shortcuts that “do nothing” in production often trace back to a few concrete failures: an AppIntent that stops resolving, a permission prompt that never appears, or lo...

App Intents · 8 min
App Intents
Apr 1, 2026

Find Swift Memory Leaks with Xcode Memory Graph

Memory growth that starts small and climbs during long sessions—until crashes or UI stutter—often signals an ownership leak rather than a rendering bug. When Notificat...

Debugging · 8 min
Debugging
Mar 31, 2026

Speed Xcode Builds with Explicit Swift Modules

Builds that are fast locally but slow on CI break review velocity and increase context switching. I frequently see intermittent module is out of date or obscure type‑c...

Build Systems · 9 min
Build Systems
Mar 31, 2026

Automating Dynamic Type Tests in Xcode

App releases still break when a user chooses an accessibility text size: labels clip, cells truncate, and bug reports land in QA after release. These regressions are o...

Testing · 9 min
Testing
Mar 30, 2026

Verified SwiftUI Modifiers for Safer App UI

Fast navigation, recycled list cells, and heavy scrolling expose latent problems when SwiftUI modifiers capture mutable state. Small visual helpers often graduate to s...

SwiftUI · 9 min
SwiftUI
Mar 29, 2026

Custom Layouts Using SwiftUI's Layout Protocol

Converting ad-hoc layout math scattered across view bodies into reusable types frequently exposes nondeterministic behavior: frames jump during rotation, dynamic type ...

SwiftUI · 10 min
SwiftUI
Mar 27, 2026

Profiling SwiftUI Rendering in Instruments

A subtle rise in per-frame CPU on older devices can turn a calm rollout into an urgent rollback. When SwiftUI views re-render more broadly than expected or perform syn...

Performance · 9 min
Performance
Mar 22, 2026

Dependency Injection Patterns for Production SwiftUI

Converting global singletons to explicit dependency injection often exposes production-only failures: blank screens, duplicated URLSession calls, or stale ObservableOb...

Architecture · 10 min
Architecture
Mar 21, 2026

Privacy-First Telemetry with Swift Concurrency

Converting completion-handler telemetry flows to async/await can shift cancellation and lifecycle semantics. That shift may cause uploads, file writes, or key-related ...

Privacy · 9 min
Privacy
Mar 16, 2026

Migrate URLSession to Swift async/await

Swapping URLSession completion handlers for async/await can clean up call sites quickly — but in real apps it changes cancellation semantics, error propagation, and ob...

Concurrency · 10 min
Concurrency
Mar 16, 2026

Migrate Combine to Swift async/await

Replace long Combine chains with Swift async/await and your code often becomes easier to reason about. Migration is not a mechanical find-and-replace: execution timing...

Concurrency · 10 min
Concurrency
Mar 14, 2026

Migrate ViewController Navigation to SwiftUI NavigationStack

Short story: a mature app’s navigation often becomes a web of push/pop calls, segues, and ad‑hoc hacks to support deep links, state restoration, and modal coordination...

Navigation · 8 min
Navigation

No articles match your search.

Saurabh Dave
// Who's behind it

Saurabh Dave — senior iOS engineer building banking, payments, telecom, and AI-powered applications for 11+ years (AT&T, Infosys, Titan). 100+ iOS apps shipped, plus open-source Swift packages on GitHub.