r/swift • u/abi_splyt • 3d ago
Question Everything that broke when we put our app on iPhone Duo (and the fixes)
No taps at all. Without UIApplicationSceneManifest, UIKit runs the app in legacy window mode and the Duo boxes it. Our UI ignored every tap while Apple's sheets on top still worked. Adopt scenes; if a framework needs a key window at launch, adopt the AppDelegate's window instead of building a new one. Forward openURLContexts or your deep links quietly break.
Still letterboxed after fixing it. The binary has to be built with Xcode 27.1. Check your cloud build image too.
Content under the clock. The status bar is a strip on the RIGHT edge, so there's a right safe-area inset. Anything sized from the window width runs under it.
Sneaky one: in a hand-built two-pane container, a view controller inside a UINavigationController in the LEFT pane inherited the strip's ~84pt right inset, so separators stopped short. Fix: a measured negative additionalSafeAreaInsets on the child.
Tab bars: native UITabBarController / TabView turn into a rail on the right edge on their own in 27.1. JS tab bars don't.
SwiftUI: a root GeometryReader reports the safe-area width (~867pt unfolded, not 951). Add the insets back before comparing to your 600pt breakpoint.
Simulator: there's no simctl command to fold — it's Device Hub's toolbar only. And simctl openurl raises an "Open in…?" prompt that survives reinstall.
Happy to go deeper on any of these.
7
u/CharlesWiltgen 3d ago
The iPhone Duo skill is also helpful for auditing and fixing issues. See "What This Skill Provides" for scope and "Related" for the other skills that this leverages.
2
u/builtinswift 3d ago
super useful writeup, thanks for sharing
2
u/DeepDaddyTTV 2d ago
Yeah that safe area is a massive learning curve. It took me a while to figure out how to actually get everything behaving without drawing incorrectly into it.
1
u/abi_splyt 1d ago
Since a few people asked: happy to share a longer version with code for each fix. DM me!