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”(Face ID)。iPhone Duo 用側邊按鈕裡的 Touch ID 解鎖,所以如果提示裡寫著 Face 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 上亮相、未更新的遊戲在展開的螢幕上是什麼樣子,以及開發者正在用轉軸、半折和兩塊螢幕做出哪些新玩法。