iPhone Duo simulator screenshots from the command line
Use xcrun simctl io <device> screenshot --display=1 for the outer display and --display=3 for the inner display. Fold and unfold the simulator with the open-source hinge CLI, because Xcode has no command for the hinge.
Updated October 29, 2026.
The two displays
The iPhone Duo simulator has two built-in screens. Without --display, simctl captures the main (outer) screen only.
| Screen | Screen ID (--display) | Device name | Size | Used when |
|---|---|---|---|---|
| Outer | 1 | primary | 1398 × 2034 (portrait), @3x | Folded |
| Inner | 3 | primary-1 | Native 2007 × 2853 or 2853 × 2007, @3x | Unfolded |
These are already App Store Connect sizes (Screenshot specifications). The unfolded inner display can capture at either exact native size; don't rotate or resize the PNG to force the other dimensions. Inspect the actual image for upright, correctly laid-out UI rather than judging it by its aspect ratio alone. Screen IDs come from the iPhone Duo device profile in Xcode 27.1. Confirm them on your machine:
xcrun simctl io booted enumerate--display also accepts the screen's device name (primary, primary-1), its name or UUID, or the aliases internal and external (see xcrun simctl help io).
Fold and unfold: hinge
Device Hub has a hinge slider, hidden until you hold Option. There is no simctl or devicectl command to set the angle. hinge by Artem Novichkov fills the gap:
brew install artemnovichkov/tap/hinge
hinge -d <UDID> close # 0°, folded: outer display
hinge -d <UDID> open # 180°, flat: inner display
hinge -d <UDID> half # 90°
hinge -d <UDID> 120 # any angle
hinge -d <UDID> get # print the current angle| Command | Angle | Pose |
|---|---|---|
close | 0° | Folded, outer display |
half | 90° | Partly folded |
open | 180° | Flat, inner display |
hinge uses a private, undocumented simulator protocol. Its author verified it with Xcode 27.1 and the iOS 27.1 runtime, and it may break in later releases. The Device Hub slider doesn't move when hinge changes the angle.
A full capture loop
UDID=<your iPhone Duo simulator>
xcrun simctl status_bar "$UDID" override --time 9:41 \
--batteryState charged --batteryLevel 100 --wifiBars 3 --cellularBars 4
hinge -d "$UDID" close
# navigate to the screen you want on the outer display
xcrun simctl io "$UDID" screenshot --display=1 outer-01.png
hinge -d "$UDID" open
sleep 2 # wait for the unfold animation and relayout
xcrun simctl io "$UDID" screenshot --display=3 inner-01.png
hinge -d "$UDID" closeTo be safe, take two inner captures a second apart and keep the shot only when they are identical. That way you don't save a frame from the middle of the unfold animation.
Problems you will hit
| Problem | Why | What works |
|---|---|---|
| Inner screenshot is black or stale | The inner display is off while folded | Unfold first, wait, then capture --display=3. Treat an all-black frame as a failed shot |
| Screenshot of the wrong screen | No --display, so simctl captures the main screen | Always pass --display=1 or --display=3 |
| Taps don't reach the inner display | idb ui tap sends touches to the main (outer) screen only (facebook/idb#965, open) | Navigate while folded, then unfold and capture. Or drive the app with XCUITest or launch arguments |
idb screenshot shows a dark screen when unfolded | Same issue: idb captures the outer screen | Use xcrun simctl io ... --display=3 |
| App restarts or loses its place when unfolded | The app doesn't keep state across the size change | Fix in the app. Without a fix, unfolded screenshots won't show the screen you navigated to |
| Rounded corners or the camera cut-out | The displays aren't rectangular, and simctl has a --mask option for that | Use --mask=ignored (full framebuffer) or --mask=black. Don't use --mask=alpha: App Store Connect rejects transparency |
| Simulator won't boot | iOS 27.0 runtime installed, iPhone Duo needs 27.1 | Install the iOS 27.1 runtime from Xcode settings |
We haven't checked third-party simulator tools such as RocketSim for iPhone Duo support yet, so this guide doesn't cover them.
Checking the result
sips -g pixelWidth -g pixelHeight -g hasAlpha outer-01.png inner-01.pngExpect exactly 1398 × 2034 (outer), either 2007 × 2853 or 2853 × 2007 (native inner), and hasAlpha: no. A different size isn't made valid by rotating or resizing the PNG.
If you'd rather skip this capture workflow, Duo Screenshots runs it from your simulator build. A Duo set captures both displays, up to 6 screens each (12 PNGs per language), from $19. A Full set is $39: the two Duo displays plus iPhone 6.3" (1206 × 2622) and iPad 13" (2064 × 2752) if your build supports iPad; up to 24 PNGs per language, or 18 for iPhone-only apps at the same price. One language is included, each extra language is $9, up to 5 languages.
Inner orientation isn't selectable or guaranteed and may vary between screenshots; we keep native dimensions and don't rotate or resize PNGs. No simulators to set up or Mac needed to order and download. You still need a simulator build made on a Mac or macOS CI: build requirements. Both paid sets arrive within 24 hours from payment on business days (Monday–Friday, New York time); the clock pauses while we wait for information from you. Frames, captions and uploading to App Store Connect aren't included. Upload one Duo set per language, inner by default; we give you both displays so you can choose.