Category
SwiftUI
Everything we’ve written under SwiftUI.
SwiftUI articles
- SwiftUI
Testing Handoff When You Cannot Automate It
Part 9 closes our Apple Continuity series. There is no automated way to test a device-to-device Handoff, and that absence is a finding rather than a gap in our research. What you can still test purely, a DEBUG arrival seam that proves routing and not transport, the six-condition manual smoke test, and the full list of what nine parts could not settle.
Ben Van Aken11 min read - SwiftUI
Continuity Camera and the Features With No API
Part 8 of our Apple Continuity series. Continuity Camera import is one AppKit menu item whose absence is completely silent, and the webcam half breaks on a hard-coded device type or a discovery session read once at launch. Shared with You cannot carry private content at all, and iPhone Mirroring cannot be detected from inside an app.
Ben Van Aken11 min read - SwiftUIFeatured
Universal Clipboard: The Continuity Feature You Already Shipped
Part 7 of our Apple Continuity series, and the uncomfortable one. Universal Clipboard rides on Handoff, is opt-out, and is already running in your app: a plain UIPasteboard.general.string on a screen full of someone else's data is a cross-device transfer. iOS has localOnly. macOS, by Apple's own sentence, has no opt-out at all.
Ben Van Aken11 min read - SwiftUI
What Must Never Cross a Handoff
Part 6 of our Apple Continuity series. An NSUserActivity is a publishing decision, and three of its four eligibility flags publish somewhere you did not intend: isEligibleForPublicIndexing reaches Apple's global Spotlight indexes, webpageURL is what a device without your app follows, and a stale activity keeps advertising a record the user has already left.
Ben Van Aken11 min read - SwiftUI
Sending Handoff to the Right Window
Part 5 of our Apple Continuity series. Arriving in the app is not the same as arriving in the right window. SwiftUI picks the scene for a continuation in four documented steps, and it matches on a property most Handoff tutorials never set: targetContentIdentifier.
Ben Van Aken9 min read - SwiftUI
How Big Should a Handoff Payload Be in 2026
Part 4 of our Apple Continuity series. Apple's current NSUserActivity reference publishes no payload size. The same activity can name the on-screen entity for Siri and Apple Intelligence, so send an identifier and let the other side load the content. The 2016 figure of 3 KB survives only as a historical footnote.
Ben Van Aken15 min read - SwiftUIFeatured
Where Handoff Actually Arrives on iOS and macOS
Part 3 of our Apple Continuity series. On iOS, a scene-adopted app receives Handoff in scene(_:continue:) and never in the app delegate. The three app-delegate Handoff methods carry an availability upper bound of 26.0; the scene and AppKit equivalents carry none. With the fetch technique behind those figures, the three-callback set, and a snippet that proves which seam fires in your app.
Ben Van Aken10 min read - SwiftUI
Your First NSUserActivity: Handoff in Swift
Part 2 of our Apple Continuity series: the smallest Handoff that works end to end. Build the activity, declare NSUserActivityTypes in every receiving target, advertise and receive it in SwiftUI. The same Team ID plus a declared type is the entire gate.
Ben Van Aken8 min read - SwiftUIFeatured
Apple Continuity Is Three Different Contracts
Part 1 of our Apple Continuity series. Continuity is not one feature but a family with three postures: opt-in with an API, opt-out and already running with your data, and no API at all. Almost every mistake we found came from applying one posture's rule to another's feature.
Ben Van Aken8 min read - SwiftUIFeatured
On-Device Translation with Apple's Translation Framework (The Session You Can't Keep)
A TranslationSession is only valid inside the closure that hands it to you. That single constraint decides the batching, the caching and the shape of every object around it.
Ben Van Aken10 min read - SwiftUIFeatured
Tracking ScrollView Offsets in SwiftUI (Three Ways That Actually Work)
The PreferenceKey snippet everyone copy-pastes silently reports a frozen 0.0. The coordinate space isn't why. Here's the fix, plus scrollPosition(id:) and onScrollGeometryChange.
Ben Van Aken11 min read - SwiftUI
Building an In-App Feedback Loop for Your SwiftUI App
Feedback scattered across App Store reviews, email and TestFlight isn't a collection problem. It's a loop problem. Here's how to build the loop in SwiftUI.
Ben Van Aken7 min read - SwiftUI
SwiftUI vs UIKit: A 2026 Answer, Not a 2020 One
Six years on, this is not a choice between two frameworks. It is a ratio, and every app we ship has both in it. What SwiftUI still does badly, how to bridge in both directions, and how to pick per project.
Ben Van Aken12 min read - SwiftUI
The Swift Logger API, End to End
Unified logging is the best-documented Apple API that almost nobody uses properly. Subsystems, the privacy rules that redact your strings, signposts, pulling logs off a device, and why the server wants a different Logger entirely.
Ben Van Aken13 min read
No articles match your search
Try a different word, or clear the search.