Xcode 27.1 beta:在 iPhone Duo 模擬器上跑您的 App
Xcode 27.1 beta(27A9269)於 2026 年 9 月 18 日(週五)推出,帶來第一個 iOS 27.1 SDK,以及模擬器可用的 iPhone Duo 裝置類型,比 Xcode 27.0 晚四天。這個 SDK 收錄了 Apple 準備指南點名的每一個 iPhone Duo API;裝置類型的設定檔把兩塊螢幕定義為 1398 × 2034 與 2007 × 2853 像素、scale 3,換算後是 466 × 678 與 669 × 951 點;模擬器執行環境則是另外的下載,由 Xcode 依需要抓取。Apple 自己的說明列出模擬器目前還做不到的三件事;而我讓一支探測 App 走過 Device Hub 的三種姿態後,闔上時落在 466 × 678 點的螢幕上,展開時落在 951 × 669 點的螢幕上,後者兩個 size class 都是 regular,任何姿態都沒有回報保留區域,而且 App 明明跑在內側螢幕上,UIScreen.main 仍然回答外側螢幕的數值。12456
{.answer-block}
重點摘要
- 日期與 build 編號。 Apple 的發佈摘要把 Xcode 27.1 beta(27A9269)繫在 9 月 18 日(週五)。
xcodebuild -version印出Xcode 27.1與Build version 27A9269;iPhoneOS 與 iPhoneSimulator 兩份 SDK 都自稱 iOS 27.1、build 24A94403;Swift 編譯器回報的版本字串swiftlang-6.4.0.34.1與 Xcode 27.0 相同,連結器同樣是ld-27037.1。xip 檔為 2,027,292,809 位元組,解開後的 App 是 3.6 GiB,可以裝在 Xcode 27.0 旁邊而不取代它。14 - Duo 的 API 都在 SDK 裡了。 我在 9 月 17 日檢查時,有十個名稱在 27.0 SDK 裡遍尋不著,它們在 27.1 SDK 裡全都在,其中包括 SwiftUICore 的
ArrangementView與reservedRegions(kind:options:layoutDirectionBehavior:)、SwiftUI 的toolbarVerticalBehavior(_:),以及 UIKit 的UIArrangementViewController、preferredVerticalBarBehavior與verticalBarEdge。SwiftUI 給它們標上@available(anyAppleOS 27.1, *);UIKit 的標頭檔則替 arrangement 控制器與保留區域相關方法標上API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)),比文件頁面列出的多了兩個平台。4 - 模擬器設定檔把螢幕尺寸寫死了。 iPhone Duo 裝置類型(
iPhone19,4、產品類別V68、型號 A3447)定義了兩塊內建螢幕:primary為 1398 × 2034 像素、scale 3,primary-1為 2007 × 2853 像素、scale 3,原生方向 270。除以三之後分別是 466 × 678 與 669 × 951 點,其中內側那組數字,正是我在 9 月 10 日的 Duo 開發者文章裡,從 App Store Connect 的螢幕截圖尺寸推得的那組。設定檔要求執行環境 27.1 以上。5 - 模擬器面對真實 App 的表現。 Device Hub 提供三種姿態,Closed(闔上)、Book(書本狀)與 Open(展開),外加 Rotate Right(向右旋轉)。闔上時,探測 App 拿到外側螢幕:466 × 678 點、寬度 compact,分割式 arrangement 上下堆疊。展開時,它拿到內側螢幕:以橫向為原生方向的 951 × 669 點,兩個 size class 都是 regular,左右各有 34 的安全區域邊距,分割式 arrangement 左右並排;旋轉後為寬 669、高 951,兩個方向依然都是 regular。Book 給 App 的幾何數值與 Open 完全相同。每一種姿態下
reservedRegions都回傳空的結果,連把非作用中的區域一起納入也一樣;toolbarVerticalEdge始終是 nil,工具列橫向繪製,而 App 在內側螢幕上時,UIScreen.main.bounds仍持續回報 466 × 678。6 - 這個 beta 還做不到的事。 Apple 的說明列出三項限制,分別是漫長的首次啟動、缺席的 StandBy,以及大多數 App Extension:「Initial Simulator launch can take several minutes.」(187708500)、「StandBy is unavailable in the iPhone Duo Simulator runtime.」(187708663),以及 「Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime.」(187708767)。如果您的 App 同時也在 Mac 上推出,還要再加上兩則 Mac Catalyst 的 Known Issues;另外有一件 Apple 沒有列出來的事:執行環境的下載在我這裡第一次以
Download failed.收場,重試才成功。23
beta 裡有什麼?
Apple 的發佈摘要把 「Xcode 27.1 beta (27A9269)」 列在 9 月 18 日(週五)上午 10:00 PT,同日下午還有一則 「TestFlight Update」;App Store Connect 當天的發行說明則寫明,現在可以把用 Xcode 27.1 beta 搭配 iOS 27.1 beta 或 iPadOS 27.1 beta SDK 建置的 App,送交內部與外部測試:「You can now submit apps built with Xcode 27.1 beta using the SDK for iOS 27.1 beta or iPadOS 27.1 beta for internal and external testing.」1 發行說明的 Overview 一節點出了 SDK 陣容:「Xcode 27.1 beta includes Swift 6.4 and SDKs for iOS 27.1, iPadOS 27, tvOS 27, watchOS 27, macOS 27, and visionOS 27. Xcode 27.1 beta supports on-device debugging in iOS 17 and later, tvOS 17 and later, watchOS 10 and later, and visionOS. Xcode 27.1 beta requires a Mac running macOS Tahoe 26.6 or later.」2 這份清單請照字面讀:只有 iOS 停在 27.1,SDK 自己的 SDKSettings.plist 回報的版本是 27.1,而 App Store Connect 卻把同一份 SDK 稱作 「iPadOS 27.1 beta」,這個小矛盾在 Xcode 27 那篇文章裡也同樣存在。
下載量比版本號看起來要小。xip 檔為 2,027,292,809 位元組,由 Apple 以其 Software Update 憑證簽署,解開後是一個 3.6 GiB 的 App,和 Xcode 27.0 一樣大;用 xip --expand 解到某個資料夾、改名為 /Applications/Xcode-27.1-beta.app、再把 DEVELOPER_DIR 指過去,命令列工作的安裝就到此為止。接著在這個 beta 底下第一次呼叫 xcodebuild 時,它自行花了大約兩分鐘安裝隨附的 CoreTypes.pkg 與 XcodeSystemResources.pkg,也就是 xcodebuild -runFirstLaunch 會明確執行的那個步驟,而其中第二個套件,正是把 iPhone Duo 裝置類型放到位的那一個。4 App 裡沒有的東西,是模擬器執行環境。這個 beta 找得到這台 Mac 上既有的 iOS 執行環境,27.0 也在其中,卻沒有任何 27.1 的;在 beta 底下執行 xcodebuild -downloadPlatform iOS,它把缺的那塊叫作 「iOS 27.1 Simulator (24A94401)」,並透過 Apple 的 mobile-asset 服務以 cryptex 磁碟映像檔取回,而開發者下載頁面上自家的磁碟映像檔,最新只到 iOS 18.2 Simulator Runtime。34 第一次嘗試以 DVTDownloadable: Download Failed 告終,錯誤是 Error Domain=DVTDownloadableErrorDomain Code=41 "Download failed.";第二次加上 -buildVersion 24A94401,回報執行環境為 7.85 GB,順利跑完,之後 simctl list runtimes 就列出了 「iOS 27.1 (27.1 - 24A94401)」。請先把硬碟空間算進去:這個執行環境是 Xcode 下載量的四倍。3

iPhone Duo 模擬器首次開機時的外側螢幕,1398 × 2034 像素:狀態元件沿著右緣排列,而那一側正是 Apple 的 Human Interface Guidelines(人機介面指南)在 iPhone Duo 上安置動態島與狀態列的位置。10
27.1 SDK 有 Duo 的 API 嗎?
9 月 17 日,我拿 Apple 「Preparing your app for iPhone Duo」 指南裡的名稱去搜 iOS 27.0 SDK,十個裝置專屬名稱一個也沒找到。同樣的搜法對 27.1 SDK 再跑一次,也就是對模組介面與標頭檔做單純的文字搜尋,這次全部找得到。表格的每一列是搜尋用的子字串:其中七列涵蓋了十個名稱中的九個,因為兩個 reservedRegions 方法共用一列、兩個 axisBehavior 成員也共用一列;另外三列則是這些名稱背後的型別,也就是 ReservedRegion、對應 toolbarVerticalBehavior(_:) 的 ToolbarVerticalBehavior,以及對應 preferredVerticalBarBehavior 的 UIVerticalBarBehavior:4
| 搜尋的子字串 | SwiftUICore 介面 | SwiftUI 介面 | UIKit 介面 | UIKit 標頭檔 |
|---|---|---|---|---|
ArrangementView |
45 | 0 | 19 | 4 個檔案 |
UIArrangementViewController |
0 | 0 | 19 | 4 個檔案 |
ReservedRegion |
16 | 0 | 15 | 3 個檔案 |
reservedRegions |
2 | 0 | 5 | 1 個檔案 |
ToolbarVerticalBehavior |
0 | 5 | 0 | 0 |
UIVerticalBarBehavior |
0 | 0 | 0 | 1 個檔案 |
verticalBarEdge |
0 | 0 | 0 | 1 個檔案 |
toolbarVerticalEdge |
1 | 0 | 0 | 0 |
axisBehavior |
0 | 2 | 0 | 1 個檔案 |
preferredVerticalBarBehavior |
0 | 0 | 0 | 1 個檔案 |
這張表裡有兩個細節會影響您的寫法。SwiftUI 的型別其實住在 SwiftUICore,也就是 import SwiftUI 會再匯出的那個模組,所以一般的 import 就找得到;另一點是,可用性標註在平台上和文件說得不一樣。SwiftUICore 介面宣告 ArrangementView、SwiftUI 介面宣告 toolbarVerticalBehavior(_:),兩者都掛在 @available(anyAppleOS 27.1, *) 之下,那是 Apple 用來代表「該版本的所有平台」的簡寫;而 UIArrangementViewController.h 以及 UIView.h 裡的 reservedRegionsOfKind: 方法,帶的是 API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)) 搭配 API_UNAVAILABLE(watchos);在 UIVerticalBarEdge.h 裡,列舉與 verticalBarEdge trait 帶著同樣一組,Leading 與 Trailing 兩個 case 則帶著 API_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos)。Apple 這五個名稱的文件頁面,都只列出 iOS 27.1 與 iPadOS 27.1,並標示為 beta。47 就針對 iOS 來寫,其餘的讓編譯器告訴您。
指南用到、而 27.0 SDK 裡本來就有的那三個名稱沒有變動:presentationPlacement(_:) 依然掛在 @available(anyAppleOS 27.0, *) 底下,backgroundExtensionEffect() 從 iOS 26 就在了,而指南提到的兩個 ToolbarItemPlacement case 中,topBarPinnedTrailing 掛在 @available(iOS 27.0, visionOS 27.0, *) 底下,cancellationAction 則除了型別本身的可用性之外沒有自己的標註。4
模擬器的裝置設定檔怎麼描述這兩塊螢幕?
Apple 為這個 beta 安裝的裝置類型 iPhone Duo.simdevicetype,是放在 /Library/Developer/CoreSimulator/Profiles/DeviceTypes 下的一個普通 bundle,它的兩份 property list 回答了規格表留下的問題。5
profile.plist 交代身分:型號識別碼 iPhone19,4、產品類別 V68、別名 com.apple.CoreSimulator.SimDeviceType.V68、minRuntimeVersion 27.1,以及一條規則,讓 27.1 起的執行環境預設建立這個裝置。capabilities.plist 交代硬體:型號 A3447、HomeButtonType 2、DeviceSupportsDynamicIsland true、DeviceSupportsEnhancedMultitasking false、IsLargeFormatPhone true、CompatibleDeviceFallback 為 iPhone18,3、裝置圓角半徑 59,以及一個含兩筆內建與三筆虛擬項目的 displays 陣列。5
| 設定檔中的螢幕 | 像素 | Scale | 點 | 原生方向 | 圓角半徑 | 色彩空間 |
|---|---|---|---|---|---|---|
primary(「LCD」,螢幕 1) |
1398 × 2034 | 3 | 466 × 678 | 0 | 8、59、8、59 | P3 |
primary-1(「LCD-1」,螢幕 3) |
2007 × 2853 | 3 | 669 × 951 | 270 | 四角皆 55 | sRGB |
第一列是外側螢幕,和 Apple 規格表的像素完全吻合。第二列是內側螢幕,它的像素數是 App Store Connect 的螢幕截圖尺寸 2007 × 2853,而不是面板本身的 1878 × 2670:模擬器以 3x、669 × 951 點來繪製內側螢幕,那正是我在 9 月 10 日的 Duo 開發者文章裡算出、並標明為推論的那筆算式。如今 Apple 自己的設定檔就寫著這個數字。270 度的原生方向說明內側螢幕原生是橫向的,手機展開時寬 951 點、高 669 點,這和 Apple 給展開狀態的尺寸吻合。剩下兩個數字則屬於模擬器而非硬體:兩塊螢幕在設定檔裡都寫成每英寸 460 像素、60 Hz,而規格表給內側面板的是 430 ppi,所以 hdpi 應當視為佔位值。5
設定檔連形狀也一併附上。每塊螢幕都指向一份 framebuffer 遮罩,也就是可視區域的 PDF。外側螢幕的遮罩四角不對稱,設定檔的值是長邊其中一側 8、另一側 59;依我的判讀,半徑較小的那一側,就是接上 Apple 設計指南所描述之中央轉軸的那一側。內側螢幕的遮罩則是單純的圓角矩形,用設定檔裡的圓角值 55,而且沒有為前置相機留下缺口,所以相機造成的遮蔽是執行期由保留區域 API 提供的,而不是來自 framebuffer 的形狀。510
模擬器實際顯示什麼?
裝置開機時是闔上的。首次開機時外側螢幕顯示主畫面,內側螢幕的 framebuffer 是開著的但一片漆黑;simctl io enumerate 會用設定檔裡的名稱列出兩塊內建螢幕,primary 為 1398 × 2034、primary-1 為 2007 × 2853,旁邊則是一如往常的虛擬螢幕。6 我裝上了一支單檔的 SwiftUI 探測 App,它會讀取幾何數值、size class、toolbarVerticalEdge 環境值,以及用 includeInactive 取得的兩種保留區域,並以三種樣式各包一層 ArrangementView,再在導覽工具列裡放進六個項目。6

探測 App 在外側螢幕、Closed 姿態下:466 × 678 點,寬度 compact,分割式 arrangement 上下堆疊,工具列橫向。
闔上時,探測 App 回報的和一支 compact iPhone 沒兩樣。UIScreen.main.bounds 是 466 × 678 點、scale 3,size class 為寬度 compact、高度 regular,toolbarVerticalEdge 是 nil,UIKit 的 verticalBarEdge trait 讀出來是原始值 0,兩種保留區域查詢都回傳空陣列,連非作用中的區域一起納入也一樣,可見闔上的姿態並未把摺疊處或相機暴露給 App。導覽堆疊裡的 GeometryReader 量到 386 × 510 點,安全區域邊距為上方 134、下方 34,左右皆無;依我的判讀,系統留下的那 80 點寬度,就是右側擺放狀態元件的那條直欄。分割式 arrangement 把主要檢視放在次要檢視之上,也就是 Apple 指南描述的「高大於寬」情境;工具列則橫向繪製於頂端:分享與打勾的「完成」按鈕緊鄰溢位按鈕,四個次要動作沒有出現在列上,從它們的 placement 判斷,應該收進了該按鈕的選單裡。67
姿態就住在 Device Hub 裡。選取 Duo 裝置後,它的視窗會把 Rotate Right、Closed、Book 與 Open 顯示為按鈕,而這些按鈕可以用輔助使用 API 按下,本節其餘的操作就是這麼驅動的。6
Open 會把 App 移到內側螢幕,並維持其原生橫向。探測 App 回報寬度與高度都是 regular,GeometryReader 量到 803 × 515 點,安全區域邊距為上方 134、左右各 34、下方 20,而寬度上少掉的仍是和闔上時同樣的 80 點;依我的判讀又是那條直欄,如今位於一塊寬 951 點的螢幕右側,狀態元件就在裡面。分割式 arrangement 把主要與次要檢視左右並排,也就是 Apple 指南裡「寬大於高」的情境;工具列橫向繪製於右上角,一樣是分享與「完成」緊鄰溢位按鈕,四個次要動作同樣不在列上。6

Open 姿態、內側螢幕,2853 × 2007 像素:兩個維度都是 regular,分割式 arrangement 左右並排,直欄在右側。
Rotate Right 會把內側螢幕轉成直向。探測 App 這時量到 669 × 703 點,兩個維度都是 regular,邊距為上方 134、下方 34,左右皆無;依我的判讀,那條 80 點寬的直欄移到了上緣,狀態元件如今坐落在一條黑色橫帶裡,而分割式 arrangement 即使容器已經高於寬,仍維持左右並排。6

旋轉後的內側螢幕:寬 669 點,兩個方向仍是 regular,直欄移到了上緣。
Book 是半摺的姿態,本該是保留區域 API 大顯身手之處,但在這個 beta 上,它對我的探測 App 並未如此。前景沒有任何 App 時,按下 Book 之後內側螢幕顯示的是主畫面;重新啟動後,探測 App 回報的和 Open 時一模一樣:803 × 515 點、兩個維度都是 regular,divisions 與 occlusions 都是零,連非作用中的區域一起納入也一樣,SwiftUI 與 UIKit 皆然。闔上的姿態同樣回報零。我沒有找到任何一種姿態會讓 reservedRegions 回傳摺疊處或相機,所以隨摺疊處調整的版面配置,是這個 beta 的模擬器沒能讓我看見的東西;Apple 的指南把 division 描述為 「when iPhone Duo is partially open」(iPhone Duo 半開時)才作用,至於這究竟是 beta 的缺口,還是我探測 App 的缺口,只能留給下一個 beta 回答。67
還有兩件事在每一種姿態下都成立。工具列從來沒有直向繪製過:toolbarVerticalEdge 在 SwiftUI 裡是 nil,verticalBarEdge 在 UIKit 裡讀作原始值 0,闔上、展開、旋轉皆然,可見 Apple 指南描述的垂直列,在這個 beta 裡並未出現在導覽堆疊的工具列上。另外,App 明明跑在內側螢幕,UIScreen.main.bounds 卻回答 466 × 678 點,也就是外側螢幕,這正是 Apple 指南提醒的陷阱,它要開發者把版面計算建立在 「based on your scene or containing view’s bounds rather than screen dimensions」(依據您的 scene 或容器檢視的 bounds,而非螢幕尺寸):主螢幕並不是您所在的那塊螢幕。探測 App 編譯時,編譯器早就說了 'main' was deprecated in iOS 26.0,而這台裝置正是原因所在。67
有一條通往其他姿態的路走不通。simctl io screenConfig 可以把某塊螢幕的電源關掉,但在內側螢幕保持開啟的情況下關掉外側螢幕,並不會讓手機展開;它反而弄垮了模擬器的系統 shell,接下來的 simctl launch 以 「The system shell probably crashed.」 失敗,只能重新開機。姿態還是住在 Device Hub 的視窗裡。6
這個 beta 還做不到的事
在這個 beta 自己的說明裡,Apple 於 Simulator、Known Issues 之下列出三項限制,分別是漫長的首次啟動、缺席的 StandBy,以及大多數 App Extension:「Initial Simulator launch can take several minutes.」(187708500)、「StandBy is unavailable in the iPhone Duo Simulator runtime.」(187708663),以及 「Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime.」(187708767)。2 StandBy 這一項,對於把小工具或即時動態設計給它用的人特別重要:Apple 的發表文說這支手機 「enters StandBy on either the outer or inner display」,並稱之為 「hub for widgets」,Duo 開發者文章寫過那裡會顯示什麼;在後續 beta 解除這道限制之前,這台裝置上的 StandBy 只能拿實機來確認。11
另外兩項落在 Mac Catalyst、Known Issues 之下,凡是採用這些 API 又同時為 Mac 建置的 App 都會被咬到:「Projects that use APIs specific to iOS 27.1 show compile errors when building for Mac Catalyst (“undeclared identifier”, “not found”, “has no member”, “cannot find”, etc). (185924957)」,Apple 給的因應方式是在 Swift 裡用 #if !targetEnvironment(macCatalyst)、在 Objective-C 裡用 #if !TARGET_OS_MACCATALYST;以及 「Projects that target iOS 27.1 show no Mac Catalyst run destination available. (187046347)」,因應方式是 「Add a Mac Catalyst 27.0 minimum deployment in target settings.」。2 Xcode 27.2 beta 的說明又從反方向補上第三項:「macOS, watchOS, tvOS, and visionOS SDKs in Xcode 27.2 incorrectly report 27.1 as a valid deployment target,」 以及 「Mac Catalyst builds with a 27.1 or 27.2 deployment target may be unable to use newly introduced API.」(187160501)。8
這週我會做的事
- 把這個 beta 裝在 Xcode 27.0 旁邊,而不是蓋過去:解開 xip、替 App 改名,再把
DEVELOPER_DIR指向它來做命令列建置;beta 的說明裡沒有任何一項會動到 27.0 的工具鏈,而且編譯器與連結器帶的版本字串完全相同。4 - 在真正需要之前就先開始下載執行環境,在 beta 底下執行
xcodebuild -downloadPlatform iOS,失敗就重試;正是這個執行環境讓 iPhone Duo 裝置類型能夠開機,而且 Apple 已經先說了,首次啟動還要再多花上好幾分鐘。23 - 把 Mac Catalyst target 一併納入,對著 27.1 SDK 建置一次,先讀過 Apple 點名的那兩則診斷訊息,再決定要用
#if !targetEnvironment(macCatalyst)把新 API 圍起來,還是把 Catalyst 的最低版本提高到 27.0。2 - 就拿設定檔裡的數字當作預覽與測試的尺寸:闔上 466 × 678 點、展開 669 × 951 點,內側螢幕原生橫向。這個 beta 的 Previews 項目還替畫布的覆寫選單加上了一個 Display 群組,「for previewing content on a device’s alternative display.」(182598534)25
- 開發期間,請逐一姿態記錄保留區域:文件寫明
reservedRegions(kind:options:layoutDirectionBehavior:)搭配.includeInactive會以ReservedRegion值回傳摺疊處與相機,而這些值可能是作用中或非作用中;在這個 beta 裡每種姿態都回傳零,所以在onChange(of: proxy.size)裡寫一行 log,就能告訴您某個姿態是從哪一刻開始回報它們的。67
常見問題
Xcode 27.1 beta 裡有 iPhone Duo 模擬器嗎?
有。這個 beta 會安裝一個 iPhone Duo 裝置類型,識別碼為 com.apple.CoreSimulator.SimDeviceType.iPhone-Duo,它的設定檔要求一份 iOS 27.1 執行環境,而該執行環境由 Xcode 透過 xcodebuild -downloadPlatform iOS 另行下載。Apple 的說明提醒首次啟動 「can take several minutes」(可能要花上好幾分鐘),而且 StandBy 與大多數 App Extension 在該執行環境中都無法使用。235
如何把 Xcode 27.1 beta 裝在 Xcode 27 旁邊?
用 xip --expand 解開 xip,把解出來的 App 移成帶版本的名稱,例如 /Applications/Xcode-27.1-beta.app,再把 DEVELOPER_DIR 設為它的 Contents/Developer 資料夾,供 xcodebuild、xcrun 與 swiftc 使用。這個 beta 需要 macOS Tahoe 26.6 或更新版本,和 Xcode 27.0 的下限相同。24
iPhone Duo 內側螢幕以點為單位有多大?
669 × 951 點,依據模擬器的裝置設定檔,它把內側螢幕定義為 2007 × 2853 像素、scale 3,原生方向為橫向;外側螢幕則是 1398 × 2034 像素、scale 3,換算為 466 × 678 點。5
Xcode 27.1 beta 會改動 iOS 27.0 SDK 或 Xcode 27 工具鏈嗎?
不會。Swift 編譯器與連結器回報的版本字串和 Xcode 27.0 相同,而這個 beta 的發行說明只有三節,Mac Catalyst、Previews 與 Simulator,沒有一節碰到工具鏈。iOS 27.1 SDK 是新增的東西,在裝置與模擬器兩份 SDK 中都標示為 build 24A94403。24
iPhone Duo 何時上市?搭載什麼系統?
10 月 23 日,搭載 iOS 27.1,依據 Apple 9 月 16 日的新聞稿:「When iPhone Duo becomes available on October 23, it will run iOS 27.1.」9
資料來源
-
Apple,Releases,2026 年 9 月 19 日取得的 RSS 摘要:「Xcode 27.1 beta (27A9269)」 日期為 Fri, 18 Sep 2026 10:00:00 PDT,「TestFlight Update」 日期為 Fri, 18 Sep 2026 14:00:00 PDT。Apple,App Store Connect 發行說明,2026 年 9 月 18 日,TestFlight 更新,全文引用。 ↩↩↩
-
Apple,Xcode 27.1 Beta Release Notes,2026 年 9 月 19 日透過文件 JSON 端點取得:Overview,引用;Mac Catalyst、Known Issues 185924957 與 187046347 及其因應方式,引用;Previews、New Features 182598534,引用;Simulator、Known Issues 187708500、187708663 與 187708767,引用。這份說明沒有其他章節。 ↩↩↩↩↩↩↩↩↩↩↩
-
作者於 2026 年 9 月 19 日在 macOS 26.6.2(25G83)上進行的執行環境下載,
DEVELOPER_DIR設為 Xcode 27.1 beta:xcodebuild -downloadPlatform iOS對已安裝的 27.0 執行環境印出 「iOS is already downloaded.」,接著印出 「Downloading iOS 27.1 Simulator (24A94401) (arm64)」,隨後出現DVTDownloadable: Download Failed. Downloadable: DVTDownloadable(identifier: 0a4e7582-0061-5907-bea9-fe234c1f9392, version: 27.1.0.1, category: simulator, contentType: cryptexDiskImage, downloadMethod: mobileAsset, platform: com.apple.platform.iphoneos)與Error Domain=DVTDownloadableErrorDomain Code=41 "Download failed.";重試指令xcodebuild -downloadPlatform iOS -buildVersion 24A94401印出 「Downloading iOS 27.1 Simulator (24A94401) (arm64): 0.0% (66 kB of 7.85 GB)」 並順利完成,之後xcrun simctl list runtimes列出 「iOS 27.1 (27.1 - 24A94401) - com.apple.CoreSimulator.SimRuntime.iOS-27-1」。同一天登入後以 「Simulator Runtime」 搜尋 Apple 的開發者下載頁面,其磁碟映像檔最新僅到 iOS 18.2 Simulator Runtime。 ↩↩↩↩↩ -
作者於 2026 年 9 月 19 日對
/Applications/Xcode-27.1-beta.app的檢視:xcodebuild -version印出Xcode 27.1與Build version 27A9269;xcrun --sdk iphoneos --show-sdk-version與xcrun --sdk iphonesimulator --show-sdk-version都印出 27.1;兩份 SDK 的SystemVersion.plist皆帶有ProductBuildVersion24A94403 與ProductVersion27.1;xcrun swift --version印出Apple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1),xcrun ld -v印出ld-27037.1,與同一台 Mac 上 Xcode 27.0(27A266a)印出的版本字串相同。Xcode_27.1_beta.xip為 2,027,292,809 位元組;pkgutil --check-signature回報 「signed Apple Software」 並帶有 Software Update 憑證鏈;du -sk對解開後的 App 回報 3,813,336 KB,相對於解在/Applications/Xcode-27.app的 Xcode 27.0(27A266a)的 3,804,188 KB。名稱計數是對 iPhoneOS SDK 中SwiftUICore.swiftmodule/arm64e-apple-ios.swiftinterface、SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterface與UIKit.swiftmodule/arm64e-apple-ios.swiftinterface以grep -c搜尋子字串所得,檔案數則是對UIKit.framework/Headers以grep -rl所得;可用性標註讀自同一批檔案:SwiftUICore 介面中public struct ArrangementView<之上的@available(anyAppleOS 27.1, *),以及 SwiftUI 介面中宣告func toolbarVerticalBehavior的extension SwiftUICore.View之上的同一行;UIArrangementViewController.h中API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1))後接API_UNAVAILABLE(watchos),UIView.h中兩處reservedRegionsOfKind:宣告之上亦然,UIVerticalBarEdge列舉與verticalBarEdgetrait 之上亦然;其UIVerticalBarEdgeLeading與UIVerticalBarEdgeTrailingcase 之上則是API_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos);func presentationPlacement之上是@available(anyAppleOS 27.0, *);public static let topBarPinnedTrailing之上是@available(iOS 27.0, visionOS 27.0, *),而public static let cancellationAction之上沒有任何標註。首次啟動:在 beta 的DEVELOPER_DIR底下第一次執行xcodebuild -version超過了兩分鐘的逾時,而/var/log/install.log記錄xcodebuild於 9 月 19 日 16:01:54 排入一項 PackageKit 安裝,從Xcode-27.1-beta.app/Contents/Resources/Packages解出CoreTypes.pkg與XcodeSystemResources.pkg,並於 16:03:04 結束;事後xcodebuild -checkFirstLaunchStatus回傳 0。 ↩↩↩↩↩↩↩↩↩↩↩ -
/Library/Developer/CoreSimulator/Profiles/DeviceTypes/iPhone Duo.simdevicetype,由 Xcode 27.1 beta 安裝,於 2026 年 9 月 19 日以plutil -convert xml1讀取。profile.plist:modelIdentifieriPhone19,4、productClassV68、aliasescom.apple.CoreSimulator.SimDeviceType.V68、minRuntimeVersion27.1、createByDefaultForRuntimeVersionsversionMin 27.1。capabilities.plist:ModelNumberA3447、ThinningProductTypeiPhone19,4、CompatibleDeviceFallbackiPhone18,3、DeviceCornerRadius59、HomeButtonType2、DeviceSupportsDynamicIslandtrue、DeviceSupportsEnhancedMultitaskingfalse、IsLargeFormatPhonetrue;ScreenDimensionsCapabilitymain-screen-width 1398、main-screen-height 2034、main-screen-pitch 460、main-screen-scale 3;displays:primary(displayName LCD、screenID 1、width 1398、height 2034、scale 3、hdpi 與 vdpi 460、refreshRate 60、nativeOrientation 0、cornerRadiusUL 8、UR 59、LL 8、LR 59、colorspace P3)與primary-1(displayName LCD-1、screenID 3、width 2007、height 2853、scale 3、hdpi 與 vdpi 460、refreshRate 60、nativeOrientation 270、四個圓角半徑皆 55、colorspace sRGB),另有external-0(TVOut)、wireless0(carPlay)與resizable(scene)。兩份framebufferMaskIdentifierPDF 以qlmanage算圖後檢視;Apple 規格表中面板的數字,收錄在 Duo 開發者文章裡。在這個 beta 底下,xcrun simctl list devicetypes列出 「iPhone Duo (com.apple.CoreSimulator.SimDeviceType.iPhone-Duo)」。 ↩↩↩↩↩↩↩↩↩ -
作者於 2026 年 9 月 19 日與 20 日在 macOS 26.6.2(25G83)上的執行紀錄。裝置:
simctl create "Duo-27.1" com.apple.CoreSimulator.SimDeviceType.iPhone-Duo com.apple.CoreSimulator.SimRuntime.iOS-27-1,以simctl boot與simctl bootstatus -b啟動(在這台 Mac 上約一分鐘);simctl io <udid> enumerate列出兩個顯示類別 0 的com.apple.framebuffer.display連接埠,尺寸為 1398 × 2034 與 2007 × 2853,並在 Connected Screens 之下列出 「LCD-1」,裝置名稱primary-1、螢幕 ID 3、像素尺寸 {2007, 2853}。探測 App:DuoProbe,一支單檔 SwiftUI App,在 Xcode 27.1 beta 底下以xcrun swiftc -sdk <iPhoneSimulator.sdk> -target arm64-apple-ios27.1-simulator -parse-as-library建置,以simctl install安裝、simctl launch --console-pty啟動,螢幕截圖以simctl io <udid> screenshot --mask=alpha --display=primary與--display=primary-1取得。闔上姿態的主控台輸出:DUOPROBE screen=(466.0, 678.0) scale=3.0 idiom=0 model=iPhone name=Duo-27.1;DUOPROBE size=386x510 h=compact v=regular verticalEdge=nil safe=EdgeInsets(top: 134.0, leading: 0.0, bottom: 34.0, trailing: 0.0);DUOPROBE uikit bounds=(354.0, 44.0) divisions=0 occlusions=0 verticalBarEdge=UIVerticalBarEdge(rawValue: 0);沒有任何division[或occlusion[開頭的行。--display=primary-1的截圖是全黑。螢幕電源:simctl io <udid> screenConfig --display=primary power off印出 「Screen 1 power state set to off」;接下來的simctl launch以FBSOpenApplicationServiceErrorDomaincode 5 失敗,訊息為 「The system shell probably crashed.」;以simctl shutdown再boot才救回裝置。9 月 20 日的姿態測試分兩輪,兩輪都透過輔助使用 API,對 Device Hub 為所選裝置提供的按鈕發出AXPress動作,依序按下 Rotate Right、Closed、Book 與 Open;兩輪也都由 27.2 beta 的simctl命令列工具驅動,使用那些指令稿所設定的DEVELOPER_DIR,對象則是 27.1 beta 的執行環境、裝置類型與 Device Hub。第一輪中,按下下一個按鈕時,上一個姿態的探測 App 仍在執行,之後才終止並重新啟動,主控台擷取十二秒,兩塊螢幕都取截圖;上文的旋轉數值與過渡輸出就來自這一輪。第二輪則在每次擷取後終止探測 App,因此按下一個按鈕時前景沒有任何 App;重新啟動前的截圖來自這一輪。Open:DUOPROBE size=803x515 h=regular v=regular verticalEdge=nil safe=EdgeInsets(top: 134.0, leading: 34.0, bottom: 20.0, trailing: 34.0)、DUOPROBE uikit bounds=(771.0, 44.0) divisions=0 occlusions=0 verticalBarEdge=UIVerticalBarEdge(rawValue: 0)與DUOPROBE screen=(466.0, 678.0);--display=primary-1的截圖顯示探測 App,--display=primary則是全黑。Book:重新啟動後是同樣三行;按下之後、重新啟動之前、沒有 App 執行時所取的內側螢幕截圖,顯示的是主畫面。Closed:即上文闔上姿態的那幾行。按下 Rotate Right 之後的 Open:DUOPROBE size=669x703 h=regular v=regular verticalEdge=nil safe=EdgeInsets(top: 134.0, leading: 0.0, bottom: 34.0, trailing: 0.0)與uikit bounds=(637.0, 44.0),內側螢幕截圖為直向。沒有任何一次執行印出division[或occlusion[開頭的行。旋轉後的闔上狀態只在姿態切換過程中以過渡輸出出現過,DUOPROBE size=610x232 h=compact v=compact ... screen=(678.0, 466.0),並未計入上文。 ↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple,2026 年 9 月 19 日取得的文件 JSON:ArrangementView、UIArrangementViewController、reservedRegions(kind:options:layoutDirectionBehavior:)、reservedRegions(kind:options:) 與 toolbarVerticalBehavior(_:):每一頁的平台可用性都寫著 iOS 27.1 與 iPadOS 27.1,並標示為 beta。Apple,Preparing your app for iPhone Duo,同日取得,用於指南所使用的名稱。 ↩↩↩↩↩
-
Apple,Xcode 27.2 Beta Release Notes,2026 年 9 月 19 日取得,SDK、Known Issues、187160501,引用。 ↩
-
Apple,「Get ready with the latest beta releases」,新聞,2026 年 9 月 16 日,「Note about iOS 27.1 and iPhone Duo」,引用。 ↩
-
Apple,Designing for iPhone Duo,Human Interface Guidelines,2026 年 9 月 20 日透過文件 JSON 端點取得:「Controls on the side include both system and app elements: the Dynamic Island, the status bar, the toolbar (including navigation buttons), and the tab bar.」 與 「A hinge in the center lets people open and close the device」。 ↩↩
-
Apple Newsroom,Apple unveils iPhone Duo,2026 年 9 月 9 日,於 2026 年 9 月 20 日取得:「Set iPhone Duo down and it enters StandBy on either the outer or inner display」 與 「hub for widgets」,引自 StandBy 段落。 ↩