CameraSwiftUIiPhone Duo

Cameras and the outer display on iPhone Duo

Two front cameras, the Virtual Front Camera, the direction coordinator, and the camera capture accessory, the one way an app can use both displays at once.

Oct 4, 20268 min read8 sources

iPhone Duo is the first iPhone with two front cameras, and its two displays can face opposite ways, so “front” no longer means “facing the person holding it”. The camera is also the only way an app in the iOS 27.1 SDK can draw on both displays at the same time. This page covers both, from Apple’s camera and multiple-displays sessions and from developers who have built against them.

In short

  • Ask for a front camera as usual and you get the Virtual Front Camera, which switches between the outer and inner cameras for you at 1080p60, without depth.
  • Both front cameras report .front. Use AVCaptureDeviceDirectionCoordinator to learn which camera actually faces the person.
  • The outer display, while the phone is open, is available to your app only through CameraCaptureAccessory, only full screen, only with a live camera session.
  • Keep previews upright with AVCaptureDeviceRotationCoordinator, and keep controls clear of the under-display camera’s reserved region.
  • None of it runs in the simulator. Plan a hardware pass for October 23.

Two front cameras, and a virtual one

On the back, Duo carries the 48 MP Fusion Main and 48 MP Fusion Ultra Wide cameras from iPhone 18 Pro, with 4K at 120 fps in Dolby Vision, and they double as selfie cameras when the open phone is turned around. The new part is the front. Both front cameras are square sensors with an ultrawide field of view.

Four friends smile for a selfie outdoors
A sample from Apple’s announcement. When friends join the shot, the Center Stage front camera widens the frame and can rotate it to fit everyone.Image: Apple
Outer front camera Inner front camera
Where In the outer display Under the inner display
Device type .builtInOuterUltraWideCamera .builtInInnerUltraWideCamera
Video Up to 4K at 120 fps Up to 1080p at 60 fps

Ask a discovery session for a front wide or ultrawide camera, as you would on any iPhone, and on Duo you get the new Virtual Front Camera. It switches between the two for you: the inner camera when the phone is open, the outer one when it is closed. The price is the common ground between them, 1080p at 60 fps, and no depth. Depth is only available from a physical camera. Use one directly and your app does the switching when the phone opens or closes.

The inner camera is the first under-display camera on an iPhone, and Apple’s guidelines say it stays hidden until the camera is active. Layout sees it as a reserved region: Blake Crosley’s probe found it reported as an inactive occlusion on the open display. When your session uses it, assume that region matters and keep controls clear of it. The fold guide shows how to read it.

Front doesn’t mean facing you

AVCaptureDevice.position has always been front or back, and both front cameras report .front. On Duo that isn’t enough. Open the phone while streaming from the outer front camera, and that camera now faces away from you. Close it, and the same camera swings round to face you. Turn the open phone around, and the rear cameras face you, which is how Duo takes selfies with its rear cameras.

A FaceTime call on the open iPhone Duo held in two hands: the person in the room, filmed by the rear camera, on the left half and the caller on the right
FaceTime on the open Duo: the person in the room, filmed by the rear camera, on the left half, and the caller on the right. Which camera “faces forward” depends on the view you ask from.Image: Apple

AVCaptureDeviceDirectionCoordinator, in AVKit, keeps track. Give it the view your camera UI lives in, the device types you care about, and a handler:

directionCoordinator = AVCaptureDeviceDirectionCoordinator(
    view: view,
    deviceTypes: [
        .builtInOuterUltraWideCamera,
        .builtInInnerUltraWideCamera,
        .builtInDualWideCamera,
    ],
    changeHandler: { [weak self] map in
        self?.updateCameraSession(map)
    }
)

Directions are relative to that view. While it is on the outer display, the outer front camera faces forward and the rear cameras face away. Open the phone, the view moves to the inner display, and the handler fires: now the inner front camera faces forward.

The coordinator is tied to a view, so it lives on the main actor, and the handler shouldn’t call AVFoundation directly. It hands you AVCaptureDeviceDescriptor values rather than devices. A descriptor is sendable and carries what you need to create the device, so pass it to the actor that owns your capture session. In the handler:

  • Reconfigure the session to stream from the camera that now faces forward.
  • Mirror the preview when a rear camera is the one facing forward, so a rear-camera selfie feels like a selfie.
  • Update the UI for the camera you switched to.

Apple’s article “Choosing a Camera by the Direction it Faces” has the details.

Both displays at once

Apple’s own camera features show what the outer display is for while the phone is open. Duo Preview shows the people you’re photographing their framing. Kid Cue plays Peanuts animations so a child looks at the lens. Duo FaceTime lets the people with you join the call, and Dual Capture in FaceTime sends the front and rear feeds at once. Your app gets that surface through a scene accessory, and for now there is one kind that does it: CameraCaptureAccessory.

iPhone Duo half folded on a rooftop, the Camera app on the upright half framing five people posing behind it
The Camera app in the laptop pose. While the phone is open like this, Duo Preview shows the people in the shot their framing on the outer display, the side facing them.Image: Apple
struct CameraRootView: View {
    @State private var model = TeleprompterModel()

    var body: some View {
        CameraView(model: model)
            .sceneAccessory {
                CameraCaptureAccessory(isEnabled: $model.isEnabled) {
                    TeleprompterView(model: model)
                }
                .onAvailabilityChange { available in
                    model.isAvailable = available
                }
            }
            .toolbar {
                TeleprompterToggle(isEnabled: $model.isEnabled)
                    .disabled(!model.isAvailable)
            }
    }
}

That’s Apple’s teleprompter from the multiple-displays session: the script on the outer display, facing the person being filmed. The rules come with it:

  • The accessory is only available while your app is full screen on the inner display and has an active camera session. Split View doesn’t count, and closing the phone takes it away.
  • Register it on the same view as your camera UI, so it shows only while that view does.
  • Availability changes under you. onAvailabilityChange is how the toggle disables itself when the phone closes.
  • The accessory is a second view on a second display, so give it its own direction coordinator. Each coordinator reports directions relative to its own view, which means the rear cameras face forward for the outer display’s view.

Anton Gubarenko’s notes from the September group lab add that the app needs the relevant entitlement as well, and that the entitlement alone doesn’t light the outer display. Without a camera session, there is no outer display while the phone is open.

CharaDUO, a charades game by ryo, shows an idea meeting that rule and turning it into a feature: the describer reads the word on the inner display, and the guessers across the table watch the outer display for the category, the countdown and a row of emoji as long as the answer. Because the outer display needs a camera session, the game gives the camera a job: a reaction camera records the guessers into a highlight reel shown at the end of the match. It asks for the camera only on iPhone Duo, which it recognizes by the outer ultrawide camera or a hinge report, and the game still plays on one screen on any iPhone. In the tabletop pose it also turns the outer display a quarter turn, so the text reads upright for the people facing it.

If your idea needs the outer display while the phone is open, make sure a camera belongs in it before you build the rest.

Fill the display, keep it upright

  • Streaming the rear camera’s full field of view on the inner display leaves room around the preview. Offset the preview and group your controls in the space left, or let the preview fill the display. videoGravity on AVCaptureVideoPreviewLayer decides how the preview fills its layer.
  • The front cameras’ square sensors can fill the wide inner display. Choose a landscape ratio with the device’s dynamicAspectRatio. Apple’s WWDC26 session on the Center Stage front camera covers the square sensor.
  • Adopt AVCaptureDeviceRotationCoordinator to keep previews and photos upright. On Duo it updates when your app moves between displays. Once it is in place, turn off isCameraSensorOrientationCompensationEnabled on the photo output for better performance. That compensation is on for every Duo front camera.

Chad Etzel’s NeoCam handles the fold as well. The viewfinder takes as much room as it can while the phone is flat, and moves into an ArrangementView when the phone folds, so it stays on one plane.

Chad Etzel@jazzychad

a cool iPhone Duo layout I've landed on for NeoCam: when completely open, the viewfinder takes up as much room as possible, but when folded, it switches to an ArrangementView to keep the viewfinder on one plane

Plan a hardware pass

The simulator can’t run a capture session, so none of this can be seen working until the hardware ships. CharaDUO’s developer checked the reaction camera with synthetic frames and debug-only overrides, and lists what is still unproven: the direction coordinator in the accessory scene, the input swap when the hinge moves, keeping the footage level, and heat over a long match. Ihor Malovanyi’s companion code for the Duo book likewise marks its camera chapters as needing a device.

Put those on your list for October 23, along with where the outer camera really sits. CharaDUO found that the simulator’s safe-area insets on the outer display don’t match where it draws the camera.

Until then, you can still check what your app draws on the closed phone. The simulator has a separate framebuffer for each display, and CharaDUO’s README captures the outer one like this:

# List the displays: the outer one is 1398 × 2034.
xcrun simctl io booted enumerate
xcrun simctl io booted screenshot --display=<UUID> outer.png

The checklist has the rest of the pass you can run today.

Quick reference

API Notes
The two front cameras .builtInOuterUltraWideCamera, .builtInInnerUltraWideCamera Square sensors. Outer up to 4K120, inner up to 1080p60
One front camera that follows the fold Virtual Front Camera, from an ordinary front wide or ultrawide discovery 1080p60, no depth
Which camera faces the person AVCaptureDeviceDirectionCoordinator in AVKit Per view; hands you AVCaptureDeviceDescriptor values
Keep previews and photos upright AVCaptureDeviceRotationCoordinator Then turn off isCameraSensorOrientationCompensationEnabled
Fill the wide inner display dynamicAspectRatio on the device Landscape ratios from a square sensor
The outer display while open sceneAccessory with CameraCaptureAccessory; UIKit registerSceneAccessory with UISceneAccessory.cameraCapture() Full screen on the inner display, active session, entitlement
Know when the accessory can show onAvailabilityChange Closing the phone or entering Split View takes it away
The under-display camera’s spot reservedRegions(kind: .occlusion) Inactive on the open display until a session uses it

Keep reading

Ideas · Design5 min read

iPhone Duo app ideas: 6 things builders are doing with the fold

Over 300 demos, concepts and prototypes for iPhone Duo, sorted into the six patterns that keep coming up, from the half-folded laptop to the hinge as a controller. A starting point if you're deciding what to build.

Oct 6Read the guide

Apps · Specs4 min read

Does iPhone Duo run iPad apps? The Duo and the iPad mini

iPhone Duo's inner display is nearly iPad mini sized, but it runs iOS, not iPadOS. What that means for iPad-only apps, why many Duo apps will look like their iPad versions, and what the Duo borrows from iPad.

Oct 6Read the guide