Xcode 27.1 beta: iPhone Duo 시뮬레이터 속의 내 앱
Xcode 27.1 beta(27A9269)는 2026년 9월 18일 금요일에 나왔고, 첫 iOS 27.1 SDK와 시뮬레이터용 iPhone Duo 디바이스 타입을 함께 담고 있습니다. Xcode 27.0이 나온 지 나흘 만입니다. SDK에는 Apple의 준비 가이드가 언급하는 iPhone Duo API가 모두 들어 있고, 디바이스 타입의 프로파일은 두 디스플레이를 3x 기준 1398 × 2034 픽셀과 2007 × 2853 픽셀, 곧 466 × 678 포인트와 669 × 951 포인트로 정의합니다. 시뮬레이터 런타임은 별도 다운로드이며 Xcode가 필요할 때 받아 옵니다. Apple 자신의 노트는 시뮬레이터가 아직 하지 못하는 일 세 가지를 적어 두었습니다. 27.1 SDK에 대고 링크한 프로브 앱을 Device Hub의 세 포즈에서 돌리면, 접은 상태에서는 466 × 678 포인트 디스플레이를 가득 채우고 바를 trailing 가장자리를 따라 세로로 세우며, 펼친 상태에서는 951 × 669 포인트 디스플레이를 채우고 가로세로 모두 regular가 되고, 접힘은 division으로, 카메라와 상태 열은 occlusion으로 보고됩니다. 그리고 앱이 내부 디스플레이에 있는 동안에도 UIScreen.main은 여전히 외부 디스플레이 값을 답합니다. (10월 2일 정정: 그 전까지 이 문단은 프로브가 예약 영역을 하나도 보지 못했다고 적었습니다. 그 프로브는 iOS 27.0 앱으로 링크되어 있었습니다.)1245613
TL;DR
- 날짜와 빌드. Apple의 Releases 피드는 Xcode 27.1 beta(27A9269)를 9월 18일 금요일 자로 올렸습니다.
xcodebuild -version은Xcode 27.1과Build version 27A9269를 출력하고, iPhoneOS와 iPhoneSimulator SDK는 둘 다 iOS 27.1 빌드 24A94403이라고 밝힙니다. Swift 컴파일러의 버전 문자열swiftlang-6.4.0.34.1도, 링커의ld-27037.1도 Xcode 27.0과 같습니다. xip은 2,027,292,809바이트, 펼친 앱은 3.6 GiB이고, Xcode 27.0을 대체하지 않고 그 옆에 설치됩니다.14 (10월 11일: 10월 5일에는 Xcode 27.1 RC(27A9275)가 뒤따랐고, App Store Connect는 그 빌드를 TestFlight뿐 아니라 App Store용으로도 받습니다.14) (10월 15일: Xcode 27.1이 정식 릴리스로 출시됐습니다. 빌드는 RC와 같은 27A9275이고, 같은 날 App Store Connect 항목은 그 이름으로 스토어용 빌드를 받습니다.15) - 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 픽셀에 스케일 3,primary-1은 2007 × 2853 픽셀에 스케일 3이고 네이티브 방향은 270도입니다. 3으로 나누면 466 × 678 포인트와 669 × 951 포인트이며, 내부 쪽 숫자는 제 Duo 개발자 글이 9월 10일에 App Store Connect 스크린샷 크기에서 추론한 바로 그 값입니다. 프로파일은 런타임 27.1 이상을 요구합니다.5 - 실제 앱을 올리면 시뮬레이터가 어떻게 반응하는가(10월 2일 정정). Device Hub에는 Closed(접은 상태), Book(반쯤 편 상태), Open(펼친 상태) 세 포즈와 Rotate Right(오른쪽으로 회전)가 있습니다. 27.1 SDK에 대고 링크한 프로브는 접었을 때 외부 디스플레이 전체, 466 × 678 포인트를 받습니다. 폭은 compact이고, 툴바와 탭 바는 trailing 가장자리에 세로로 서며,
toolbarVerticalEdge는 trailing을 읽고, 카메라와 상태 열을 덮는 활성 occlusion 영역 두 개가 보고됩니다. 펼치면 내부 디스플레이 전체, 가로가 네이티브인 951 × 669 포인트를 받고, 가로세로 모두 regular이며, 바는 여기서도 세로입니다. 가운데를 세로로 지나는 폭 40포인트의 비활성 division이 있고, 이것은 Book 포즈에서 활성으로 바뀝니다. 회전하면 669 × 951 포인트에 바는 가로입니다. 앱이 내부 디스플레이에 있는 동안에도UIScreen.main.bounds는 계속 466 × 678을 보고합니다. 10월 2일까지 이 항목은 디스플레이 크기로 466 × 678과 951 × 669를 들고, 펼친 상태의 세이프 에어리어 인셋은 좌우 각각 34, 툴바는 가로, 어느 포즈에서도 예약 영역은 없다고 적었습니다. 본문은 프로브가 잰 영역, 곧 디스플레이보다 80포인트 좁은 범위(접었을 때 386포인트, 펼쳤을 때 34포인트 인셋 안쪽의 803포인트)를 들었습니다. 이 모두가 실수로 iOS 27.0 앱으로 링크된 프로브에서 나온 것입니다. 그것은 27.0 SDK 앱이 받는 결과이며, 아래 업데이트에 두 빌드를 모두 실었습니다.61213 - 이 베타가 아직 하지 못하는 일. Apple의 노트는 이렇게 적습니다. “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). 앱을 Mac에도 내놓는다면 Mac Catalyst Known Issues 두 건이 더 붙습니다. 그리고 Apple이 적지 않은 것이 하나 있습니다. 런타임 다운로드가 첫 시도에서
Download failed.로 실패했고, 다시 시도하니 성공했습니다.23
10월 2일 업데이트: 9월의 프로브는 iOS 27.0 앱으로 링크되어 있었습니다
9월 21일부터 10월 2일까지 이 글에 실렸던 시뮬레이터 결과는 측정은 옳았고 설명이 틀렸습니다. 그 결과는 iOS 27.0 SDK로 빌드한 앱에 iPhone Duo 시뮬레이터가 하는 일입니다. 저는 그것을 27.1로 빌드한 앱에 하는 일로 제시했습니다.
무엇이 잘못되었나. 프로브는 Swift 파일 하나였고, swiftc -sdk <iPhoneSimulator27.1.sdk>를 직접 호출해 컴파일했습니다. 이 플래그는 컴파일러에는 닿지만 링크 단계에는 닿지 않습니다. 링크 단계에서 드라이버는 같은 Xcode 안의 macOS SDK로 물러나 그 SDK의 버전을 바이너리에 기록했고, LC_BUILD_VERSION에는 sdk 27.0이 적혔습니다. iOS는 앱에 어떤 동작을 줄지를 이 숫자로 정합니다. 10월 2일에 같은 명령을 다시 실행하면 원인이 경고로 출력됩니다. “using sysroot for ‘macOS 27.0’ but targeting ‘arm64-apple-ios27.1.0-simulator’”(대상은 arm64-apple-ios27.1.0-simulator인데 macOS 27.0의 sysroot를 쓰고 있다). 9월에도 이 경고가 출력되었다면, 저는 그것을 무언가의 원인으로 읽지 못했습니다.13
어떻게 드러났나. 10월 2일, 같은 SDK로 Xcode 27.1 beta가 빌드한 실제 앱을 같은 시뮬레이터에서 실행했습니다. 그 앱의 툴바와 탭 바는 외부 디스플레이의 측면을 따라 세로로 서 있었고, 프로브의 것은 위쪽을 가로질러 누워 있던 자리였습니다. 두 바이너리에 otool -l을 돌리자 앱에는 sdk 27.1, 9월 방식으로 다시 빌드한 프로브에는 sdk 27.0이 나왔습니다. SDKROOT를 설정해 다시 빌드하면 프로브는 sdk 27.1을 읽고 앱과 똑같이 동작합니다. 또 프로브의 단순한 버전을 Xcode 27.0 자체로, 진짜 iOS 27.0 SDK에 대고 컴파일하면 잘못 찍힌 버전과 같은 창을 받습니다. 그러니 9월의 숫자는 27.0 빌드의 모습으로서는 공정한 그림입니다.13
다시 실행한 결과. 같은 소스를 두 방식으로 링크해, 각 포즈에서, 같은 Xcode 27.1 beta(27A9269)와 런타임(24A94401) 위에서 돌렸습니다.13
| 포즈 | SDK 27.0으로 링크 | SDK 27.1로 링크 |
|---|---|---|
| Closed | 검은 레일 옆의 386 × 678 포인트 창, 바는 가로, toolbarVerticalEdge는 nil, 영역 없음 |
466 × 678 창으로 디스플레이 전체, 툴바와 탭 바는 trailing 가장자리에 세로, toolbarVerticalEdge는 trailing, 활성 occlusion 두 개 |
| Closed, 회전 | 678 × 386 창, 바는 가로, 영역 없음 | 678 × 466 창, 가로세로 모두 compact, 바는 세로, 활성 occlusion 두 개(카메라와 상태 열) |
| Open | 871 × 669 창, 바는 가로, 영역 없음 | 951 × 669 창, 바는 세로, 비활성 division 하나, 비활성 occlusion 하나와 활성 occlusion 하나 |
| Open, 회전 | 669 × 871 창, 바는 가로, 영역 없음 | 669 × 951 창, 바는 가로, toolbarVerticalEdge는 nil, 같은 세 영역이 회전된 상태로 |
| Book | Open과 같음 | Open과 같고, division이 활성 |
| Book, 회전 | Open, 회전과 같음 | Open, 회전과 같고, division이 활성 |
철회하는 것. 세 가지 진술입니다. 모두 27.0 빌드에 대해서는 맞고 27.1로 스탬프된 빌드에 대해서는 틀렸습니다. 툴바가 한 번도 세로로 그려지지 않았다는 것, reservedRegions가 어느 포즈에서도 아무것도 돌려주지 않았다는 것, 그리고 시뮬레이터가 앱에 상태 레일 옆의 화면만 내주었다는 것입니다. 네 번째는 이유가 틀렸습니다. 저는 회전했을 때 split arrangement가 “stays side by side even though the container is now taller than it is wide”(컨테이너가 이제 폭보다 높은데도 나란히 배치를 유지한다)라고 썼습니다. 실제로는 프로브의 arrangement 뷰 자체가 그 화면 안에서 높이보다 폭이 컸고, arrangement는 자기 자신의 모양에 따라 나뉩니다. 회전한 디스플레이를 채우는 arrangement는 Apple 가이드의 설명대로 위아래로 쌓입니다. 다섯 번째로, TL;DR은 디스플레이 크기로 466 × 678과 951 × 669를 들었지만, 본문이 든 것은 프로브가 잰 영역으로, 80포인트 좁은 것(접었을 때 386포인트, 펼쳤을 때 34포인트 인셋 안쪽의 803포인트)이었습니다. 27.0 빌드는 디스플레이 전체를 받은 적이 한 번도 없습니다.713
그대로인 것. 시뮬레이터 절 바깥의 모든 것은 그대로입니다. 날짜와 빌드, SDK 심볼 표, 디바이스 프로파일과 그 픽셀 및 포인트 크기, 런타임 다운로드, Apple의 Known Issues입니다. 절 안에서는 디스플레이 크기, size class, Device Hub가 제공하는 포즈, screenConfig 크래시, 그리고 UIScreen.main 함정이 그대로이며, 마지막 것은 다시 실행했을 때 27.1 스탬프에서도 재현되었습니다. 이 업데이트가 대체하는 9월 24일 메모는 0이 영역을 너무 일찍 읽은 탓이라고 추측하고, 여러 힌지 각도에서 다시 실행하겠다고 약속했습니다. 추측은 틀렸습니다. 27.0 빌드는 아무리 오래 물어도 영역을 하나도 돌려주지 않습니다. 그 메모가 Molzahn에게서 인용한 관찰은 유효합니다. 올바르게 링크한 프로브는 처음 여섯에서 아홉 번의 평가에서는 영역을 하나도 읽지 못했고, 그 뒤로는 전부 읽었습니다. 힌지 각도별 실행은 하지 않았습니다.1213
이 글을 보고 직접 프로브를 만들었다면 확인해 보십시오. otool -l <app>/<binary> | grep -A4 LC_BUILD_VERSION. Xcode로 빌드한 프로젝트에는 올바르게 찍힙니다. 손으로 컴파일한 파일이라면 swiftc를 실행하기 전에 SDKROOT를 시뮬레이터 SDK로 export해 두어야 합니다. 이 문제를 드러낸 실습 예제에는 iOS 26 스탬프까지 더한 세 갈래 비교가 있습니다.
10월 26일 업데이트: 기기는 27.1로 출시되었고, 정식 릴리스 SDK의 번호는 이렇습니다
Apple 뉴스룸과 보안 릴리스 페이지에 따르면 iPhone Duo는 10월 23일 금요일에 iOS 27.1을 탑재하고 매장에 나왔습니다. 보안 릴리스 페이지는 “iOS 27.1”을 “iPhone Duo” 하나에 대해서만, 공개된 CVE 항목 없이 싣고 있습니다. Releases 피드에는 iOS 27.1 항목이 한 번도 오르지 않았고, 27.1 릴리스 노트 페이지도 나오지 않았으며, 색인에는 27과 27.2만 있습니다. 10월 15일부터 정식 릴리스인 Xcode 27.1(27A9275)이 설치된 이 Mac에서 iPhoneOS와 iPhoneSimulator SDK는 자신을 iOS 27.1 빌드 24A94232로 밝히는데, 이는 위에 기록한 베타의 24A94403보다 낮은 번호입니다. iOS 27.1 시뮬레이터 런타임은 24A94425이고, xcrun simctl list runtimes -j는 이 런타임의 지원 기기 유형으로 iPhone Duo 하나만 나열합니다. 이 런타임으로 iPhone 16 Pro를 simctl create하면 “Incompatible device.”로 실패합니다. iOS 27.2는 오늘 10월 26일에 출시되었고(24B119, 같은 분에 두 번째 iOS 27.2 빌드 24B91020), Xcode 27.2 RC(27B48, 10월 19일) 노트에는 iPhone Duo 항목이 네 개 있습니다. “Fixed: In the iPhone Duo simulator, an app using CameraCaptureAccessory can use both displays at the same time without an active camera capture session.”(iPhone Duo 시뮬레이터에서 CameraCaptureAccessory를 쓰는 앱이 활성 카메라 캡처 세션 없이도 두 디스플레이를 동시에 쓸 수 있도록 수정됨)(190155353), 우회 방법이 “Click with the mouse on the currently visible screen.”(현재 보이는 화면을 마우스로 클릭한다)인 “When switching between the inner and outer display of the iPhone Duo simulator, modifier keys such as Shift and Command might stop working.”(iPhone Duo 시뮬레이터의 안쪽과 바깥쪽 디스플레이를 전환하면 Shift와 Command 같은 보조 키가 작동하지 않을 수 있다)(189465196), 그리고 베타에서 이어져 이제 둘 다 Device Hub 아래에 있는 Known Issue 두 건, 즉 스크린샷이 “black for up to a few minutes after booting the device”(기기 부팅 후 최대 몇 분 동안 검게 나옴)라는 항목(187146039)과 손쉬운 사용 도구가 “cannot convey screen content on an iPhone Duo within Device Hub”(Device Hub 안의 iPhone Duo에서 화면 콘텐츠를 전달하지 못함)라는 항목(187148389)입니다. “APIs specific to iOS 27.1”(iOS 27.1 전용 API)에 관한 Mac Catalyst 항목은 그대로입니다. iOS 27.2 노트의 UIKit 항목 하나가 27.1을 언급합니다. UIView의 기본 레이아웃 여백이 0이 된다는 항목입니다. 같은 소스로 빌드한 프로브를 iPhone Duo 시뮬레이터의 27.1 런타임에서 실행하면, LC_BUILD_VERSION에 sdk 27.0이 찍혀 있을 때(위의 10월 2일 업데이트가 경고하는 손 컴파일 함정)는 8포인트를, sdk 27.1이 찍혀 있을 때는 0을 보고합니다. 따라서 이 변경은 OS뿐 아니라 바이너리가 링크한 SDK에도 걸려 있습니다. 표는 iOS 27.2 릴리스 노트 글에 있습니다.16
이 베타에는 무엇이 들어 있습니까?
Apple의 Releases 피드는 “Xcode 27.1 beta (27A9269)”를 9월 18일 금요일 오전 10시(PT)에, 같은 날 오후에는 “TestFlight Update”를 올렸습니다. 같은 날짜의 App Store Connect 릴리스 노트에는 “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 이 목록은 적힌 그대로 읽으십시오. 27.1인 플랫폼은 iOS뿐이고, SDK 자신의 SDKSettings.plist도 버전 27.1이라고 보고합니다. 반면 App Store Connect는 같은 SDK를 “iPadOS 27.1 beta”라고 부르는데, 이 어긋남은 Xcode 27 글이 이어서 다루고 있습니다.
다운로드는 버전 번호에서 짐작하는 것보다 작습니다. xip은 2,027,292,809바이트이고, Apple의 Software Update 인증서로 서명되어 있으며, 펼치면 Xcode 27.0과 같은 크기인 3.6 GiB 앱이 됩니다. 명령줄 작업이라면 폴더로 xip --expand, /Applications/Xcode-27.1-beta.app으로 이름 변경, 그리고 그곳을 가리키는 DEVELOPER_DIR, 설치는 이것이 전부입니다. 그다음 베타 아래에서 처음 실행한 xcodebuild 호출은 함께 들어 있는 CoreTypes.pkg와 XcodeSystemResources.pkg를 스스로 설치하느라 2분쯤을 썼습니다. xcodebuild -runFirstLaunch가 명시적으로 수행하는 단계이며, 그중 두 번째 패키지가 바로 iPhone Duo 디바이스 타입을 제자리에 놓아 주는 주인공입니다.4 앱이 담고 있지 않은 것은 시뮬레이터 런타임입니다. 베타는 이 Mac에 이미 있는 iOS 런타임들을 찾아내는데, 그중에 27.0은 있어도 27.1은 없습니다. 베타 아래의 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의 Dynamic Island와 상태 표시줄을 놓아 둔 바로 그 쪽입니다.10
iPhone Duo 시뮬레이터는 어떻게 구할 수 있습니까?
세 단계이며, 그중 어느 것도 웹 페이지의 다운로드 버튼이 아닙니다. Apple은 시뮬레이터를 Xcode 안에서만, 그것도 27.1 베타 안에서만 배포합니다. 27.2 베타 노트에는 “Download Xcode 27.1 beta to get the iOS SDK and simulator support for iPhone Duo.”(iPhone Duo용 iOS SDK와 시뮬레이터 지원을 받으려면 Xcode 27.1 beta를 내려받으라)라는 보충 설명이 있습니다.8 (10월 11일: Xcode 27.1 RC(27A9275)가 10월 5일에 출시됐고, 그 노트에도 같은 iPhone Duo Simulator 알려진 문제가 실려 있습니다. 노트에서 Duo 시뮬레이터를 다루는 Xcode 27.1은 이제 베타만이 아닙니다. 저는 RC를 설치하지 않았습니다.14) (10월 15일: Xcode 27.1이 정식 릴리스로 출시됐습니다. 빌드는 RC와 같은 27A9275이고, 노트에는 같은 Duo 시뮬레이터 알려진 문제 두 건이 실려 있습니다. 저는 이것도 설치하지 않았습니다.15)
- Xcode 27.1 beta(27A9269). 개발자 다운로드에서 받으며, Apple의 Releases 피드에 적힌 날짜는 9월 18일 금요일입니다. xip을 풀고, 앱을
/Applications/Xcode-27.1-beta.app처럼 버전이 들어간 이름으로 Xcode 27.0 옆에 옮긴 다음, 명령줄 작업을 위해DEVELOPER_DIR이 그 앱을 가리키게 합니다. 베타는 macOS Tahoe 26.6 이상을 요구합니다.12 - iOS 27.1 런타임. xip에는 들어 있지 않습니다.
DEVELOPER_DIR을 베타로 설정한 채xcodebuild -downloadPlatform iOS를 실행하면iPhone Duo디바이스 타입을 부팅할 수 있게 해 주는 27.1 런타임을 가져옵니다. Apple의 노트는 다운로드와 별개로 Simulator의 첫 실행이 “can take several minutes”(몇 분이 걸릴 수 있다)라고 경고합니다. 저는 첫 시도가 실패했고 재시도에서 성공했으니, 원인을 진단하기 전에 먼저 다시 시도해 보십시오.23 - Device Hub. 기기와 그 포즈가 있는 곳입니다. iPhone Duo 기기를 추가하거나 선택해 부팅한 뒤, 포즈 버튼인 Closed, Book, Open과 Rotate Right를 사용합니다.
simctl에는 포즈 명령이 없습니다. 아래의 포즈별 크기와 스크린샷은 이 경로로 얻은 것입니다.6
Apple이 만든 브라우저 버전은 없습니다. “iPhone Duo simulator online”으로 찾은 페이지는 Apple의 iOS 27.1 런타임을 실행하고 있지 않으므로, 무엇을 그리든 여기서 측정한 size class, 예약 영역, 외부 디스플레이 동작의 출처가 될 수 없습니다. 런타임 없이 레이아웃을 확인하려는 경우를 위해, 이번 베타에서 Xcode의 Previews 캔버스에 대체 디스플레이용 Display 그룹이 추가되었습니다.2
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만으로 닿습니다. 둘째, availability 속성이 플랫폼 범위에서 문서와 어긋납니다. SwiftUICore 인터페이스는 ArrangementView를, SwiftUI 인터페이스는 toolbarVerticalBehavior(_:)를 모두 @available(anyAppleOS 27.1, *) 아래에 선언합니다. anyAppleOS는 해당 버전의 모든 플랫폼을 뜻하는 Apple의 줄임 표기입니다. 반면 UIArrangementViewController.h와 UIView.h의 reservedRegionsOfKind: 메서드는 API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1))에 API_UNAVAILABLE(watchos)를 달고 있습니다. UIVerticalBarEdge.h에서도 enum과 verticalBarEdge 트레이트는 같은 조합이지만, Leading과 Trailing 케이스만은 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 케이스 중 topBarPinnedTrailing은 @available(iOS 27.0, visionOS 27.0, *) 아래에 있고, cancellationAction에는 타입의 것 말고 따로 붙은 availability가 없습니다.4
시뮬레이터 프로파일은 두 디스플레이에 대해 무엇을 말합니까?
Apple이 베타와 함께 설치하는 디바이스 타입 iPhone Duo.simdevicetype은 /Library/Developer/CoreSimulator/Profiles/DeviceTypes 아래에 놓인 평범한 번들이고, 그 안의 프로퍼티 리스트 두 개가 사양표가 열어 둔 채 남긴 질문에 답해 줍니다.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
| 프로파일의 디스플레이 | 픽셀 | 스케일 | 포인트 | 네이티브 방향 | 모서리 반경 | 색 공간 |
|---|---|---|---|---|---|---|
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의 사양표와 픽셀 단위까지 일치합니다. 둘째 행은 내부 디스플레이인데, 그 픽셀 수는 패널의 1878 × 2670이 아니라 App Store Connect의 스크린샷 크기인 2007 × 2853입니다. 즉 시뮬레이터는 내부 디스플레이를 3x 기준 669 × 951 포인트로 그리며, 이는 Duo 개발자 글이 9월 10일에 해 보이고 추론이라고 못 박았던 바로 그 산수입니다. 이제 Apple 자신의 프로파일이 그 숫자를 담고 있습니다. 네이티브 방향 270도는 내부 디스플레이가 가로가 네이티브라는 뜻이고, 기기를 펼치면 폭 951 포인트에 높이 669 포인트가 되며, 이는 Apple이 밝힌 펼친 상태의 치수와도 맞습니다. 남은 두 숫자는 하드웨어 값이 아니라 시뮬레이터 값입니다. 두 디스플레이 모두 인치당 460픽셀에 60 Hz로 적혀 있지만 사양표는 내부 패널에 430ppi를 줍니다. 그러니 hdpi는 자리를 채워 둔 값으로 여기십시오.5
프로파일은 모양도 함께 내놓습니다. 각 디스플레이는 프레임버퍼 마스크, 곧 보이는 영역을 담은 PDF를 참조합니다. 외부 디스플레이의 마스크는 모서리가 비대칭이고, 프로파일 값으로는 한쪽 긴 변이 8, 반대쪽이 59입니다. 제가 읽기로는 반경이 작은 쪽이 Apple 디자인 가이드가 설명하는 가운데 힌지와 만나는 쪽입니다. 내부 디스플레이의 마스크는 프로파일의 모서리 값 55를 그대로 쓴 평범한 둥근 사각형이고 전면 카메라를 위한 파임이 없습니다. 따라서 카메라로 인한 가림은 프레임버퍼 모양이 아니라 실행 시점의 예약 영역 API에서 온다는 뜻이 됩니다.510
시뮬레이터에는 무엇이 보입니까?
기기는 접힌 상태로 부팅합니다. 첫 부팅에서 외부 디스플레이에는 홈 화면이 뜨고, 내부 디스플레이의 프레임버퍼는 켜져 있지만 까맣습니다. simctl io enumerate는 프로파일의 이름 그대로 primary를 1398 × 2034로, primary-1을 2007 × 2853으로, 평소의 가상 스크린들과 나란히 열거합니다.6 포즈가 사는 곳은 Device Hub입니다. Duo 기기를 선택하면 그 창에 Rotate Right, Closed, Book, Open이 접근성 API로 누를 수 있는 버튼으로 나타나고, 이 절의 모든 내용을 그렇게 조작했습니다. simctl에는 포즈 명령이 없습니다.6
프로브는 한 파일짜리 SwiftUI 앱입니다. 탭 뷰 안에 툴바 항목 다섯 개를 단 내비게이션 스택이 있고, 지오메트리, size class, toolbarVerticalEdge 환경 값, 힌지, 그리고 includeInactive를 붙인 두 종류의 예약 영역을 읽어 보여 주며, split 스타일의 ArrangementView 하나를 둡니다. 영역은 body가 평가될 때마다 읽고, 1초에 한 번 다시 평가합니다. 아래 숫자는 27.1 SDK에 대고 링크한 10월 2일 재실행의 것입니다. 실수로 27.0으로 링크된 9월의 실행은 그 뒤에 별도의 제목 아래 이어집니다.13
27.1 SDK에 대고 링크한 경우
Closed. 앱은 외부 디스플레이 전체를 받습니다. 창은 466 × 678 포인트이고 폭은 compact, 높이는 regular입니다. 툴바와 탭 바는 시계 아래 trailing 가장자리에 세로로 서고, toolbarVerticalEdge는 trailing을 읽으며, UIKit의 verticalBarEdge 트레이트는 raw value 2를 읽습니다. 내비게이션 스택 안의 콘텐츠는 382 × 562 포인트이고 세이프 에어리어 인셋은 위 82, 아래 34, trailing 쪽 84인데, 이 84가 레일입니다. occlusion 영역 두 개가 보고되며 둘 다 활성입니다. 하나는 외부 카메라 자리에 있는 37포인트 정사각형이고, 다른 하나는 바 위에서 카메라와 상태 열을 덮는 84 × 170입니다. 이 디스플레이에서는 division이 보고되지 않습니다. 옆으로 돌리면 678 × 466이고, 가로세로 모두 compact이며, 바는 여전히 trailing 가장자리에 있습니다.13

Closed, 27.1 SDK: 466 × 678 포인트 디스플레이 전체, 바는 trailing 가장자리를 따라 세로로.
Open. 앱은 내부 디스플레이의 네이티브 방향인 가로로 옮겨 갑니다. 창은 951 × 669 포인트이고 가로세로 모두 regular이며, 바는 여전히 trailing 가장자리에 세로로 있습니다. 콘텐츠는 867 × 553이고 인셋 세 개는 같습니다. 영역은 세 개가 돌아옵니다. 폭 40포인트의 division이 화면 가운데, x 455부터 495까지를 위에서 아래까지 지나고, 양쪽에 20포인트 여백을 두며, 비활성입니다. 휴대폰이 평평하기 때문입니다. 58 × 37의 비활성 occlusion은 내부 카메라를 표시하는데, Apple의 가이드라인은 이 카메라가 “stays hidden until the camera is active.”(카메라가 활성화될 때까지 숨어 있다)라고 말합니다.10 84 × 120의 활성 occlusion이 상태 열을 덮습니다. split arrangement는 두 패널을 나란히 놓고 폭을 똑같이 나눕니다.13

Open, 27.1 SDK: 951 × 669 포인트, 접힘은 가운데를 세로로 지나는 비활성 division으로 보고됩니다.
Book. Device Hub의 Book 포즈는 힌지를 127도로 부분적으로 열린 상태로 보고합니다. 창 크기는 바뀌지 않습니다. 바뀌는 것은 division으로, 프레임은 같은 채 활성이 됩니다. split arrangement는 이에 맞춰 구분선을 접힘 위로 옮기고 40포인트 띠를 비워 둡니다. 그래서 주 패널은 x 455에서 끝나고 보조 패널은 495에서 시작합니다. 이 포즈에서 띄운 시트는 가운데를 벗어나 leading 쪽 절반으로 옮겨 갑니다.13

Book, 27.1 SDK: division이 활성이 되고, split arrangement는 접힘을 비워 둡니다.
회전. 펼친 상태에서 Rotate Right를 누르면 669 × 951 포인트 창이 되고, 가로세로 모두 여전히 regular이며, 바는 다시 가로로 돌아갑니다. toolbarVerticalEdge는 nil이고, 툴바는 위쪽 시계 옆에, 탭 바는 아래쪽에 떠 있습니다. 이는 세로 방향 내부 디스플레이에서 “standard horizontal bars”(표준 가로 바)를 유지한다는 Apple의 디자인 지침과 맞습니다.10 같은 세 영역이 회전된 좌표 공간으로 보고됩니다. division은 이제 가운데를 가로지르는 높이 40포인트의 띠이고, 평평할 때는 비활성, Book에서는 활성입니다. 프로브의 arrangement 뷰는 그 화면 안에서 높이보다 폭이 크기 때문에 나란히 배치를 유지합니다.13

Open에서 회전, 27.1 SDK: 바는 가로, 접힘은 이제 가로 띠입니다.
모든 포즈에서 유지되는 것이 두 가지 있습니다. 첫째, 영역은 늦게 도착합니다. 실행할 때마다 프로브 body의 처음 여섯에서 아홉 번의 평가는 영역을 하나도 읽지 못했고, 그 뒤의 평가는 매번 전부 읽었습니다. 그러니 첫 레이아웃 패스에서 한 번만 묻는 뷰는 빈 답을 받습니다. Sven-Eric Molzahn의 DuoProbe 픽스처는 9월 20일에 바로 이 현상을 40포인트 띠와 함께 기록했습니다(“reservedRegions is empty on the first geometry evaluation and populated on a later one”, 곧 reservedRegions는 첫 지오메트리 계산에서는 비어 있고 이후 계산에서 채워진다). SwiftLee의 9월 22일 시뮬레이터 가이드는 “Holding Option ⌥ reveals a slider that you can use to control the hinge angle of the device with precision”(Option ⌥ 키를 누르고 있으면 기기의 힌지 각도를 정밀하게 조절할 수 있는 슬라이더가 나타난다)라고 덧붙이는데, 저는 이 슬라이더를 쓰지 않았습니다.12 둘째, UIScreen.main.bounds는 앱이 내부 디스플레이에 있는 동안에도 외부 디스플레이인 466 × 678 포인트를 답합니다. Apple 가이드가 레이아웃 계산을 “based on your scene or containing view’s bounds rather than screen dimensions”(화면 치수가 아니라 씬 또는 포함 뷰의 bounds를 기준으로)라고 당부할 때 경고하는 함정이 바로 이것입니다. 메인 스크린은 지금 내가 올라가 있는 스크린이 아닙니다. 윈도 씬 자신의 스크린은 앱이 실제로 올라가 있는 디스플레이를 보고합니다.713
다른 포즈로 돌아가는 길 하나는 통하지 않습니다. simctl io screenConfig로 스크린 전원을 끌 수는 있지만, 내부를 켜 둔 채 외부 디스플레이 전원을 꺼도 기기는 펼쳐지지 않았습니다. 대신 시뮬레이터의 시스템 셸이 죽었고, 이어진 simctl launch는 “The system shell probably crashed.”로 실패해 재부팅이 필요했습니다. 포즈는 Device Hub 창에 삽니다.6
27.0 SDK에 대고 링크한 경우
아래는 이 절이 10월 2일까지 실었던 숫자입니다. 9월 19일과 20일에 내비게이션 스택은 있고 탭 뷰는 없는 프로브로 쟀고, 10월 2일에 현재 프로브로 다시 쟀습니다. Xcode 27.0으로 빌드한 앱이 이 시뮬레이터에서 받는 것을 보여 줍니다.613
Closed에서 창은 466포인트 디스플레이 위에서 폭 386포인트입니다. 시스템이 80포인트 레일을 자기 몫으로 가져가 그곳에 시계와 상태를 검은 바탕으로 그리고, 앱의 툴바는 위쪽을 가로지릅니다. Open에서 창은 871 × 669이고, 같은 80포인트가 오른쪽에서 빠지며, 세이프 에어리어 인셋은 좌우 각각 34입니다. Open에서 회전하면 80포인트가 이번에는 위쪽에서 빠집니다. 모든 포즈에서 size class는 27.1 빌드와 같고, toolbarVerticalEdge는 nil, verticalBarEdge는 raw value 0이며, 예약 영역을 묻는 두 질의는 비활성 영역을 포함해도, 프로브가 아무리 오래 계속 물어도 빈 배열을 돌려줍니다. Book은 Open과 구별되지 않습니다.

Closed, 27.0으로 링크: 앱은 레일 앞에서 멈추고 툴바는 가로로 남습니다.

Open, 27.0으로 링크: 양쪽 모두 regular, 레일은 시스템이 가져갑니다.

회전, 27.0으로 링크: 위쪽을 가로지르는 띠는 시스템의 것입니다.
이 베타가 아직 하지 못하는 일
Apple은 베타 자신의 노트에서 Simulator, Known Issues 아래에 제약 세 가지를 적어 두었습니다. “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”(외부든 내부든 어느 디스플레이에서나 StandBy로 들어간다)라고 말하고 그것을 “hub for widgets”(위젯의 허브)라고 부릅니다. 거기에 무엇이 나타나는지는 Duo 개발자 글에서 다루었고, 나중 베타가 이 제약을 풀기 전까지 이 기기의 StandBy는 실제 기기에서 확인할 일입니다(10월 15일: 정식 릴리스의 노트에도 여전히 실려 있습니다15).11
두 건이 더 Mac Catalyst, Known Issues 아래에 있는데, 이 API들을 채택하면서 Mac용으로도 빌드하는 앱을 정면으로 칩니다. 첫째는 “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 베타 노트는 반대 방향에서 세 번째를 더합니다. “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
이번 주에 제가 할 일
- 베타를 Xcode 27.0 위에 덮어쓰지 말고 그 옆에 설치합니다. xip을 펼치고, 앱 이름을 바꾸고, 명령줄 빌드를 위해
DEVELOPER_DIR를 그쪽으로 돌립니다. 베타 노트에 27.0 툴체인을 바꾸는 항목은 하나도 없고, 컴파일러와 링커의 버전 문자열도 같습니다.4 - 필요해지기 전에 런타임 다운로드를 시작합니다. 베타 아래에서
xcodebuild -downloadPlatform iOS를 실행하고, 실패하면 다시 시도하십시오. iPhone Duo 디바이스 타입을 부팅 가능하게 만드는 것이 이 런타임이고, 게다가 Apple은 첫 실행에 몇 분이 걸린다고 경고합니다.23 - Mac Catalyst 타깃을 포함한 채로 27.1 SDK에 대고 한 번 빌드합니다. 새 API를
#if !targetEnvironment(macCatalyst)로 막을지, Catalyst 최소 배포 버전을 27.0으로 올릴지 정하기 전에 Apple이 지목한 진단 두 가지를 읽어 두십시오.2 - 미리보기와 테스트의 기준 크기로 프로파일의 숫자를 씁니다. 접었을 때 466 × 678 포인트, 펼쳤을 때 669 × 951 포인트, 내부 디스플레이는 가로가 네이티브입니다. 베타의 Previews 노트는 캔버스 오버라이드 선택기에 “for previewing content on a device’s alternative display.”(기기의 다른 디스플레이에서 콘텐츠를 미리 보기 위해) Display 그룹을 추가했다고 적습니다. (182598534)25
- 예약 영역은 다시 읽히는 자리에서 읽습니다. 뷰의 body 안에서 지오메트리 프록시를 통해 읽거나, 지오메트리가 바뀔 때마다 읽고, 첫 레이아웃에서 한 번만 읽지는 마십시오.
.includeInactive를 넘긴reservedRegions(kind:options:layoutDirectionBehavior:)는 프로브의 처음 여섯에서 아홉 번의 평가에서는 아무것도 돌려주지 않았고, 그 뒤로는 매번 그 디스플레이에 있는 모든 영역을 돌려주었습니다(접었을 때는 카메라와 상태 열, 펼쳤을 때는 접힘, 내부 카메라, 상태 열). 그러니 첫 패스에서 캐시한 값은 그 뷰가 살아 있는 내내 빈 배열입니다. 그리고 무엇이든 믿기 전에, 빌드에 27.1 SDK가 찍혀 있는지 확인하십시오.otool -l <app>/<binary> | grep -A4 LC_BUILD_VERSION.713
자주 묻는 질문
Xcode 27.1 beta에 iPhone Duo 시뮬레이터가 들어 있습니까?
그렇습니다. 베타는 iPhone Duo 디바이스 타입, 곧 com.apple.CoreSimulator.SimDeviceType.iPhone-Duo를 설치합니다. 그 프로파일은 iOS 27.1 런타임을 요구하고, 그 런타임은 Xcode가 xcodebuild -downloadPlatform iOS로 따로 내려받습니다. Apple의 노트는 첫 실행이 “can take several minutes”(몇 분이 걸릴 수 있다)라고, 그리고 그 런타임에서는 StandBy와 대부분의 앱 익스텐션을 쓸 수 없다고 경고합니다.235
iPhone Duo 시뮬레이터는 어떻게 구합니까?
Xcode 27.1 beta를 설치하고, 베타 환경에서 xcodebuild -downloadPlatform iOS로 iOS 27.1 런타임을 내려받은 다음, Device Hub에서 iPhone Duo 기기를 고르십시오. 포즈는 그곳에 버튼으로 있습니다. 27.2 베타에는 들어 있지 않으며, Apple의 27.2 노트는 “the iOS SDK and simulator support for iPhone Duo.”(iPhone Duo용 iOS SDK와 시뮬레이터 지원)를 얻을 곳으로 27.1 베타를 가리킵니다.238 (10월 11일: Xcode 27.1 RC(27A9275)가 10월 5일에 출시됐고, 그 노트에도 같은 iPhone Duo Simulator 알려진 문제가 실려 있습니다. 노트에서 Duo 시뮬레이터를 다루는 Xcode 27.1은 이제 베타만이 아닙니다. 저는 RC를 설치하지 않았습니다.14) (10월 15일: Xcode 27.1이 정식 릴리스로 출시됐습니다. 빌드는 RC와 같은 27A9275이고, 노트에는 같은 Duo 시뮬레이터 알려진 문제 두 건이 실려 있습니다. 저는 이것도 설치하지 않았습니다.15)
온라인 iPhone Duo 시뮬레이터가 있습니까?
Apple이 제공하는 것은 없습니다. 시뮬레이터는 RC 이전에는 Xcode 27.1 beta 안에만 들어 있었고 Apple의 iOS 27.1 런타임에서 실행됩니다. 그 이름을 내건 브라우저 페이지가 그리는 것은 다른 무엇입니다. 레이아웃을 빠르게 확인하려면 베타의 Previews 캔버스가 대체 디스플레이용 Display 그룹을 제공합니다.2 (10월 11일: Xcode 27.1 RC(27A9275)가 10월 5일에 출시됐고, 그 노트에도 같은 iPhone Duo Simulator 알려진 문제가 실려 있습니다. 노트에서 Duo 시뮬레이터를 다루는 Xcode 27.1은 이제 베타만이 아닙니다. 저는 RC를 설치하지 않았습니다.14) (10월 15일: Xcode 27.1이 정식 릴리스로 출시됐습니다. 빌드는 RC와 같은 27A9275이고, 노트에는 같은 Duo 시뮬레이터 알려진 문제 두 건이 실려 있습니다. 저는 이것도 설치하지 않았습니다.15)
Xcode 27 옆에 Xcode 27.1 beta를 어떻게 설치합니까?
xip --expand로 xip을 펼치고, 나온 앱을 /Applications/Xcode-27.1-beta.app처럼 버전이 붙은 이름으로 옮긴 다음, xcodebuild와 xcrun, swiftc를 위해 DEVELOPER_DIR를 그 앱의 Contents/Developer 폴더로 설정하십시오. 베타는 macOS Tahoe 26.6 이상을 요구하며, 이는 Xcode 27.0과 같은 하한입니다.24
iPhone Duo 내부 디스플레이는 포인트로 얼마입니까?
669 × 951 포인트입니다. 시뮬레이터의 디바이스 프로파일이 내부 디스플레이를 스케일 3의 2007 × 2853 픽셀에 가로가 네이티브인 방향으로 정의합니다. 외부 디스플레이는 스케일 3의 1398 × 2034 픽셀에서 나온 466 × 678 포인트입니다.5
Xcode 27.1 beta가 iOS 27.0 SDK나 Xcode 27 툴체인을 바꿉니까?
아닙니다. Swift 컴파일러와 링커는 Xcode 27.0과 같은 버전 문자열을 보고하고, 베타의 릴리스 노트에는 Mac Catalyst, Previews, Simulator 세 절뿐이며 그중 어느 것도 툴체인을 건드리지 않습니다. iOS 27.1 SDK는 추가된 것이고, 기기용과 시뮬레이터용 SDK 양쪽에서 빌드 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 (10월 26일: 실제로 그렇게 출시되었고, iOS 27.1은 다른 어떤 기기에도 출시되지 않았습니다. Apple의 보안 페이지는 이 버전을 iPhone Duo 하나에 대해서만 싣고 있고, 이 Mac의 27.1 시뮬레이터 런타임은 iPhone Duo 기기 유형만 받아들입니다.16)
이 사이트의 관련 글: Duo 개발자 글에는 이 글이 SDK와 대조한 사양표 수치와 API 목록이 있고, iPhone Duo를 위한 디자인 글은 Apple의 디자인 지침을 읽어 냅니다. 크기 조절 가능한 iPhone 체크리스트는 프로파일 수치가 흘러드는 레이아웃 작업이고, Xcode 27 허브 글은 날짜가 붙은 베타 절을 담고 있으며, Xcode 27 빌드 실패 글은 이 베타가 그대로 둔 툴체인을 다루고, iOS 27 릴리스 노트 글은 27.x 빌드를 추적합니다.
출처
-
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 인용. 이 노트에 다른 절은 없습니다. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
글쓴이가 macOS 26.6.2(25G83)에서 2026년 9월 19일에 진행한 런타임 다운로드,
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”이 올라왔습니다. 같은 날 로그인한 상태로 Apple 개발자 다운로드 페이지를 “Simulator Runtime”으로 검색하면 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는 Software Update 인증서 체인과 함께 “signed Apple Software”라고 보고합니다. 펼친 앱에 대한du -sk는 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파일 개수입니다. availability 속성도 같은 파일들에서 읽었습니다. SwiftUICore 인터페이스의public struct ArrangementView<위, 그리고 SwiftUI 인터페이스에서func toolbarVerticalBehavior를 선언하는extension SwiftUICore.View위에는@available(anyAppleOS 27.1, *)가 있습니다.UIArrangementViewController.h,UIView.h의 두reservedRegionsOfKind:선언, 그리고UIVerticalBarEdgeenum과verticalBarEdge트레이트에는API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1))에 이어API_UNAVAILABLE(watchos)가 붙어 있고, 그UIVerticalBarEdgeLeading과UIVerticalBarEdgeTrailing케이스에는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위에는 속성이 없습니다. 첫 실행에 대해서는, 베타의DEVELOPER_DIR아래에서 처음 실행한xcodebuild -version이 2분 타임아웃을 넘겼고,/var/log/install.log에는 9월 19일 16시 01분 54초에xcodebuild가 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,createByDefaultForRuntimeVersions의 versionMin 27.1.capabilities.plist:ModelNumberA3447,ThinningProductTypeiPhone19,4,CompatibleDeviceFallbackiPhone18,3,DeviceCornerRadius59,HomeButtonType2,DeviceSupportsDynamicIslandtrue,DeviceSupportsEnhancedMultitaskingfalse,IsLargeFormatPhonetrue.ScreenDimensionsCapability는 main-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 개발자 글에 있습니다. 베타 아래의xcrun simctl list devicetypes는 “iPhone Duo (com.apple.CoreSimulator.SimDeviceType.iPhone-Duo)”를 나열합니다. ↩↩↩↩↩↩↩↩↩ -
글쓴이가 macOS 26.6.2(25G83)에서 2026년 9월 19일과 20일에 진행한 실행. 기기:
simctl create "Duo-27.1" com.apple.CoreSimulator.SimDeviceType.iPhone-Duo com.apple.CoreSimulator.SimRuntime.iOS-27-1로 만들고simctl boot과simctl bootstatus -b로 부팅했습니다(이 Mac에서 1분 남짓).simctl io <udid> enumerate는 디스플레이 클래스 0의com.apple.framebuffer.display포트 두 개를 1398 × 2034와 2007 × 2853으로 나열하고, Connected Screens 아래에는 “LCD-1”이 기기 이름primary-1, 스크린 ID 3, 픽셀 크기 {2007, 2853}으로 올라옵니다. 프로브: DuoProbe, 한 파일짜리 SwiftUI 앱으로 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는FBSOpenApplicationServiceErrorDomain코드 5, “The system shell probably crashed.”로 실패했으며,simctl shutdown과boot으로 기기를 복구했습니다. 포즈별 실행은 9월 20일에 두 차례 시리즈로 진행했고, 둘 다 Device Hub가 선택된 기기에 대해 내놓는 버튼에 접근성 API의AXPress동작을 보내 Rotate Right, Closed, Book, Open을 눌렀으며, 둘 다 27.2 베타의simctl명령줄 도구(그 스크립트가 설정하는DEVELOPER_DIR)로 27.1 베타의 런타임, 디바이스 타입, Device Hub를 상대로 구동했습니다. 첫 시리즈에서는 다음 버튼을 누를 때 이전 포즈의 프로브가 아직 실행 중이었고, 그 뒤 종료했다가 다시 실행하면서 콘솔을 12초 동안 캡처하고 두 디스플레이의 스크린샷을 찍었습니다. 아래의 회전 시 수치와 전환 중 줄은 이 시리즈에서 나온 것입니다. 둘째 시리즈에서는 캡처할 때마다 프로브를 종료해, 다음 버튼을 누를 때 앞에 앱이 없도록 했습니다. 재실행 전 스크린샷은 이 시리즈에서 나온 것입니다. 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스크린샷에는 프로브가 보이고--display=primary는 까맣습니다. Book: 재실행 후 같은 세 줄. 버튼을 누른 뒤 재실행 전에 찍은 내부 디스플레이 스크린샷에는, 실행 중인 앱이 없는 상태로 홈 화면이 보입니다. 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)), 위의 수치에는 넣지 않았습니다. 이 빌드에는sdk 27.0이 찍혀 있었습니다. 10월 2일 업데이트와 각주 13을 참고하십시오. ↩↩↩↩↩↩↩ -
Apple, 2026년 9월 19일에 받은 문서 JSON: ArrangementView, UIArrangementViewController, reservedRegions(kind:options:layoutDirectionBehavior:), reservedRegions(kind:options:), toolbarVerticalBehavior(_:). 각 페이지의 플랫폼 availability는 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 인용; 2026년 9월 26일 Overview의 보충 설명 “Download Xcode 27.1 beta to get the iOS SDK and simulator support for iPhone Duo.”를 위해 다시 받음, 인용. ↩↩↩
-
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”. 2026년 10월 2일에 다시 받음, Vertical controls: “The exception is the inner display in portrait, which has enough vertical space to keep standard horizontal bars.”; Anatomy: “The inner camera is behind the display and stays hidden until the camera is active.” ↩↩↩↩
-
Apple Newsroom, Apple unveils iPhone Duo, 2026년 9월 9일, 2026년 9월 20일 받음: StandBy 문단에서 “Set iPhone Duo down and it enters StandBy on either the outer or inner display”와 “hub for widgets” 인용. ↩
-
Sven-Eric Molzahn, iphone-duo-probe, GitHub README, 2026년 9월 24일 받음(최신 커밋 2026년 9월 20일): “Two caveats before reaching for it:
reservedRegionsis empty on the first geometry evaluation and populated on a later one”와 “Half-folded, inner display, content 867 × 575, hinge band at x 455.5…495.5” 인용. Antoine van der Lee, iPhone Duo Simulator: Testing and optimizing your SwiftUI app, SwiftLee, 2026년 9월 22일, 인용. ↩↩↩ -
글쓴이가 2026년 10월 2일에 진행한 재실행: macOS 27.0(26A428), Xcode 27.1 beta(27A9269), iOS 27.1 런타임(24A94401), 같은
Duo-27.1시뮬레이터. 프로브: DuoProbe2. Swift 파일 하나로, 첫 탭에 툴바 항목 다섯 개를 단NavigationStack을 담은TabView, 본문에서 설명한 읽기 표시, 그리고 자신의 창, 윈도 씬의 스크린,UIScreen.main,verticalBarEdge트레이트를 로그로 남기는 UIKit 뷰로 이루어집니다. 그 파일에서 27.1 시뮬레이터 SDK에 대고 두 번 빌드하면서 기록할 SDK 버전을 링커에 지정했습니다(-Xlinker -platform_version -Xlinker ios-simulator -Xlinker 27.1 -Xlinker 27.0과... 27.1).otool -l은sdk 27.0과sdk 27.1을 출력했습니다. 9월 방식으로 만든 세 번째 빌드, 곧SDKROOT를 설정하지 않은swiftc -sdk <iPhoneSimulator27.1.sdk>는clang: warning: using sysroot for 'macOS 27.0' but targeting 'arm64-apple-ios27.1.0-simulator'를 출력하고sdk 27.0이 찍혔습니다.SDKROOT를 시뮬레이터 SDK로 export하면 같은 명령이sdk 27.1을 찍습니다. 차이를 드러낸 실제 앱은 Xcode 27.1 beta로 빌드한 Kiradex(941 Apps)이며,minos 27.0,sdk 27.1입니다. 콘솔 줄, 27.1 스탬프, 접은 상태:size=382x562 ... h=compact v=regular verticalEdge=trailing safe=EdgeInsets(top: 82.0, leading: 0.0, bottom: 34.0, trailing: 84.0) divisions=0 occlusions=2,occlusion[0] active=true frame=(399,-52 37x37),occlusion[1] active=true frame=(382,-82 84x170),window=(466.0, 678.0),verticalBarEdge=2. 접어서 회전:size=594x350 ... h=compact v=compact verticalEdge=trailing,window=(678.0, 466.0). 펼친 상태:size=867x553 ... h=regular v=regular verticalEdge=trailing ... divisions=1 occlusions=2,division[0] active=false frame=(455,-82 40x669) margins=EdgeInsets(top: 0.0, leading: 20.0, bottom: 0.0, trailing: 20.0),occlusion[0] active=false frame=(677,-61 58x37),occlusion[1] active=true frame=(867,-82 84x120),window=(951.0, 669.0),hinge=fullyOpen 180 deg. Book: 같되division[0] active=true와hinge=partiallyOpen 127 deg, 그리고sceneScreen=(951.0, 669.0)옆에mainScreen=(466.0, 678.0). 펼쳐서 회전:size=669x734 ... verticalEdge=nil safe=EdgeInsets(top: 134.0, leading: 0.0, bottom: 83.0, trailing: 0.0) divisions=1 occlusions=2,division[0] active=false frame=(0,321 669x40),occlusion[0] active=false frame=(611,543 37x58),occlusion[1] active=true frame=(535,-134 134x82),window=(669.0, 951.0),mainScreen=(466.0, 678.0),verticalBarEdge=0. Book에서 회전: 같되division[0] active=true. 프레임은 읽기 표시 뷰의 좌표계이며, 그 원점은 창 위쪽에서 82 또는 134포인트 아래에 있습니다. 27.0 스탬프: 접은 상태window=(386.0, 678.0), 펼친 상태와 Book(871.0, 669.0), 펼쳐서 회전(669.0, 871.0), 접어서 회전(678.0, 386.0), 모든 줄에서verticalEdge=nil,verticalBarEdge=0,divisions=0 occlusions=0. PlainProbe는 같은 탭 뷰, 내비게이션 스택, 툴바를 갖되 27.1 SDK에서 온 것은 하나도 넣지 않은 버전으로, Xcode 27.0(27A266a)이 자신의 iOS 27.0 SDK에 대고 컴파일했습니다(otool:minos 27.0,sdk 27.0). 접은 상태window=(386.0, 678.0), 펼친 상태(871.0, 669.0). 27.1로 실행할 때마다 처음 여섯에서 아홉 번의 평가가 영역이 나타나기 전에divisions=0 occlusions=0을 로그로 남겼고, 그중 세 번은 뷰가 크기를 갖기 전이었습니다. 카메라의 occlusion은 Apple의 “Outer Closed Portrait” 베젤 PNG와 비교했습니다. 그 PNG의 카메라 컷아웃은 3x 기준으로 가로 400.3에서 436.3포인트, 세로 29.7에서 65.7포인트에 걸칩니다. occlusion은 창 포인트로 가로 399에서 436, 세로 30에서 67에 걸쳐, 모든 가장자리에서 1.3포인트 이내입니다. 패널 위치는 캡처에서 쟀습니다. 평평할 때 주 패널은 x 8에서 433.7, 보조 패널은 433.7에서 859. Book에서는 주 패널이 455.7까지, 빈 띠가 495.7까지, 보조 패널이 859까지. 프로브의 시트는 펼친 상태에서 가운데에653x501, Book에서 leading 가장자리에459x501로 측정되었습니다. 프로브의 arrangement 뷰가 콘텐츠 영역을 채우게 하는 실행 옵션을 주자, 회전한 디스플레이에서 주 패널이 보조 패널 위에 나타났고,.split.axes(.horizontal)에서는 주 패널만 나타났습니다. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, Releases, 2026년 10월 11일에 받은 RSS 피드: “Xcode 27.1 RC (27A9275)”는 Mon, 05 Oct 2026 10:00:00 PDT 날짜. Apple, App Store Connect release notes, 2026년 10월 11일 받음, 2026년 10월 5일 항목: “You can now upload apps built with Xcode 27.1 RC using the SDK for iOS 27.1, iPadOS 27.0, macOS 27.0, tvOS 27.0, visionOS 27.0, and watchOS 27.0 for the App Store, and for internal and external testing through TestFlight.”(Xcode 27.1 RC로 iOS 27.1, iPadOS 27.0, macOS 27.0, tvOS 27.0, visionOS 27.0, watchOS 27.0 SDK를 사용해 빌드한 앱을 App Store용으로, 그리고 TestFlight를 통한 내부 및 외부 테스트용으로 업로드할 수 있다). Apple, Xcode 27.1 RC Release Notes, 2026년 10월 11일 받음, Simulator, Known Issues: “StandBy is unavailable in the iPhone Duo Simulator runtime. (187708663)”(iPhone Duo Simulator 런타임에서는 StandBy를 쓸 수 없다)와 “Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime. (187708767)”(iPhone Duo Simulator 런타임에서는 대부분의 앱 익스텐션을 실행하고 디버깅할 수 없다). 베타 노트와 같습니다. ↩↩↩↩
-
Apple, Releases, 2026년 10월 15일 태평양 시간 17:16(10월 16일 00:16 UTC)에 가져온 RSS 피드: “Xcode 27.1 (27A9275)”는 Thu, 15 Oct 2026 13:00:00 PDT 날짜이며, 10월 11일에 가져온 피드에 있던 10월 5일 RC 항목과 빌드 번호가 같습니다. 그 RC 항목은 이제 피드에 없습니다. Apple, Xcode 27.1 Release Notes, 2026년 10월 15일 태평양 시간 17:21에 문서 JSON 엔드포인트로 가져옴, “Xcode 27.1 RC Release Notes”에서 제목이 바뀜. Overview: “Xcode 27.1 includes Swift 6.4 and SDKs for iOS 27.1, iPadOS 27, tvOS 27, watchOS 27, macOS 27, and visionOS 27.”(Xcode 27.1에는 Swift 6.4와 iOS 27.1, iPadOS 27, tvOS 27, watchOS 27, macOS 27, visionOS 27용 SDK가 포함된다). iPhone Duo Simulator Known Issues 두 건, 187708663과 187708767은 그대로. Apple, App Store Connect release notes, 2026년 10월 15일 태평양 시간 17:20에 가져옴, 2026년 10월 15일 날짜 항목 “App Store Connect updates”: “You can now upload apps built with Xcode 27.1 using the SDK for iOS 27.1, iPadOS 27.0, macOS 27.0, tvOS 27.0, visionOS 27.0, and watchOS 27.0 for the App Store, and for internal and external testing through TestFlight.”(Xcode 27.1로 iOS 27.1, iPadOS 27.0, macOS 27.0, tvOS 27.0, visionOS 27.0, watchOS 27.0 SDK를 사용해 빌드한 앱을 App Store용으로, 그리고 TestFlight를 통한 내부 및 외부 테스트용으로 업로드할 수 있다)와 “Submit your iPhone Duo optimized apps and games in App Store Connect today. Starting April 2027, any apps or games submitted will need to include screenshots for iPhone Duo.”(iPhone Duo에 최적화한 앱과 게임을 오늘 App Store Connect에서 제출하라. 2027년 4월부터 제출하는 모든 앱과 게임에는 iPhone Duo용 스크린샷이 포함되어야 한다). 같은 시간에 가져온 Apple 개발자 뉴스 피드에는 이 릴리스에 관한 항목이 없습니다. ↩↩↩↩↩
-
Apple Newsroom, “iPhone Duo arrives at Apple Store locations worldwide”, 2026년 10월 23일, 10월 26일에 받음: “On Friday, October 23, the highly anticipated iPhone Duo made its debut at Apple Store locations worldwide.” Apple Support, “Apple security releases”, 2026년 10월 26일에 받음: 링크가 없는 “iOS 27.1,” “This update has no published CVE entries.,” “iPhone Duo,” “23 Oct 2026,” 행. Apple, Releases, 2026년 10월 26일 태평양 시간 16:12에 받은 RSS 피드: “iOS 27.2 (24B91020)”와 “iOS 27.2 (24B119)”는 Mon, 26 Oct 2026 10:00:00 PDT 날짜, “Xcode 27.2 RC (27B48)”는 Mon, 19 Oct 2026 날짜로 가장 최근의 Xcode 항목. iOS 27.1 릴리스를 가리키는 항목 제목은 없음. 10월 26일에 받은 iOS & iPadOS Release Notes 색인에는 “iOS & iPadOS 27 Release Notes”와 “iOS & iPadOS 27.2 Release Notes”만 있고, 27.1 페이지의 JSON 엔드포인트는 404를 반환함. Apple, Xcode 27.2 RC Release Notes, 2026년 10월 26일에 받음(Last-Modified Mon, 19 Oct 2026 04:56:10 GMT): Device Hub, Known Issues(187146039, 187148389, 우회 방법이 있는 189465196), Mac Catalyst, Known Issues(185924957), Simulator, Resolved Issues(190155353), 인용. Apple, iOS & iPadOS 27.2 Release Notes, 2026년 10월 26일에 받음: UIKit, New Features(186294594). 글쓴이의 Mac, 2026년 10월 26일, macOS 27.0(26A428), /Applications/Xcode.app의 Xcode 27.1(27A9275):
iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plist와 iPhoneSimulator SDK의 plist는 둘 다ProductVersion27.1과ProductBuildVersion24A94232를 보고함.xcrun simctl list runtimes는 “iOS 27.1 (27.1 - 24A94425)”를 출력하고,-j는supportedDeviceTypes항목 하나, “iPhone Duo”를 나열함.com.apple.CoreSimulator.SimRuntime.iOS-27-1에com.apple.CoreSimulator.SimDeviceType.iPhone-16-Pro를xcrun simctl create하자 “Incompatible device”(SimError 403)로 실패함. 여백 프로브와 그 출력은 iOS 27.2 릴리스 노트 글의 각주 4에 있음. ↩↩