Joe Pantuso

Still Getting Your App Ready for iPhone Duo?

October 15, 2026

tl;dr Build with the 27.1 RC, fix state before layout, submit now with manual release, and the badge comes from your Duo screenshots.

If your app isn’t in App Review yet, you have about a week. iPhone Duo pre-orders open tomorrow and the phones arrive October 23rd. Review is taking anywhere from a day to several, so every day you wait comes out of the margin.

I wrote a long guide back in September. Since then one of my apps has shipped with its Duo work (How’s the Canyon?), one is approved and waiting for launch day (Slope Minder), and one is built and uploaded (Big Sky Field Guide). This is the short version for this week: what cost me time, plus what other developers have hit since the submission window opened.

Build with the RC, and only the RC

Apple opened submissions on October 5th for apps built with Xcode 27.1 RC (27A9275). There’s no final 27.1 yet. Xcode 27.2 is a separate beta track and isn’t what you want for this.

The trap is having two Xcodes installed and archiving with the wrong one. How’s the Canyon? 1.4 went to the store on October 8th built with Xcode 27.0, so its fold work wasn’t in it. 1.5, archived with 27.1, went live yesterday. If your code uses the 27.1 APIs (reservedRegions, ArrangementView, the hinge) it won’t compile under 27.0, so at least you find out. If it only relies on what you get for free, a 27.0 archive builds fine and quietly ships the compatibility mode.

So check your release scripts. If you keep both versions side by side, point DEVELOPER_DIR at the 27.1 app rather than trusting xcode-select.

Two more toolchain notes:

Let Apple’s skill do the first pass

Apple’s prepare page now starts with Xcode’s coding assistant. Ask it to “get my app ready for iPhone Duo” and it runs the App Resizability skill over your project. If you use another agent, xcrun agent skills export --output-dir

writes the skill out. (Run it on the Mac itself. Over ssh it hung.)

Apple says it “finds most issues, but not all of them,” and lists what it looks for: UIScreen.main, orientation checks, idiom checks, treating regular width as iPad, hard-coded device sizes, and aspect-fill media. Grep for those yourself too. It’s cheap, and most hits are real bugs on this phone.

Paul Hudson’s SwiftUI skill was revised after he had time with hardware at one of Apple’s workshops. Read it alongside Apple’s.

Fix state before layout

The worst thing I hit wasn’t a layout bug. Big Sky Field Guide had an iPad layout and picked its phone or iPad root on size class. On every other iPhone that’s safe, because a phone never reaches the regular branch. On a Duo it does, every time someone opens the phone. Someone deep in the 3D valley map opened the phone and landed on the front page. No crash, just their place gone. Closing it again didn’t bring it back.

The fix was one NavigationSplitView for every width, collapsed to a single column on the outer display, instead of two roots swapped on size class. The map now keeps its camera through every fold.

While you look for this in your own app:

  • Folding doesn’t change scenePhase. It’s a resize, not a relaunch (Apple said so in the labs, and Hudson’s skill says the same). So a save-on-background flow never runs. If the view tree throws your state away, nothing catches it.

  • You can rehearse the size class change without the pose buttons. I added a debug-only launch argument that flips the window’s horizontal size class through traitOverrides every few seconds. It’s not the real thing (the screen doesn’t change size), but it catches the root swap on every build without anybody clicking in Device Hub.

Then the layout things that bit

  • Since iOS 26 the sidebar floats over the detail column. A full-bleed map in the detail column runs under the sidebar, and anything that ignores the safe area reads zero insets. The Field Guide’s map labels came out about 300 points off on the inner display. Measure the insets from a view that stays inside the safe area, then apply them to the canvas.

  • Labels and cards under the side bar. Keep anything drawn over a canvas inside the safe area on every edge. The bar is on the side, and in Split View it can be on the left.

  • System bars sit about 10 points inside the safe area. Craig Hockenberry found a custom search field anchored to the safe area got clipped next to them.

  • Every toolbar item needs a title and a symbol. Vertical bars use the symbol, overflow uses both. A title-only item stays horizontal.

  • Centered things land on the fold in book pose. Titles, single buttons, and floating cards in a trailing column all straddled the crease in my apps.

  • Hiding the status bar buys toolbar room on the closed Duo. Greg Pierce: “on the Duo it actually gains you toolbar space, which is at a premium.”

And on UIRequiresFullScreen: it doesn’t get you out of this. With the 27.1 SDK your app still resizes when the phone opens or closes. In the simulator the key put my test app in a scaled portrait box on the inner display. Hudson’s skill flags the key outright.

What review is taking

App Submitted Approved
How’s the Canyon? 1.5 October 13 October 14, about 22 hours
Slope Minder (iOS and visionOS) October 7 visionOS October 7, iOS October 9

Greg Pierce had four Duo-ready iOS builds sitting in Waiting for Review for days while a Mac build cleared in one. James Thomson’s first RC upload was rejected as an unsupported SDK, then accepted a few hours later. So it varies. Plan on days.

Submit with manual release. Approval then holds the version at Pending Developer Release, and you push it out on the 23rd. Slope Minder has been sitting approved since the 9th waiting for launch day.

Screenshots and the badge

From Apple’s prepare page: “When you submit iPhone Duo screenshots in App Store Connect, your App Store product page will display a badge to let people know your app is optimized for iPhone Duo.” Duo screenshots aren’t required until April 2027, but the badge needs them now.

  • Sizes are in the screenshot specifications: 1398 × 2034 for the outer display and 2007 × 2853 for the inner, in either orientation. They match what the simulator produces.

  • Capture by display. On the RC runtime, simctl io … --display=internal gave me the outer display. Get the display UUIDs from simctl io enumerate and capture by UUID.

  • Black screenshots for the first few minutes after the simulator boots are a known issue. Wait it out, or use the menu command rather than the toolbar button (Thomson).

  • App previews (video) didn’t work as of last week. App Store Connect took the file and couldn’t process it.

  • The new preview tool in App Store Connect shows your assets on the Duo. Hockenberry likes it, with a warning: “Just be careful about how much faith you put in them being correct as you switch between devices. (Trust the safe areas!)”

  • For your own site, frames-cli 1.5.0 has Apple’s Duo bezels, open and closed.

Ask to be featured

Submit a featuring nomination in App Store Connect. Apple’s page says you can state in Helpful Details that your app is optimized for iPhone Duo, “including support for all device poses.”

What you can’t check yet

VoiceOver and the Accessibility Inspector can’t read a Duo inside Device Hub, so accessibility on the Duo waits for hardware. So do cameras, grip and reach, what the crease does to whatever’s under it, and how often people fold mid-task.

So ship the careful version built from system components this week, because those are the parts Apple fixes for you. Then plan a second release two to four weeks after you have one in hand.

If you’ve hit something that isn’t here, let me know and I’ll add it to the guide.