iPhone Duo for developers

What an app can and can't do on iPhone Duo, in one place. I checked it against the iOS 27.1 SDK headers, the Duo simulator and Apple's own pages. Last checked . Where something is my inference rather than Apple's statement, I say so.

The two displays

Design in points and let the system do the rest. Apple describes the inner display as regular width, like an iPad, and the outer display as compact width, like any other iPhone.

Inner display 669 by 951 points, regular width. Outer display 466 by 678 points, compact width. The fold runs across the inner display in portrait.
Both displays at the same scale. In portrait the fold runs across the inner display.
Inner displayOuter display
Points (portrait)669 × 951 pt466 × 678 pt
Scale@3x@3x
Rendered pixels2007 × 28531398 × 2034
Panel, per Apple's spec sheet1878 × 2670, 430 ppi, 7.6-inch1398 × 2034, 460 ppi, 5.4-inch
Size classesregular widthcompact width
App Store screenshots2007 × 2853 or 2853 × 20071398 × 2034 or 2034 × 1398

The outer display renders at exactly its panel resolution. The inner display renders larger than its panel and, as far as I can tell, is scaled down onto it, which is what iPhone 6 Plus did. That is my reading of the numbers, not something Apple states. The practical rule is the same either way: lay out in points, read sizes from your scene or view, and never from UIScreen.main, which the SDK has marked deprecated since iOS 26.

Inner display: 669 by 951 points at 3x renders 2007 by 2853 pixels, which appears to be scaled down to the 1878 by 2670 pixel panel at 430 ppi. Outer display: 466 by 678 points at 3x renders 1398 by 2034 pixels, exactly the panel resolution at 460 ppi.
The inner display renders larger than its panel and is scaled down. The outer display renders at exactly its panel resolution.

The strongest evidence for the scale-down is in the simulator's own display profile, which describes both displays at 460 dpi. Scale the inner display's rendered 2007 × 2853 from 460 to the panel's 430 ppi and you get about 1876 × 2667, within a few pixels of the 1878 × 2670 panel. So the inner display most likely renders at the outer display's density and is downsampled to its panel. That is still my inference.

Open, the device is wider than it is tall, so the natural open pose is the inner display in landscape, with the fold running top to bottom. Turned the other way, the fold runs across the middle. Partly folded like that and set down, it is tabletop pose.

Closed: the outer screen in one hand. Flat: one big screen or a shared board. Book: two pages with the fold as a spine, seen from above. Tabletop: a view above the fold and controls below. Tent: standing on its edges.
The poses, seen from the side. The dot is the hinge.

Reading the hinge

Public API, and I found no entitlement requirement. Both frameworks deliver a status and a continuous angle.

One half of the device lies flat while the other rotates from closed to fully open. Near closed the status is closed, across the middle it is partially open, and at the end it is fully open. The continuous angle is measured between the halves. The system decides the boundaries.
Status is coarse and dependable. The angle is continuous, with no promise about how often it updates.
SwiftUIUIKit
Observe.onHingeChange { old, new in … }UIHingeInteraction(updateHandler:), added with addInteraction
ValueDeviceHingeContext.hinge: DeviceHinge?UIHingeInteraction.Update.hinge: UIHinge?
Status.closed, .partiallyOpen, .fullyOpenthe same, plus .unknown
Angleangle: Angleangle: CGFloat, in radians
No hingehinge == nilhinge == nil when the view leaves a hierarchy with hinge updates
  • Apple's own doc comment: the rate and granularity of angle updates are system policy and can change. Don't depend on a frequency or a precision.
  • If you only need open or closed, use status. Apple determines it from the angle and the device orientation.
  • A disabled UIHingeInteraction doesn't queue updates. Re-enabling it delivers the current state, if one is available.
  • There is no hinge API in Core Motion, Game Controller or Metal. Games read it through UIKit or SwiftUI.
  • Apple positions the hinge for interactions and effects. For layout, use the fold region below.
As the hinge angle falls past the show threshold the content appears, and it only hides again once the angle rises back past the higher hide threshold, so small wobbles near either line change nothing.
For a boundary of your own, use two thresholds so a hinge resting near one line doesn't flicker.

The fold and the cameras as regions

Reserved regions describe parts of your view that something else owns. Query them from a GeometryProxy in SwiftUI or from a UIView in UIKit.

In book pose the fold is a division region down the middle of the inner display. The inner front camera is an occlusion region only while it is in use. On the outer display the camera is an occlusion region all the time.
The fold is a division region. The cameras are occlusion regions, and the inner one is only reserved while it is in use.
KindWhat it isWhen it's active
.divisionThe folding region. Split content into two regions either side of it.Only when partly open. Flat, it is inactive.
.occlusionAn area an element covers. On iPhone Duo, the front cameras.The outer camera always. The inner camera sits under the display and is only reserved while it is in use.
  • SwiftUI: proxy.reservedRegions(kind: .division, options: [.includeInactive]). Each region has a frame including margins, the margins and isActive.
  • Pass .includeInactive to know where the fold will be before it appears, for decisions like an even number of grid columns.
  • In SwiftUI, frames are mirrored for right-to-left layouts by default. Pass layoutDirectionBehavior: .fixed for the hardware position.
  • Alerts, sheets, context menus and popovers move away from the fold on their own, and split views adjust their column widths. Scrolling content can cross the fold. Custom interactive views need you to keep them clear of it.

Layout and vertical bars

On the outer display and on the inner display in landscape, the system moves tab bars and toolbars to the side edge. On the inner display in portrait they stay horizontal.
System bars move to the side edge on the outer display and in inner landscape. Inner portrait keeps them horizontal.
  • ArrangementView(primary:secondary:) in SwiftUI and UIArrangementViewController in UIKit arrange two views and land them either side of the fold. Styles: .split and .overlay, plus .automatic in SwiftUI, which resolves to split. Avoid putting them inside a navigation split view, a list or a scroll view.
  • On the outer display, and on the inner display in landscape, the system moves navigation bars, toolbars and tab bars to the side edge for most full-width views. Inner portrait keeps horizontal bars. There are exceptions: inspectors stay horizontal, and in a split view only the detail column goes vertical.
  • Only system bars move. Hand-built bar views stay where you put them.
  • A toolbar item needs an icon to appear in a vertical bar. Text-only items and custom views stay horizontal. Give items a title as well, for the overflow menu.
  • To opt a screen out: toolbarVerticalBehavior(.disabled) in SwiftUI, or override preferredVerticalBarBehavior in UIKit. To read the side: the toolbarVerticalEdge environment value in SwiftUI, or the verticalBarEdge trait in UIKit.
  • Safe areas are often asymmetric. Inset by each edge, never by one side doubled.
  • Don't make layout decisions from userInterfaceIdiom or orientation. In the simulator, the Duo reports the phone idiom, even on the inner display.

The outer screen rule

Currently, the only way to use both displays at once is a scene accessory registered for camera capture: CameraCaptureAccessory in SwiftUI, or UISceneAccessory.cameraCapture(sceneConfiguration:) with registerSceneAccessory(_:) in UIKit. The content can be interactive.

You see the app on the inner screen. The person in front of the camera sees the accessory on the outer screen. It can only appear when the app is in the foreground, a capture session with a visible preview is running, the device is open and the app is full screen on the inner display, and even then the system decides.
Two audiences: the app on the inner screen for you, the accessory on the outer screen for the person being filmed.
  • It can appear only while the app is in the foreground with an active camera capture session, the device is open, and your UI is full screen on the inner display.
  • The system decides whether and where to show it. Treat it as an enhancement.
  • An Apple engineer on the developer forums: camera cases are the only supported and intended use for both displays at present, and a session with only a camera input and no preview on either display isn't supported.
  • Apps can't open new windows on the outer display.
  • The simulator has no camera, so this needs a real device.

Cameras

Open, with the app on the inner display, the inner front camera faces you and the outer front camera and rear cameras face away. Closed, with the app on the outer display, the outer front camera faces you and the rear cameras face away.
Which cameras face you depends on which display your view is on. The direction coordinator reports it.
  • Existing front camera discovery returns a virtual front camera that follows your app between displays. Front camera apps keep working unchanged.
  • The physical front cameras are .builtInOuterUltraWideCamera and .builtInInnerUltraWideCamera, found only through a discovery session. Depth needs a physical camera.
  • AVCaptureDeviceDirectionCoordinator(view:deviceTypes:changeHandler:) in AVKit tells you which cameras face forward and which face backward relative to a view, and updates on fold and unfold. Include the rear cameras: Apple notes one can end up facing the person when they open or close the device, or when your view moves to a display facing the other way.
  • Swap one video input inside beginConfiguration() and commitConfiguration() rather than running both. A multi-camera session works, but Apple recommends a single input.
  • Decide mirroring from the direction map. Set automaticallyAdjustsVideoMirroring = false before isVideoMirrored.

How older builds run

Built withOn iPhone Duo
iOS 26 SDK or earlierClosed, stays clear of the status bar and the camera. Open, runs at a familiar size and aspect ratio.
iOS 27.0 SDKExtends beside the status bar on the inner display.
iOS 27.1 SDKEdge to edge, with vertical bars.
Built with the iOS 26 SDK an app runs at a familiar size and aspect ratio with black around it. Built with iOS 27.0 it extends beside the status bar on the inner display. Built with iOS 27.1 it runs edge to edge with vertical bars.
The same app built with each SDK, on the inner display.

Apple says the inner display may not honour your supported interface orientations and scales your app instead, including in Split View. Games may lock orientation but should fill the screen in every pose.

TestFlight and the App Store

  • Builds made with the Xcode 27.1 beta and the iOS 27.1 beta SDK can go to internal and external TestFlight testing.
  • Apple hasn't announced when App Store submissions built with the iOS 27.1 SDK open. The usual pattern is the release candidate, which is my expectation, not Apple's statement.
  • Screenshot sizes are in the display table above. App Store Connect doesn't accept them for this device yet.
  • I found no official badge. My advice: say the app is built for iPhone Duo in the description or release notes, and avoid anything that looks like an Apple badge.

The simulator

  • The Duo simulator ships in Xcode 27.1 beta with the iOS 27.1 runtime. Install the beta beside the release Xcode and switch with DEVELOPER_DIR.
  • In Xcode 27, simulators run in Device Hub, at Contents/Applications/DeviceHub.app. There is no Simulator.app any more, so scripts pointing at the old path break.
  • Open, close, rotate and fold from the controls in Device Hub. I found no simctl command for the pose or the hinge, so Apple gives you no scripted way to set the pose or hinge angle. Third-party tools can set the angle through a private simulator interface, which I wouldn't build CI on. Display power can be scripted, with simctl io … screenConfig.
  • Screenshots: simctl io … screenshot --display=primary is the outer display, --display=primary-1 the inner. --display also takes screen numbers, but the inner display is screen 3, because TV-out is screen 2, so the names are safer. In my testing, only the awake display renders, and the other captures black.
  • Known issues in the beta: the first launch can take several minutes, StandBy isn't available, and most app extensions can't run or be debugged.
The inner display is named primary-1 and the outer display is named primary. With the device open only the inner display renders, and with it closed only the outer one does. Capturing the sleeping display returns black.
Screenshot display names. Only the awake display renders.

Quick answers

What is the iPhone Duo screen size in points?
The inner display is 669 × 951 points in portrait at @3x, with regular width. The outer display is 466 × 678 points at @3x, with compact width. Lay out in points and read sizes from your scene or view, never from UIScreen.main.
What screenshot sizes does the App Store use for iPhone Duo?
Inner display: 2007 × 2853 pixels, or 2853 × 2007 in landscape. Outer display: 1398 × 2034 pixels, or 2034 × 1398. App Store Connect does not accept screenshots for this device yet.
How do I read the iPhone Duo hinge angle?
In SwiftUI use .onHingeChange, and in UIKit add a UIHingeInteraction. Both give a status of closed, partially open or fully open, plus a continuous angle. Apple makes no promise about how often the angle updates, so do not depend on a frequency or a precision.
How do I keep content out of the fold on iPhone Duo?
Query the fold as a reserved region with reservedRegions(kind: .division) from a GeometryProxy in SwiftUI or from a UIView in UIKit. It is only active when the device is partly open. ArrangementView in SwiftUI and UIArrangementViewController in UIKit place two views either side of it.
Can an app show its own content on iPhone Duo's outer screen?
Only while it is using the camera. Register a camera capture accessory with CameraCaptureAccessory in SwiftUI or UISceneAccessory.cameraCapture in UIKit. It can appear while the app is in the foreground with a capture session and a visible preview, the device is open and the app is full screen on the inner display. Apps cannot open other windows on the outer display.
Which Xcode and SDK do I need for iPhone Duo?
Xcode 27.1 beta with the iOS 27.1 SDK. It includes the iPhone Duo simulator, which runs in Device Hub. Builds made with it can go to internal and external TestFlight testing.

iPhone Duo is a trademark of Apple Inc. This site is independent and is not affiliated with, sponsored by, or endorsed by Apple. Facts last checked September 26, 2026. Spotted something out of date? Tell me.