iOS now uses a native people/conversation split view that expands on the Duo inner display and collapses on compact displays. Chat actions use system toolbars and vertical side bars, while selection and composer drafts stay in one root across resizing.
Changes
- Remove
UIRequiresFullScreenand support outer-display landscape. - Use one
NavigationSplitViewon iOS 17+, with a stable detail navigation stack and explicit public/private conversation routing. Preserve the existing iOS 16 and macOS sheet flow. - Give split navigation one alert owner; coordinate verification, fingerprints, private-media consent, and media presentations.
- Move iOS header actions into labeled native toolbar items and availability-gated system overflow. Keep identity editing, channel/connectivity information, and private transport/encryption status visible in content.
- Make verification, fingerprints, and location-channel content scrollable. Adapt notices controls, QR sizing, media/globe actions, and safe-area handling.
- Rotate the QR camera preview with the capture-device rotation coordinator on iOS 17+, with a local-scene camera fallback on iOS 16.
- Cancel an interrupted microphone hold on gesture cancellation, width changes, disappearing content, or scene inactivity.
- Add live-scene regression tests for draft/selection preservation and recording-HUD versus width changes.
The deployment target remains iOS 16. Optimized Duo chrome requires linking the iOS 27.1 SDK; newer APIs have SDK/runtime gates. No Duo dimensions or hinge widths are hard-coded. The approach follows Apple's preparation guide and adaptive-layout guidance.
Validation
- Xcode 27.1 RC, build 27A9275.
- Final iOS app and test bundle:
build-for-testingpassed. - Final macOS app build passed.
- SwiftLint exits 0; two existing image aspect-ratio warnings remain.
- Duo lint reviewed: nine macOS-only width reports and one iOS 16 camera-rendering orientation fallback; no confirmed iOS layout finding.
- An intermediate run passed 52 tests across view smoke, composer drafts, and private-conversation coordination, including the live-scene resize/draft test.
- Inner-display split navigation, native side controls, and verification presentation inspected in the Duo simulator.
Draft acceptance work
The final simulator test rerun has not completed. After the camera/microphone follow-up, Xcode stalls before test execution while reporting IDESchemeActionSDKRecord / IDESchemeActionDeviceRecord parsing runtime build 24A94232 as invalidDigitCount(94232). A dedicated simulator reboot and isolated retry did not resolve it. The final test bundle compiles, including the new recording-HUD/resize test; it is not claimed as passing.
Hinge commands dispatch, but their confirmation fails because CoreDevice rejects the automation's hinge-angle --device argument. Full Closed/Partially Open/Open transitions, both rotations, Split View on both sides, pinned PiP, and resizable iPhone Mirroring remain manual acceptance work. Real Bluetooth/media exchange, camera rotation, and interrupted physical touches need hardware.
Reproduction commands, the detailed acceptance matrix, and Apple references are in IPHONE-DUO.md.
Related Duo work: #1792, #1801.
Codex Review Summary
This comment shows the latest Codex review activity on this pull request.
We couldn’t complete this review. Comment
@codex reviewto try again.b3285fcℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.