iPhone Duo 模拟器:获取、折叠、测试你的 App
如何获取 Apple 的 iPhone Duo 模拟器、把它折到任意姿态或铰链角度、测试你的 App,以及没有 Mac 也能试用的模拟器。
在 iPhone Duo 于 10 月 23 日上市之前,对几乎所有人来说,模拟器就是设备。本文介绍如何获取 Apple 的 iPhone Duo 模拟器、如何折叠它,以及要让 App 过一遍的测试流程。布局规则见设计、竖向栏和折痕指南。
要点
- Apple 的 iPhone Duo 模拟器随 Xcode 27.1(目前是发布候选版)提供,需要一台运行 macOS Tahoe 26.6 或更高版本的 Apple 芯片 Mac。还要下载 iOS 27.1 模拟器运行时,然后在 Device Hub 中选择 iPhone Duo。
- 没有 Mac,或者只是想看看它怎么折叠?其他模拟器会串流 Apple 的模拟器,或者自己绘制一台。
- 用 iOS 27.1 SDK 构建,并检查二进制文件确实链接了它。
- 把每个页面都走一遍:合上、展开、旋转、半折,以及做事做到一半时折叠。
- 把 App 拖到分屏浏览的两侧各试一次。
- 分别测量每一条安全区域边缘。它们各不相同,而且会在栏移动时变化。
- 看到东西出问题时,先判断是你的 bug 还是 Xcode 的 bug,再决定要不要写代码绕过去。
获取 iPhone Duo 模拟器
模拟器是 Xcode 27.1 的一部分。Apple 在 9 月 18 日发布了测试版,在 10 月 5 日(iPhone Duo 的 App Store 提交开放当天)发布了发布候选版。你需要:
- 一台 Apple 芯片的 Mac。 Intel Mac 无法运行。
- macOS Tahoe 26.6 或更高版本。
- Xcode 27.1,从 Apple 开发者网站下载。你可以把它装在现有 Xcode 旁边,而不是覆盖安装。用发布候选版归档 App Store 构建版本,不要用测试版。
- iOS 27.1 模拟器运行时,需要单独下载,大约 8GB。在 Xcode 设置的“组件”中获取,或者运行
xcodebuild -downloadPlatform iOS。安装之前,运行目标里不会出现 iPhone Duo。光是 Xcode 本身更新了,这台设备并不会出现。
然后打开 Device Hub,选择 iPhone Duo,在上面运行你的 App。第一次启动可能要好几分钟,耐心等它启动完,再判断 App 是不是坏了。
折叠它。 Device Hub 有三个姿态按钮:合上、书本和展开,还有一个把手机旋转四分之一圈的按钮。按住 Option 键,会出现一个可以设置精确铰链角度的滑块。这是 Jeremy Sequoia 发现的。你不需要什么隐藏的 defaults 命令就能折叠手机。如果要从脚本或测试中折叠,Artem Novichkov 把那个滑块逆向做成了一个小小的命令行工具。
用 iOS 27.1 SDK 构建。 SDK 会改变你看到的布局:
| 构建工具 | 在内屏上 |
|---|---|
| Xcode 26 | 一块带黑边的 iPhone 形状面板。不会响应笔记本式姿态。 |
| iOS 27 SDK | App 可以延伸到状态栏左侧。可调整尺寸已开启,而且无法关闭。 |
| iOS 27.1 SDK | App 延伸到屏幕边缘,标准导航和工具栏按钮竖向排列。 |
UIRequiresFullScreen 仍然有效,但用户打开或合上手机时,App 依然会调整尺寸。要为此做好准备。
确认二进制文件确实写着 27.1。Blake Crosley 手动用 swiftc 构建了一个探测 App,链接器悄悄把它标记成了 iOS 27.0 App:它得到的是一个带边框的窗口、横向的栏,而且没有保留区域。在 Blake 发现之前,他的文章一直用的是这些数字。原因是用了 swiftc -sdk 却没有导出 SDKROOT,于是退回到了 macOS SDK 的版本。Xcode 构建的版本标记是正确的。对于用其他方式构建的东西,先导出 SDKROOT,再检查结果:
otool -l MyApp.app/MyApp | grep -A4 LC_BUILD_VERSION
# platform 2 (iOS), minos …, sdk 27.1
在这个模拟器出现之前,Apple 的工程师建议在可调整大小的 iPhone 上(包括 Mac 上的 iPhone 镜像)找普通的布局 bug。这个办法仍然能揪出写死的宽度,但查不出竖向栏、折痕或不对称的内边距问题。那些需要 Duo。
走遍每一种姿态
Device Hub 的控件可以打开、合上、旋转和折叠模拟设备。对每个页面检查:
- 合上,在外屏上,紧凑宽度
- 合上并横过来,此时外屏的宽度和高度都是紧凑尺寸
- 展开,在内屏上,常规宽度和高度
- 旋转,两个方向都要,包括 App 锁定竖屏的情况。锁定只对外屏生效,内屏仍然可以旋转。
- 半折。按钮避开折痕了吗?
- 做事做到一半时打开和合上。滚动位置保住了吗?文本框里的内容保住了吗?页面会不会重新加载,或者换成另一个根页面?
- 如果 App 会读取铰链,按铰链指南所说,用 Option 滑块慢慢扫一遍角度,再快速扫一遍。

Nikolozi 的音乐 App Mela 是完全自定义的界面,算上各种不对称的情况,他数出了十一种布局:四种合上的,两种半开的,两种完全展开的,两种分屏浏览的,外加一种竖向分屏,视频在上、App 在下。让编程模型来适配 Mela,结果很糟糕。一个用标准 SwiftUI 写的 App 不需要十一套设计,而一个手工绘制界面的 App 可能需要检查十一次。
If your app's UI is fully custom, you have to deal with 11 completely new layouts due to iPhone Duo's asymmetries. 4 - when closed 2 - half open 2 - fully open 2 - split-screen multitasking 1 - split-screen portrait, video at the top, app at the bottom Did I miss any?
在分屏浏览的两侧都测一遍
在内屏上,通过主屏幕指示条把 App 拖到一侧,再拖到另一侧。
- 布局在一半宽度下能正常工作。分屏始终是 50/50,用户无法拖动分隔线让某个 App 占更多空间。
- 控件会根据你占据的是哪一半,移到外侧边缘,左边或右边。
- 没有任何地方假定 App 在左边。
- 从一半拖到另一半时,不会有控件留在分隔线下面或跑出玻璃之外。

拖动时,盯着安全区域和栏看,而不只是内容。放控件的那一侧会随你落在哪一半而改变。
别再读取屏幕尺寸
- 选择导航结构时,用
horizontalSizeClass和verticalSizeClass,而不是界面方向。 - 需要像素数时,读取视图的 bounds,或者从窗口场景获取屏幕(
window?.windowScene?.screen)。这里有两块屏幕,UIScreen.main出错的次数多到足以让你弃用它。 - 列表加详情的布局,优先用
NavigationSplitView或UISplitViewController。三栏的 iPad 布局在这里通常显示两栏,侧边栏可以以浮层形式调出。系统版本还会在设备半折时调整尺寸。
处理不对称的安全区域
Duo 上的内边距经常每一侧都不一样,而且会在栏移动时变化。每条边都要单独测量。
// 每条边单独计算。
let width = view.bounds.inset(by: view.safeAreaInsets).width
// 这样写假定左右相同,而它们常常不同。
let width = view.bounds.width - view.safeAreaInsets.left * 2
Davyd 发布了一个具体的例子:上 0,左 0,右 84,下 34。Gautham Vijayan 的库在合上、竖向的屏幕上也读到了同样的数字,此时竖向栏占据了右侧。这些数字只对应一种姿态,不是常量。它们展示的是“不对称”是什么样子。
By the way, here’s how 𝚂𝚊𝚏𝚎 𝙰𝚛𝚎𝚊 𝙸𝚗𝚜𝚎𝚝𝚜 look on the 𝗶𝗣𝗵𝗼𝗻𝗲 𝗗𝘂𝗼 📱 { "𝚋𝚘𝚝𝚝𝚘𝚖": 𝟹𝟺, "𝚕𝚎𝚏𝚝": 𝟶, "𝗿𝗶𝗴𝗵𝘁": 𝟴𝟰, "𝚝𝚘𝚙": 𝟶 }
把可交互的内容放在安全区域内。背景图可以无视它。专门忽略水平边缘,即 ignoresSafeArea(.horizontal) 或 edgesIgnoringSafeArea(.horizontal),现在会让背景滑到侧边控件的下面。Vilteros 在适配现有 App 时专门提到了这一点。全出血的照片没问题,那条区域里的按钮就不行了。
还要检查布局边距。Maximilian 在回复 Harshil 时说,他看到容器的默认边距返回了 0,希望这只是测试版的 bug。读取 contentMargins,而不是用一个内边距常量;在用魔法数字“修复”之前,先在两种姿态下看看结果。
还有一个要搜索的字符串:“Face ID”(面容 ID)。iPhone Duo 用侧边按钮里的触控 ID 解锁,所以如果提示里写着面容 ID,只是因为你把它写死了,那在这台手机上就是错的。询问 LAContext.biometryType,设备报告什么就用什么。
先试系统界面,再试你自己的
对每个主要页面,在显示以下内容时打开和折叠:
- 一个面板,包括放在尾侧的面板。在 27.1 测试版中,Natalia Panferova 发现尾侧面板没有用上竖向工具栏,关闭按钮落在了状态显示区下面。在 Natalia 的测试中,设置
presentationDetents([.large])解决了这个问题,但这是测试版的临时办法,不是文档规定的要求。详见竖向栏指南。 - 一个带文本框的警告框。Emre Degirmenci 发现,外观或姿态改变时,SwiftUI 原生警告框里的文本框会出问题。这是应该提交反馈的模拟器 bug,而不是需要写代码绕过的布局问题。
another iphone duo simulator bug on the native SwiftUI alert texfield when the appearance or pose changed
- 键盘、上下文菜单和弹出框。
- 浮动按钮、自定义标签栏以及任何播放控件。系统不会替你挪动这些。
- 最大号的动态字体、很长的本地化字符串、从右到左的语言、深色模式,以及“降低透明度”。“降低透明度”会改变透过竖向栏显示出来的内容。
不要轻信每一段录屏
EchoPod 的开发者在开始适配一个侧边导航器时,尝试在 Device Hub 里录下折叠过程。手机打开后,录屏是黑的。如果录下来的画面是空的,先亲眼看看模拟器,再去改布局。警告框文本框和尾侧面板也适用同样的规则:先判断你看到的是自己的 bug 还是 Xcode 的。
EchoPod 开始适配 iPhone Duo 侧边导航栏了,吐槽下模拟器的录像功能,以为是可以录展开折叠屏的app 内容变化,结果点击展开后录的是黑屏,apple 家东西是越来越糊弄人了
UI 测试也有一个相关的陷阱。Daniel Bernal 在开发 FlowDeck 时发现,外屏和内屏使用各自独立的帧缓冲区和触控路径。一次铰链移动或旋转可能会悄悄切换当前路径,于是下一次点按就落空了。Raul 遇到过一个小版本的问题:对“返回”按钮的辅助功能查询不再能匹配上。姿态改变之后,要重新指定你想点按的那块屏幕。
模拟器完全做不到的一件事是运行捕捉会话。前置摄像头之间的切换和外屏相机配件,都要等真机。届时要检查什么,见相机指南。
录下来,告诉大家
能正常工作之后,就可以提交到 App Store 了:提交 iPhone Duo App 介绍了构建、新的截图尺寸和 2027 年 4 月的规定。然后录一段你亲自看过的视频(展开、折叠、分屏浏览),并把 App 发给 FoldHunt。在硬件上市之前,一段短视频是你最好的证明,也是大家会点开看的东西。
没有 Mac 时体验 Duo 的其他方式
Apple 的模拟器只能在 Mac 上运行。下面这些替代方案适用于其他环境。要清楚你用的是哪一种:只有第一种是在 Apple 的模拟器上运行你真正的 iOS App。
- VibeView 把 Apple 自己的 iPhone Duo 模拟器从它的 Mac 串流到浏览器标签页里,所以在 Windows 和 Linux 上也能用。你可以把它折到合上、半折或展开,拖到任意铰链角度,旋转它,还可以让编程智能体通过它的命令行工具做同样的事。它自己的说明提到,用正式版 Xcode 构建的 App 会在内屏上以手机大小的窗口打开。要铺满屏幕,请上传用 iOS 27.1 SDK 构建的版本。
- Bitrig 是一款适用于 Mac 和 iPhone 的 AI App 构建工具,它在 9 月 19 日加入了自己的交互式 3D iPhone Duo。你可以把它合上、完全展开、半折和立起,你在 Bitrig 里做的 App 会随着你的操作做出响应。这是 Bitrig 的模拟器,不是 Apple 的,运行的是用 Bitrig 做的 App。
- Thanh Doan 的 Duo 是一个受 iPhone Duo 启发的桌面端折叠手机演练场,可以在浏览器里预览。它不是 iOS 模拟器:为它构建的 App 只能在它里面运行。
- 只是想看看各种姿态? 我们首页上的模型可以在合上、展开、笔记本式和立起之间折叠。拖动它,或者选一个姿态。
一旦你的 App 能在 Apple 的模拟器上运行,Matte 可以一次性录下两块屏幕和每一次折叠,并把折叠过程做成 3D Duo 上的动画,用于演示视频。
继续阅读

iPhone Duo App 创意:开发者正在用折叠屏做的 6 件事
300 多个 iPhone Duo 演示、概念和原型,归纳为反复出现的六种模式,从半折的笔记本电脑形态到把铰链当控制器。如果你正在考虑做点什么,可以从这里开始。

iPhone Duo 能运行 iPad App 吗?iPhone Duo 与 iPad mini
iPhone Duo 的内屏几乎有 iPad mini 那么大,但它运行的是 iOS,不是 iPadOS。这对仅限 iPad 的 App 意味着什么、为什么很多 Duo App 看起来会像它们的 iPad 版,以及 Duo 从 iPad 借来了什么。

iPhone Duo 游戏:即将到来的作品,以及折叠屏给游戏带来了什么
哪些游戏已在 iPhone Duo 上亮相、未更新的游戏在展开的屏幕上是什么样子,以及开发者正在用铰链、半折和两块屏幕做出哪些新玩法。