This is the most practical page Apple has published for the Duo: three steps, with the code patterns named. It also settles a question we had to hedge — the guide exists now, so the checklist below is Apple's, not our reconstruction.
Confirmed Apple's guide or release notes state it. Each claim links to the source.
Our reading What it means for your code. Not Apple's words.
Open Apple has not answered it, so we have not guessed.
01 · Where things stand
Three facts from Apple, all with dates attached:
| What | Status |
|---|---|
| iPhone Duo availability | Starting 23 October 2026 |
| App submissions | Open — Apple's words for the Duo's launch content are that submissions are officially open |
| Xcode 27.1 | Now listed as a Release Candidate on Apple's Get ready page — it was a beta (27A9269) when we covered the simulator runtime |
Our reading: the SDK question is now a scheduling question rather than a technical one. Nothing about the three levels below changed; what changed is that the toolchain a release plan should sit on has reached release candidate, so "we will move to 27.1 after launch" is a choice rather than a constraint.
02 · What the SDK you build against decides
Before the three steps, the premise. Apps built with the iOS 27 SDK and later resize dynamically on the Duo: unfold it and the app expands to the inner display, fold it and the app returns to the outer one. Hardcoded screen sizes, fixed orientations and device assumptions are what break. Apple's own before-and-after:
| Built with | What it looks like on the Duo |
|---|---|
| iOS 26 SDK or earlier | Runs, but does not adapt to all layouts. Open, the app appears in the centre of the inner display with empty space around the window. Closed, the outer display shows its content to the left of the status bar and camera. |
| iOS 27 SDK | Resizes to fill most of the inner display, but still avoids the status bar on the right edge — improved, with the empty space minimised. |
| iOS 27.1 SDK or later | Optimised: content extends across the full display, with toolbars and tab bars appearing vertically below the status bar. Apple's warning before you ship on 27.1: make sure your content adapts to the bars becoming vertical. |
We walked through the same three levels in September from the SDK release notes and the session videos — Three Levels of Duo Support. Apple's guide now states them directly, which makes that post the background and this one the working list.
03 · Step 1 · Run the app resizability skill
In Xcode, ask the coding assistant to "get my app ready for iPhone Duo." The skill scans your project for the patterns in Step 2, and for each issue it finds it explains the problem and suggests a fix. If you use a different coding agent, Apple's route is to export the skill from Terminal:
xcrun agent skills export— then give the exported skill to your own agent
Our reading: the interesting detail is Apple telling you the skill is not complete — the guide says it "finds most issues, but not all of them," and asks you to review the Step 2 list and catch anything it misses. Treat the skill as the first pass and the list below as the specification.
04 · Step 2 · The patterns to fix
Stop sizing from the main screen
On the Duo your app's size changes whenever the device folds or unfolds, and it does not always match the size of the screen. Search for UIScreen.main and replace each use:
| Instead of | Use |
|---|---|
UIScreen.main.bounds | view.bounds or window.bounds; in SwiftUI, GeometryReader or onGeometryChange |
Reading size once at launch or in viewIsAppearing | Size-dependent layout in layoutSubviews / viewDidLayoutSubviews, with viewWillTransition(to:with:) for work that runs when size changes — a fold can resize your app mid-session |
| Scale from the screen | traitCollection.displayScale in UIKit, @Environment(\.displayScale) in SwiftUI |
UIWindow(frame: UIScreen.main.bounds) | UIWindow(windowScene:) — create windows from a scene |
Storing a UIScreen | Read it dynamically: view.window?.windowScene?.screen |
Avoid using orientation to make layout decisions
The device's orientation does not tell you what shape your app is. Apple names the properties to search for and strip from layout logic: UIDevice.current.orientation, statusBarOrientation, and interfaceOrientation — including windowScene.effectiveGeometry.interfaceOrientation. If you need to know whether your app is wider than it is tall, compare the width and height of the space you actually have: view.bounds in a view controller, superview.bounds in a view, or the size from a GeometryReader in SwiftUI.
Stop assuming idiom or size class identifies the device
With the Duo and resizable iPhone Mirroring, an iPhone app can have any combination of size classes, and on the inner display Apple's expectation is that your app looks like a natural extension of its iPad layout:
- Do not choose a layout by idiom — search for
userInterfaceIdiom == .phoneand== .pad; base the choice on size classes or available space - Do not treat
horizontalSizeClass == .regularas "iPad" — that layout will now run on an iPhone - Remove comparisons against specific device sizes, such as
bounds.height == 844or a list of known iPhone dimensions - Check full-bleed media: hero images and video set to
.scaleAspectFillor.aspectRatio(contentMode: .fill)can lose important content on wider displays — choose fill or fit from the current size classes or aspect ratio, or set a focal point
Our reading: the three headings are one bug in three disguises — code that asks the device what it is instead of asking the space how big it is. If you only have time for one pass, the UIScreen.main search is the highest-yield one, because it is greppable and every hit is a potential clipped or stretched layout.
05 · Step 3 · Test resizing
| Tool | What it gives you |
|---|---|
| The resizable iOS simulator in Device Hub | A resizable iPhone runtime to drag through sizes |
| iPhone Mirroring on macOS 27 | Resize the window to extreme sizes in both directions |
| The iPhone Duo simulator in Xcode 27.1 | Apple's note is unambiguous: this is the best way to test the full native experience |
Our reading: use all three for what each is good at. Mirroring is the fastest way to feel extreme widths, Duo Simulator is the closest thing to the device, and neither covers camera behaviour — Simulator has no camera, so the camera APIs need hardware. Our simulator notes carry the runtime's current limits (no StandBy, no app-extension debugging, slow first launch).
06 · What this guide leaves out
The guide is deliberately about resizability. Three things it does not cover, which is where the rest of the preparation lives:
- Camera. Direction and the outer-display accessory are separate articles — see which way that camera faces.
- State across a fold. Apple answered this in the Group Lab: opening or closing the device is a size-class and trait change, not a scene disconnect or app teardown, so your process keeps running and text input, scroll position and playback are generally preserved. The exception is a scene that genuinely disconnects and reconnects — use
stateRestorationActivity(for:)there. Our notes on those answers carry the rest. - Store assets and design. Screenshot and preview specifications for the Duo, plus the Figma and Sketch design kits for the device, sit in Apple's App Store asset and design resource pages rather than in this guide.
07 · Checklist
- Decided which SDK your release ships on, given Xcode 27.1 is at release candidate and the device ships on iOS 27.1
- Resizability skill run in Xcode, or exported with
xcrun agent skills exportfor another agent - Every
UIScreen.mainhit replaced or justified - Layout logic cleaned of
UIDevice.current.orientation,statusBarOrientationandinterfaceOrientation; width/height compared instead - No layout branch decided by idiom or by treating regular width as iPad
- No comparisons against hardcoded iPhone screen dimensions
- Full-bleed media reviewed for what it loses on a wider display
- Bars checked as they become vertical on the 27.1 SDK
- Resized to extremes in iPhone Mirroring and in the resizable simulator
- App run in the iPhone Duo Simulator in Xcode 27.1, with its current limits in mind
- Capture paths tested on hardware, not in Simulator
- Store screenshots and previews updated for the Duo's displays