Xcode 27.1 beta: aplikacja w symulatorze iPhone Duo
Xcode 27.1 beta (27A9269) ukazał się w piątek 18 września 2026 roku z pierwszym SDK iOS 27.1 i typem urządzenia iPhone Duo dla symulatora, cztery dni po Xcode 27.0. SDK zawiera wszystkie API iPhone Duo wymienione w przewodniku przygotowawczym Apple, profil typu urządzenia definiuje dwa ekrany jako 1398 na 2034 i 2007 na 2853 piksele przy skali 3x, czyli 466 na 678 i 669 na 951 punktów, a runtime symulatora to osobne pobranie, po które Xcode sięga na żądanie. Własne noty Apple wymieniają trzy rzeczy, których symulator jeszcze nie potrafi, a aplikacja sondująca zlinkowana z SDK 27.1 i uruchomiona w trzech pozach Device Hub wypełnia ekran 466 na 678 punktów w stanie zamkniętym, z paskami wzdłuż krawędzi końcowej, i ekran 951 na 669 w otwartym, regularny tam w obu klasach rozmiaru, przy czym zgięcie jest zgłaszane jako podział, a kamera i kolumna stanu jako przesłonięcia, a UIScreen.main wciąż odpowiada za ekran zewnętrzny, gdy aplikacja stoi na wewnętrznym. (Poprawka z 2 października: do tego dnia ten akapit mówił, że sonda nie widziała żadnych zarezerwowanych regionów; tamta sonda była zlinkowana jako aplikacja iOS 27.0).1245613
TL;DR
- Daty i kompilacje. Kanał wydań Apple datuje Xcode 27.1 beta (27A9269) na piątek 18 września.
xcodebuild -versionwypisujeXcode 27.1orazBuild version 27A9269; SDK iPhoneOS i iPhoneSimulator identyfikują się oba jako iOS 27.1, kompilacja 24A94403; kompilator Swift raportuje ten sam ciąg wersjiswiftlang-6.4.0.34.1co Xcode 27.0, a linker ten samld-27037.1. Plik xip waży 2 027 292 809 bajtów, rozpakowana aplikacja zajmuje 3,6 GiB, a instaluje się obok Xcode 27.0, niczego nie zastępując.14 (11 października: 5 października pojawił się Xcode 27.1 RC (27A9275), a App Store Connect przyjmuje jego buildy zarówno do App Store, jak i do TestFlight.14) (15 października: Xcode 27.1 ukazał się jako wydanie finalne, kompilacja 27A9275, czyli kompilacja RC, a wpis App Store Connect z tego dnia przyjmuje jego buildy do sklepu pod tą nazwą.15) - API Duo są już w SDK. Dziesięć nazw, których moje sprawdzenie z 17 września nie znalazło w SDK 27.0, jest obecnych w SDK 27.1, a wśród nich
ArrangementViewireservedRegions(kind:options:layoutDirectionBehavior:)w SwiftUICore,toolbarVerticalBehavior(_:)w SwiftUI orazUIArrangementViewController,preferredVerticalBarBehavioriverticalBarEdgew UIKit. SwiftUI oznacza je jako@available(anyAppleOS 27.1, *); nagłówki UIKit oznaczają kontroler układu i metody zarezerwowanych regionów jakoAPI_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)), czyli o dwie platformy więcej, niż wymieniają strony dokumentacji.4 - Profil symulatora zapisuje rozmiary ekranów. Typ urządzenia iPhone Duo (
iPhone19,4, klasa produktuV68, numer modelu A3447) definiuje dwa wbudowane ekrany:primaryo wymiarach 1398 na 2034 piksele przy skali 3 orazprimary-1o wymiarach 2007 na 2853 piksele przy skali 3, z orientacją natywną 270. Po podzieleniu przez trzy daje to 466 na 678 oraz 669 na 951 punktów, a liczba dla ekranu wewnętrznego jest dokładnie tą, którą mój wpis o Duo dla deweloperów wywnioskował 10 września z rozmiaru zrzutu ekranu w App Store Connect. Profil wymaga runtime’u 27.1 lub nowszego.5 - Co symulator robi z prawdziwą aplikacją (poprawione 2 października). Device Hub udostępnia trzy pozy: Closed (zamknięta), Book (książka) i Open (otwarta), a do tego Rotate Right (obrót w prawo). Sonda zlinkowana z SDK 27.1 dostaje po zamknięciu cały ekran zewnętrzny, 466 na 678 punktów, szerokość compact, z paskiem narzędzi i paskiem kart ustawionymi na krawędzi końcowej,
toolbarVerticalEdgerównym trailing i dwoma aktywnymi regionami przesłonięcia: kamerą i kolumną stanu. Po otwarciu dostaje cały ekran wewnętrzny, natywnie poziomy, 951 na 669 punktów, regularny w obu klasach rozmiaru, znów z pionowymi paskami, oraz nieaktywny podział szeroki na 40 punktów biegnący przez środek, który w pozie Book staje się aktywny; po obróceniu 669 na 951 z poziomymi paskami.UIScreen.main.boundswciąż raportuje 466 na 678, gdy aplikacja stoi na ekranie wewnętrznym. Do 2 października ten punkt podawał rozmiary ekranów, 466 na 678 i 951 na 669, z wcięciami obszaru bezpiecznego po 34 z każdej strony po otwarciu, poziomym paskiem narzędzi i brakiem zarezerwowanych regionów w każdej pozie; treść wpisu podawała obszar zmierzony przez sondę, o 80 punktów węższy od ekranu (386 punktów po zamknięciu, 803 wewnątrz 34-punktowych wcięć po otwarciu). Wszystko to pochodziło z sondy, którą przez pomyłkę zlinkowano jako aplikację iOS 27.0: to jest to, co dostaje SDK 27.0, a aktualizacja poniżej zestawia obie kompilacje.61213 - Czego ta beta jeszcze nie potrafi. Noty Apple: „Initial Simulator launch can take several minutes.” (187708500), „StandBy is unavailable in the iPhone Duo Simulator runtime.” (187708663) oraz „Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime.” (187708767), czyli pierwsze uruchomienie symulatora może zająć kilka minut, a w tym runtimie niedostępne są StandBy i większość rozszerzeń aplikacji. Do tego dwa Known Issues dla Mac Catalyst, istotne dla każdego, czyja aplikacja wychodzi także na Maca, i jedna rzecz, której Apple nie wymienia: pobieranie runtime’u zawiodło za pierwszym razem z komunikatem
Download failed.i powiodło się przy ponownej próbie.23
Aktualizacja z 2 października: wrześniowa sonda była zlinkowana jako aplikacja iOS 27.0
Wyniki z symulatora, które ten wpis podawał od 21 września do 2 października, zostały zmierzone poprawnie i opisane błędnie. Pokazują, co symulator iPhone Duo robi z aplikacją zbudowaną z SDK iOS 27.0. Przedstawiłem je jako to, co robi z aplikacją zbudowaną z 27.1.
Co poszło nie tak. Sonda była pojedynczym plikiem Swift kompilowanym przez bezpośrednie wywołanie swiftc -sdk <iPhoneSimulator27.1.sdk>. Ta flaga trafia do kompilatora. Nie trafia do kroku linkowania, w którym driver sięgnął awaryjnie po SDK macOS z tego samego Xcode i zapisał w pliku binarnym wersję tamtego SDK: LC_BUILD_VERSION pokazywało sdk 27.0. To na podstawie tej liczby iOS decyduje, jakie zachowania dostaje aplikacja. Uruchomione ponownie 2 października to samo polecenie wypisuje przyczynę jako ostrzeżenie, „using sysroot for ‘macOS 27.0’ but targeting ‘arm64-apple-ios27.1.0-simulator’” (sysroot pochodzi z macOS 27.0, choć celem jest symulator iOS 27.1); jeśli wypisało je także we wrześniu, nie odczytałem go jako przyczyny czegokolwiek.13
Jak to wyszło na jaw. 2 października uruchomiłem na tym samym symulatorze prawdziwą aplikację, zbudowaną w Xcode 27.1 beta z tym samym SDK. Jej pasek narzędzi i pasek kart stały wzdłuż boku ekranu zewnętrznego, tam gdzie paski sondy leżały w poprzek u góry. otool -l na obu plikach binarnych pokazał sdk 27.1 w aplikacji i sdk 27.0 w sondzie przebudowanej po wrześniowemu. Przebudowana z ustawionym SDKROOT sonda pokazuje sdk 27.1 i zachowuje się jak aplikacja. Z kolei prosta wersja sondy skompilowana samym Xcode 27.0, z prawdziwym SDK iOS 27.0, dostaje te same okna co sonda z błędnym znacznikiem, więc wrześniowe liczby uczciwie oddają kompilację 27.0.13
Ponowny pomiar. To samo źródło, zlinkowane na oba sposoby, w każdej pozie, na tym samym Xcode 27.1 beta (27A9269) i tym samym runtimie (24A94401):13
| Poza | Zlinkowana jako SDK 27.0 | Zlinkowana jako SDK 27.1 |
|---|---|---|
| Zamknięty | okno 386 na 678 punktów obok czarnej listwy; paski poziome; toolbarVerticalEdge nil; brak regionów |
okno 466 na 678, cały ekran; pasek narzędzi i pasek kart pionowo na krawędzi końcowej; toolbarVerticalEdge trailing; dwa aktywne przesłonięcia |
| Zamknięty, obrócony | okno 678 na 386; paski poziome; brak regionów | okno 678 na 466; compact w obu klasach rozmiaru; paski pionowe; dwa aktywne przesłonięcia, kamera i kolumna stanu |
| Otwarty | okno 871 na 669; paski poziome; brak regionów | okno 951 na 669; paski pionowe; jeden nieaktywny podział, jedno nieaktywne i jedno aktywne przesłonięcie |
| Otwarty, obrócony | okno 669 na 871; paski poziome; brak regionów | okno 669 na 951; paski poziome; toolbarVerticalEdge nil; te same trzy regiony, obrócone |
| Book | jak Otwarty | jak Otwarty, z aktywnym podziałem |
| Book, obrócony | jak Otwarty, obrócony | jak Otwarty, obrócony, z aktywnym podziałem |
Co zostaje wycofane. Trzy stwierdzenia, z których każde było prawdziwe dla kompilacji 27.0 i fałszywe dla kompilacji ze znacznikiem 27.1: że pasek narzędzi nigdy nie rysował się pionowo; że reservedRegions nie zwracało nic w żadnej pozie; oraz że symulator dawał aplikacji tylko ekran obok listwy stanu. Czwarte myliło się co do przyczyny: napisałem, że po obróceniu układ dzielony „stays side by side even though the container is now taller than it is wide” (pozostaje obok siebie, mimo że kontener jest teraz wyższy niż szerszy). Widok układu w sondzie był sam w sobie szerszy niż wyższy w obrębie tego ekranu, a dzieli się według własnego kształtu; układ, który wypełnia obrócony ekran, układa się w stos, tak jak zapowiada przewodnik Apple. Piąte: TL;DR podawał rozmiary ekranów, 466 na 678 i 951 na 669, tam gdzie treść wpisu podawała obszar zmierzony przez sondę, o 80 punktów węższy (386 punktów po zamknięciu, 803 wewnątrz 34-punktowych wcięć po otwarciu); kompilacja 27.0 nigdy nie miała całego ekranu.713
Co się utrzymuje. Wszystko poza sekcją o symulatorze: daty i kompilacje, tabela symboli SDK, profil urządzenia z rozmiarami w pikselach i punktach, pobieranie runtime’u, Known Issues od Apple. W samej sekcji: rozmiary ekranów, klasy rozmiaru, pozy dostępne w Device Hub, awaria po screenConfig oraz pułapka UIScreen.main, którą ponowny pomiar odtworzył ze znacznikiem 27.1. Nota z 24 września, którą zastępuje ta aktualizacja, zgadywała, że zera brały się z odczytu regionów zbyt wcześnie, i zapowiadała ponowny pomiar przy kilku kątach zawiasu. Zgadywanie było błędne: kompilacja 27.0 nie zwraca żadnych regionów, niezależnie od tego, jak długo pyta. Utrzymuje się obserwacja Molzahna przytoczona w tamtej nocie: poprawnie zlinkowana sonda nie odczytała żadnych regionów przy pierwszych sześciu do dziewięciu ewaluacjach, a potem odczytywała wszystkie. Pomiarów przy różnych kątach zawiasu nie wykonano.1213
Jeśli na podstawie tego wpisu powstała własna sonda, warto ją sprawdzić: otool -l <app>/<binary> | grep -A4 LC_BUILD_VERSION. Projekt zbudowany przez Xcode dostaje poprawny znacznik. Plik kompilowany ręcznie wymaga wyeksportowania SDKROOT na SDK symulatora przed uruchomieniem swiftc. Praktyczny przykład, który to ujawnił, zawiera porównanie trzech wariantów, także ze znacznikiem iOS 26.
Aktualizacja, 26 października: telefon ukazał się z 27.1, a oto numery SDK z wydania finalnego
iPhone Duo trafił do sklepów w piątek 23 października z iOS 27.1, według Apple Newsroom i strony Apple z wydaniami zabezpieczeń, która wymienia „iOS 27.1” wyłącznie dla „iPhone Duo”, bez opublikowanych wpisów CVE; żadna pozycja iOS 27.1 nigdy nie trafiła do kanału wydań, żadna strona informacji o wydaniu 27.1 się nie pojawiła, a indeks wymienia 27 i 27.2. Na tym Macu, z Xcode 27.1 (27A9275), wydaniem finalnym od 15 października, SDK iPhoneOS i iPhoneSimulator przedstawiają się jako iOS 27.1, kompilacja 24A94232, numer niższy niż 24A94403 z bety, odnotowany wyżej, a runtime symulatora iOS 27.1 to 24A94425, który xcrun simctl list runtimes -j wymienia z jednym obsługiwanym typem urządzenia, iPhone Duo; simctl create dla iPhone 16 Pro na tym runtimie kończy się błędem „Incompatible device.” iOS 27.2 ukazał się dziś, 26 października (24B119, z drugą kompilacją iOS 27.2, 24B91020, w tej samej minucie), a uwagi do Xcode 27.2 RC (27B48, 19 października) zawierają cztery wpisy o 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.” (190155353) (w symulatorze iPhone Duo aplikacja korzystająca z CameraCaptureAccessory może używać obu ekranów jednocześnie bez aktywnej sesji przechwytywania z kamery); „When switching between the inner and outer display of the iPhone Duo simulator, modifier keys such as Shift and Command might stop working.” (189465196) (przy przełączaniu między wewnętrznym a zewnętrznym ekranem symulatora iPhone Duo klawisze modyfikujące, takie jak Shift i Command, mogą przestać działać), z obejściem „Click with the mouse on the currently visible screen.” (kliknąć myszą na aktualnie widocznym ekranie); oraz dwa Known Issues przeniesione z bet, teraz oba w sekcji Device Hub: zrzuty ekranu „black for up to a few minutes after booting the device” (czarne przez kilka minut po uruchomieniu urządzenia) (187146039) i narzędzia dostępności, które „cannot convey screen content on an iPhone Duo within Device Hub” (nie potrafią przekazać zawartości ekranu iPhone Duo w Device Hub) (187148389). Wpis Mac Catalyst o „APIs specific to iOS 27.1” się nie zmienił. Jeden wpis UIKit w uwagach do iOS 27.2 wymienia 27.1, zerowe domyślne marginesy układu UIView; sonda zbudowana z jednego źródła i uruchomiona na runtimie 27.1 w symulatorze iPhone Duo zgłasza 8 punktów, gdy jej LC_BUILD_VERSION ma znacznik sdk 27.0 (pułapka ręcznej kompilacji, przed którą ostrzega aktualizacja z 2 października powyżej), a zero, gdy ma znacznik sdk 27.1, więc zmiana zależy zarówno od SDK, z którym zlinkowano plik binarny, jak i od systemu; wpis o informacjach o wydaniu iOS 27.2 zawiera tabelę.16
Co jest w tej becie?
Kanał wydań Apple wymienia „Xcode 27.1 beta (27A9269)” w piątek 18 września o godzinie 10:00 czasu pacyficznego, a tego samego popołudnia „TestFlight Update”; noty wydania App Store Connect z tego dnia mówią „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.” (można już przesyłać aplikacje zbudowane w Xcode 27.1 beta z użyciem SDK iOS 27.1 beta lub iPadOS 27.1 beta do testów wewnętrznych i zewnętrznych).1 Overview not wydania nazywa linię 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 Tę listę warto czytać dosłownie: iOS jest jedyną platformą w wersji 27.1, własny SDKSettings.plist tego SDK raportuje wersję 27.1, a App Store Connect nazywa ten sam SDK „iPadOS 27.1 beta”, co jest niuansem ciągnącym się od wpisu o Xcode 27.
Pobranie jest mniejsze, niż sugeruje numer wersji. Plik xip waży 2 027 292 809 bajtów, jest podpisany przez Apple certyfikatem Software Update i rozpakowuje się do aplikacji o wielkości 3,6 GiB, czyli tyle samo co Xcode 27.0; xip --expand do katalogu, zmiana nazwy na /Applications/Xcode-27.1-beta.app i DEVELOPER_DIR wskazujący na nią to cała instalacja na potrzeby pracy z linii poleceń. Pierwsze wywołanie xcodebuild pod betą zajęło potem jakieś dwie minuty na samodzielną instalację dołączonych pakietów CoreTypes.pkg i XcodeSystemResources.pkg, czyli kroku, który xcodebuild -runFirstLaunch wykonuje jawnie, a drugi z tych pakietów odpowiada za umieszczenie typu urządzenia iPhone Duo na miejscu.4 Czego aplikacja nie zawiera, to runtime symulatora. Beta znajduje runtime’y iOS obecne już na tym Macu, wśród nich 27.0, i żadnego dla 27.1; xcodebuild -downloadPlatform iOS pod betą nazywa brakujący element „iOS 27.1 Simulator (24A94401)” i pobiera go jako obraz dysku cryptex przez usługę mobile assets Apple, podczas gdy obrazy dysków na samej stronie pobierania dla deweloperów kończą się na iOS 18.2 Simulator Runtime.34 Pierwsza próba zakończyła się komunikatem DVTDownloadable: Download Failed oraz Error Domain=DVTDownloadableErrorDomain Code=41 "Download failed."; druga, z -buildVersion 24A94401, podała rozmiar runtime’u jako 7,85 GB, dobiegła końca, a simctl list runtimes wymieniło następnie „iOS 27.1 (27.1 - 24A94401)”. Miejsce na dysku warto zarezerwować zawczasu: runtime jest czterokrotnie większy niż pobranie samego Xcode.3

Ekran zewnętrzny symulatora iPhone Duo przy pierwszym uruchomieniu, 1398 na 2034 piksele: blok stanu biegnie wzdłuż prawej krawędzi, po tej stronie, na której Human Interface Guidelines Apple umieszczają Dynamic Island i pasek stanu w iPhone Duo.10
Jak zdobyć symulator iPhone Duo?
Trzy kroki i żaden z nich nie jest przyciskiem pobierania na stronie internetowej. Apple dostarcza symulator wyłącznie w Xcode, i to tylko w becie 27.1: noty bety 27.2 zawierają wstawkę, która mówi „Download Xcode 27.1 beta to get the iOS SDK and simulator support for iPhone Duo.” (proszę pobrać Xcode 27.1 beta, aby uzyskać SDK iOS i obsługę symulatora dla iPhone Duo).8 (11 października: 5 października wyszedł Xcode 27.1 RC (27A9275), a jego noty wymieniają te same znane problemy iPhone Duo Simulator, więc beta nie jest już jedynym Xcode 27.1, którego noty obejmują symulator Duo; RC nie instalowałem.14) (15 października: Xcode 27.1 ukazał się jako wydanie finalne, kompilacja 27A9275, czyli kompilacja RC, z tymi samymi dwoma znanymi problemami symulatora Duo w notach; nie instalowałem go.15)
- Xcode 27.1 beta (27A9269) z sekcji pobrań dla deweloperów, w feedzie Releases Apple datowana na piątek 18 września. Należy rozpakować xip, przenieść aplikację pod wersjonowaną nazwę, na przykład
/Applications/Xcode-27.1-beta.app, obok Xcode 27.0 i skierować na niąDEVELOPER_DIRdo pracy w wierszu poleceń; beta wymaga macOS Tahoe 26.6 lub nowszego.12 - Runtime iOS 27.1, którego xip nie zawiera. Należy uruchomić
xcodebuild -downloadPlatform iOSzDEVELOPER_DIRustawionym na betę; polecenie pobiera runtime 27.1, dzięki któremu typ urządzeniaiPhone Duoda się uruchomić, a noty Apple ostrzegają, że pierwsze uruchomienie Simulatora „can take several minutes” (może zająć kilka minut), i to niezależnie od samego pobierania. Moja pierwsza próba się nie powiodła, a ponowna zadziałała, więc warto ponowić próbę, zanim zacznie się diagnozować.23 - Device Hub, gdzie znajdują się urządzenie i jego pozy. Należy dodać lub wybrać urządzenie iPhone Duo, uruchomić je i korzystać z przycisków póz: Closed, Book i Open, a także Rotate Right;
simctlnie ma polecenia do póz. Rozmiary i zrzuty ekranu dla poszczególnych póz poniżej pochodzą z tej ścieżki.6
Apple nie oferuje wersji przeglądarkowej. Strona znaleziona pod hasłem „iPhone Duo simulator online” nie uruchamia runtime’u iOS 27.1 od Apple, więc cokolwiek rysuje, nie jest źródłem klas rozmiaru, zarezerwowanych regionów ani zachowania ekranu zewnętrznego zmierzonych tutaj; do sprawdzenia układu bez runtime’u canvas Previews w Xcode zyskał w tej becie grupę Display dla alternatywnego ekranu.2
Czy SDK 27.1 ma API Duo?
17 września przeszukałem SDK iOS 27.0 pod kątem nazw z przewodnika Apple „Preparing your app for iPhone Duo” i nie znalazłem żadnej z dziesięciu specyficznych dla tego urządzenia. To samo przeszukanie SDK 27.1, wykonane tak samo, czyli zwykłym wyszukiwaniem tekstu w interfejsach modułów i nagłówkach, znajduje je wszystkie. Wiersze to szukane podciągi: siedem z nich obejmuje dziewięć z dziesięciu nazw, bo dwie metody reservedRegions dzielą jeden wiersz, podobnie jak dwie składowe axisBehavior, a pozostałe trzy to typy stojące za tymi nazwami: ReservedRegion, ToolbarVerticalBehavior dla toolbarVerticalBehavior(_:) i UIVerticalBarBehavior dla preferredVerticalBarBehavior:4
| Szukany podciąg | Interfejs SwiftUICore | Interfejs SwiftUI | Interfejs UIKit | Nagłówki UIKit |
|---|---|---|---|---|
ArrangementView |
45 | 0 | 19 | 4 pliki |
UIArrangementViewController |
0 | 0 | 19 | 4 pliki |
ReservedRegion |
16 | 0 | 15 | 3 pliki |
reservedRegions |
2 | 0 | 5 | 1 plik |
ToolbarVerticalBehavior |
0 | 5 | 0 | 0 |
UIVerticalBarBehavior |
0 | 0 | 0 | 1 plik |
verticalBarEdge |
0 | 0 | 0 | 1 plik |
toolbarVerticalEdge |
1 | 0 | 0 | 0 |
axisBehavior |
0 | 2 | 0 | 1 plik |
preferredVerticalBarBehavior |
0 | 0 | 0 | 1 plik |
Dwa szczegóły z tej tabeli mają znaczenie przy pisaniu kodu. Typy SwiftUI mieszkają w SwiftUICore, module reeksportowanym przez import SwiftUI, więc zwykły import je znajduje; a atrybuty dostępności nie zgadzają się z dokumentacją co do platform. Interfejs SwiftUICore deklaruje ArrangementView, a interfejs SwiftUI deklaruje toolbarVerticalBehavior(_:), oba pod @available(anyAppleOS 27.1, *), co jest skrótem Apple na wszystkie platformy w danej wersji, podczas gdy UIArrangementViewController.h oraz metody reservedRegionsOfKind: w UIView.h niosą API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)) razem z API_UNAVAILABLE(watchos); w UIVerticalBarEdge.h enum i cecha verticalBarEdge niosą tę samą parę, a przypadki Leading i Trailing niosą API_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos). Strony dokumentacji Apple dla wszystkich pięciu wymieniają wyłącznie iOS 27.1 i iPadOS 27.1, oznaczone jako beta.47 Warto pisać pod iOS i pozwolić kompilatorowi opowiedzieć o reszcie.
Trzy nazwy używane przez przewodnik, które były już w SDK 27.0, pozostają bez zmian: presentationPlacement(_:) nadal siedzi pod @available(anyAppleOS 27.0, *), backgroundExtensionEffect() jest na miejscu od iOS 26, a z dwóch przypadków ToolbarItemPlacement wymienionych w przewodniku topBarPinnedTrailing leży pod @available(iOS 27.0, visionOS 27.0, *), natomiast cancellationAction nie niesie własnej dostępności poza tą, którą ma sam typ.4
Co profil symulatora mówi o dwóch ekranach?
Typ urządzenia, który Apple instaluje wraz z betą, iPhone Duo.simdevicetype, to zwyczajny bundle w katalogu /Library/Developer/CoreSimulator/Profiles/DeviceTypes, a jego dwie property lists odpowiadają na pytania pozostawione otwarte przez specyfikację.5
profile.plist podaje tożsamość: identyfikator modelu iPhone19,4, klasa produktu V68, alias com.apple.CoreSimulator.SimDeviceType.V68, minRuntimeVersion 27.1 oraz regułę tworzenia urządzenia domyślnie dla runtime’ów od 27.1 wzwyż. capabilities.plist podaje sprzęt: numer modelu A3447, HomeButtonType 2, DeviceSupportsDynamicIsland true, DeviceSupportsEnhancedMultitasking false, IsLargeFormatPhone true, CompatibleDeviceFallback ustawiony na iPhone18,3, promień narożnika urządzenia 59 oraz tablicę displays z dwoma wpisami wbudowanymi i trzema wirtualnymi.5
| Ekran w profilu | Piksele | Skala | Punkty | Orientacja natywna | Promienie narożników | Przestrzeń barw |
|---|---|---|---|---|---|---|
primary („LCD”, ekran 1) |
1398 na 2034 | 3 | 466 na 678 | 0 | 8, 59, 8, 59 | P3 |
primary-1 („LCD-1”, ekran 3) |
2007 na 2853 | 3 | 669 na 951 | 270 | 55 we wszystkich czterech | sRGB |
Pierwszy wiersz to ekran zewnętrzny i zgadza się co do piksela ze specyfikacją Apple. Drugi to ekran wewnętrzny, a jego liczba pikseli odpowiada rozmiarowi zrzutu ekranu z App Store Connect, 2007 na 2853, a nie wymiarom panelu 1878 na 2670: symulator renderuje ekran wewnętrzny w 669 na 951 punktów przy skali 3x, czyli dokładnie tak, jak wyliczył to 10 września mój wpis o Duo dla deweloperów, opatrując wyliczenie etykietą wnioskowania. Teraz ten sam numer niesie własny profil Apple. Natywna orientacja 270 stopni mówi, że ekran wewnętrzny jest natywnie poziomy, 951 punktów szerokości na 669 wysokości przy otwartym telefonie, co zgadza się z wymiarami, jakie Apple podaje dla otwartego urządzenia. Dwie pozostałe liczby to wartości symulatora, a nie sprzętu: oba ekrany figurują jako 460 pikseli na cal i 60 Hz, podczas gdy specyfikacja daje panelowi wewnętrznemu 430 ppi, więc hdpi warto traktować jako wypełniacz.5
Profil niesie też kształty. Każdy ekran odwołuje się do maski framebuffera, czyli pliku PDF z obszarem widocznym. Maska ekranu zewnętrznego ma asymetryczne narożniki, wartości z profilu to 8 przy jednej długiej krawędzi i 59 przy drugiej, w moim odczycie mały promień wypada po stronie stykającej się z centralnym zawiasem opisanym w przewodniku projektowym Apple; maska ekranu wewnętrznego to zwykły zaokrąglony prostokąt z wartością narożnika 55 z profilu, bez wycięcia na przednią kamerę, więc przesłonięcie od kamery bierze się z API zarezerwowanych regionów w czasie działania, a nie z kształtu framebuffera.510
Co pokazuje symulator?
Urządzenie startuje zamknięte. Przy pierwszym uruchomieniu ekran zewnętrzny pokazuje ekran początkowy, a framebuffer wewnętrznego jest włączony, lecz czarny; simctl io enumerate wymienia oba wbudowane ekrany pod nazwami z profilu, primary jako 1398 na 2034 i primary-1 jako 2007 na 2853, obok zwykłych wirtualnych.6 Pozy mieszkają w Device Hub. Po zaznaczeniu urządzenia Duo jego okno udostępnia Rotate Right, Closed, Book i Open jako przyciski, które potrafi nacisnąć API dostępności, i tak właśnie sterowana była cała ta sekcja; simctl nie ma polecenia do póz.6
Sonda to jednoplikowa aplikacja SwiftUI: widok kart zawierający stos nawigacji z pięcioma elementami paska narzędzi, odczyt geometrii, klas rozmiaru, wartości środowiskowej toolbarVerticalEdge, zawiasu i zarezerwowanych regionów obu rodzajów z includeInactive, a także ArrangementView w stylu dzielonym. Odczytuje regiony przy każdej ewaluacji swojego body i przelicza się co sekundę. Liczby poniżej pochodzą z ponownego pomiaru z 2 października, ze sondą zlinkowaną z SDK 27.1; wrześniowe pomiary, przez pomyłkę zlinkowane jako 27.0, następują dalej pod osobnym nagłówkiem.13
Zlinkowana z SDK 27.1
Zamknięty. Aplikacja dostaje cały ekran zewnętrzny: jej okno ma 466 na 678 punktów, szerokość compact i wysokość regular. Pasek narzędzi i pasek kart stoją na krawędzi końcowej pod zegarem, toolbarVerticalEdge ma wartość trailing, a cecha verticalBarEdge z UIKit czyta się jako wartość surowa 2. Treść wewnątrz stosu nawigacji mierzy 382 na 562 punkty, z wcięciami obszaru bezpiecznego 82 u góry, 34 u dołu i 84 po stronie końcowej, czyli na listwie. Zgłaszane są dwa regiony przesłonięcia, oba aktywne: jeden o boku 37 punktów w miejscu zewnętrznej kamery i drugi 84 na 170, obejmujący kamerę i kolumnę stanu nad paskami. Na tym ekranie nie jest zgłaszany żaden podział. Obrócony na bok ma 678 na 466, compact w obu klasach rozmiaru, z paskami nadal na krawędzi końcowej.13

Zamknięty, SDK 27.1: cały ekran 466 na 678 punktów, paski wzdłuż krawędzi końcowej.
Otwarty. Aplikacja przechodzi na ekran wewnętrzny w jego natywnej orientacji poziomej: okno 951 na 669 punktów, regularne w obu klasach rozmiaru, paski nadal pionowo na krawędzi końcowej. Treść mierzy 867 na 553 przy tych samych trzech wcięciach. Wracają trzy regiony. Podział szeroki na 40 punktów biegnie przez całą wysokość pośrodku ekranu, od x 455 do 495, z 20-punktowymi marginesami po obu stronach, i jest nieaktywny: telefon leży płasko. Nieaktywne przesłonięcie 58 na 37 oznacza wewnętrzną kamerę, która według wytycznych Apple „stays hidden until the camera is active.” (pozostaje ukryta, dopóki kamera nie jest aktywna).10 Aktywne przesłonięcie 84 na 120 obejmuje kolumnę stanu. Układ dzielony stawia swoje dwa panele obok siebie i dzieli szerokość po równo.13

Otwarty, SDK 27.1: 951 na 669 punktów, zgięcie zgłoszone jako nieaktywny podział przez środek.
Book. Poza Book w Device Hub zgłasza zawias jako częściowo otwarty pod kątem 127 stopni. Okno nie zmienia rozmiaru. Zmienia się podział: ta sama ramka, teraz aktywna. Układ dzielony odpowiada przesunięciem separatora na zgięcie i pozostawieniem pustego pasa szerokiego na 40 punktów, tak że panel podstawowy kończy się przy x 455, a drugorzędny zaczyna przy 495. Arkusz wyświetlony w tej pozie przesuwa się ze środka do połowy początkowej.13

Book, SDK 27.1: podział jest aktywny, a układ dzielony zostawia zgięcie puste.
Obrócony. Rotate Right przy otwartym telefonie daje okno 669 na 951 punktów, nadal regularne w obu klasach rozmiaru, a paski wracają do poziomu: toolbarVerticalEdge jest nil, pasek narzędzi stoi u góry obok zegara, a pasek kart unosi się u dołu. To zgadza się z wytycznymi projektowymi Apple, które na ekranie wewnętrznym w pionie zachowują „standard horizontal bars” (standardowe poziome paski).10 Te same trzy regiony są zgłaszane w obróconym układzie współrzędnych: podział jest teraz poziomym pasem wysokim na 40 punktów biegnącym w poprzek środka, nieaktywnym na płasko i aktywnym w pozie Book. Widok układu w sondzie, który w obrębie tego ekranu jest szerszy niż wyższy, pozostaje obok siebie.13

Otwarty i obrócony, SDK 27.1: poziome paski, zgięcie teraz jako poziomy pas.
Dwie rzeczy utrzymują się w każdej pozie. Regiony przychodzą z opóźnieniem: przy każdym uruchomieniu pierwsze sześć do dziewięciu ewaluacji body sondy nie odczytało żadnego, a każda kolejna odczytała wszystkie, więc widok, który pyta raz, w pierwszym przebiegu układu, dostaje pustą odpowiedź. Fixture DuoProbe autorstwa Svena-Erica Molzahna udokumentował dokładnie to 20 września („reservedRegions is empty on the first geometry evaluation and populated on a later one”, czyli reservedRegions jest puste przy pierwszej ewaluacji geometrii i wypełnione przy późniejszej) razem z 40-punktowym pasem, a przewodnik SwiftLee po symulatorze z 22 września dodaje, że „Holding Option ⌥ reveals a slider that you can use to control the hinge angle of the device with precision” (przytrzymanie klawisza Option ⌥ odsłania suwak, którym można precyzyjnie sterować kątem zawiasu urządzenia); z tego suwaka nie korzystałem.12 A UIScreen.main.bounds odpowiada 466 na 678 punktów, czyli ekranem zewnętrznym, gdy aplikacja stoi na wewnętrznym, i jest to dokładnie ta pułapka, przed którą ostrzega przewodnik Apple, pisząc, że obliczenia układu należy opierać „based on your scene or containing view’s bounds rather than screen dimensions” (na wymiarach własnej sceny albo widoku nadrzędnego, a nie na wymiarach ekranu): ekran główny to nie ekran, na którym się jest. Własny ekran sceny okna zgłasza ten ekran, na którym aplikacja faktycznie się znajduje.713
Jedna droga do pozostałych póz nie działa. simctl io screenConfig potrafi wyłączyć zasilanie ekranu, ale wyłączenie ekranu zewnętrznego przy włączonym wewnętrznym nie otworzyło telefonu; położyło system shell symulatora, simctl launch zawiodło potem z komunikatem „The system shell probably crashed,” (prawdopodobnie system shell się wywrócił) i konieczny był restart. Pozy mieszkają w oknie Device Hub.6
Zlinkowana z SDK 27.0
To liczby, które ta sekcja podawała do 2 października, zmierzone 19 i 20 września sondą ze stosem nawigacji i bez widoku kart, a 2 października zmierzone ponownie obecną sondą. Opisują, co dostaje w tym symulatorze aplikacja zbudowana w Xcode 27.0.613
Po zamknięciu okno ma 386 punktów szerokości na ekranie szerokim na 466 punktów: system zatrzymuje 80-punktową listwę dla siebie, rysuje na niej zegar i stan na czarnym tle, a pasek narzędzi aplikacji leży w poprzek u góry. Po otwarciu okno ma 871 na 669, brakuje tych samych 80 punktów po prawej, a wcięcia obszaru bezpiecznego wynoszą po 34 z każdej strony. Po otwarciu i obróceniu te 80 punktów ubywa zamiast tego u góry. W każdej pozie klasy rozmiaru są takie same jak w kompilacji 27.1, toolbarVerticalEdge jest nil, verticalBarEdge czyta się jako wartość surowa 0, a oba zapytania o zarezerwowane regiony zwracają puste tablice, nawet z regionami nieaktywnymi i niezależnie od tego, jak długo sonda pyta; pozy Book nie da się odróżnić od Open.

Zamknięty, zlinkowana jako 27.0: aplikacja kończy się na listwie, a jej pasek narzędzi pozostaje poziomy.

Otwarty, zlinkowana jako 27.0: regularny w obu wymiarach, listwę zatrzymuje system.

Obrócony, zlinkowana jako 27.0: pas u góry należy do systemu.
Czego ta beta jeszcze nie potrafi
Apple wymienia trzy ograniczenia w sekcji Simulator, Known Issues (znane problemy), we własnych notach bety: „Initial Simulator launch can take several minutes.” (187708500), „StandBy is unavailable in the iPhone Duo Simulator runtime.” (187708663) oraz „Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime.” (187708767).2 To o StandBy ma znaczenie dla każdego, kto ma widżety albo Live Activities pomyślane pod ten tryb: ogłoszenie Apple mówi, że telefon „enters StandBy on either the outer or inner display” (wchodzi w StandBy na ekranie zewnętrznym albo wewnętrznym) i nazywa go „hub for widgets” (centrum widżetów), wpis o Duo dla deweloperów opisuje, co się tam pojawia, a dopóki późniejsza beta nie zdejmie ograniczenia, StandBy na tym urządzeniu trzeba sprawdzać na sprzęcie (15 października: noty wydania finalnego nadal go wymieniają15).11
Dwa kolejne siedzą w sekcji Mac Catalyst, Known Issues, i gryzą każdą aplikację, która przyjmuje te API i buduje się również na Maca: „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)” (projekty używające API specyficznych dla iOS 27.1 pokazują błędy kompilacji przy budowaniu na Mac Catalyst), z obejściem Apple w postaci #if !targetEnvironment(macCatalyst) w Swift albo #if !TARGET_OS_MACCATALYST w Objective-C, oraz „Projects that target iOS 27.1 show no Mac Catalyst run destination available. (187046347)” (projekty celujące w iOS 27.1 nie pokazują żadnego celu uruchomienia Mac Catalyst), gdzie obejściem jest „Add a Mac Catalyst 27.0 minimum deployment in target settings.”2 Noty bety Xcode 27.2 dokładają trzeci problem z przeciwnej strony: „macOS, watchOS, tvOS, and visionOS SDKs in Xcode 27.2 incorrectly report 27.1 as a valid deployment target,” oraz „Mac Catalyst builds with a 27.1 or 27.2 deployment target may be unable to use newly introduced API.” (187160501), czyli te SDK błędnie raportują 27.1 jako prawidłowy deployment target, a kompilacje Mac Catalyst z deployment targetem 27.1 lub 27.2 mogą nie móc użyć świeżo wprowadzonego API.8
Co zrobiłbym w tym tygodniu
- Zainstalować betę obok Xcode 27.0, a nie na nim: rozpakować xip, zmienić nazwę aplikacji i wskazać na nią
DEVELOPER_DIRprzy kompilacjach z linii poleceń; nic w notach bety nie rusza toolchainu 27.0, a kompilator i linker niosą identyczne ciągi wersji.4 - Uruchomić pobieranie runtime’u zanim będzie potrzebny, poleceniem
xcodebuild -downloadPlatform iOSpod betą, i ponowić próbę przy niepowodzeniu; to runtime sprawia, że typ urządzenia iPhone Duo daje się w ogóle uruchomić, a Apple ostrzega, że pierwszy start zajmuje do tego kilka minut.23 - Zbudować projekt raz przeciwko SDK 27.1 z włączonym targetem Mac Catalyst i przeczytać dwie diagnostyki wymienione przez Apple, zanim zapadnie decyzja, czy odgrodzić nowe API przez
#if !targetEnvironment(macCatalyst), czy podnieść minimum Catalyst do 27.0.2 - Traktować liczby z profilu jako rozmiary, na których się podgląda i testuje: 466 na 678 punktów w stanie zamkniętym, 669 na 951 w otwartym, przy natywnie poziomym ekranie wewnętrznym. Nota Previews w tej becie dorzuca grupę Display do selektora nadpisań canvasu „for previewing content on a device’s alternative display.” (182598534), czyli do podglądania treści na alternatywnym ekranie urządzenia.25
- Odczytywać zarezerwowane regiony tam, gdzie zostaną odczytane ponownie: w body widoku przez geometry proxy albo przy każdej zmianie geometrii, nigdy jednorazowo przy pierwszym układzie.
reservedRegions(kind:options:layoutDirectionBehavior:)z.includeInactivenie zwróciło nic przy pierwszych sześciu do dziewięciu ewaluacjach sondy, a przy każdej kolejnej zwracało każdy region, jaki ma ekran (po zamknięciu kamerę i kolumnę stanu; po otwarciu zgięcie, wewnętrzną kamerę i kolumnę stanu), więc wartość zapamiętana z pierwszego przebiegu jest pustą tablicą przez cały czas życia widoku. A zanim cokolwiek z tego uzna się za wiarygodne, należy potwierdzić, że kompilacja ma znacznik SDK 27.1:otool -l <app>/<binary> | grep -A4 LC_BUILD_VERSION.713
Często zadawane pytania
Czy symulator iPhone Duo jest w Xcode 27.1 beta?
Tak. Beta instaluje typ urządzenia iPhone Duo, com.apple.CoreSimulator.SimDeviceType.iPhone-Duo, którego profil wymaga runtime’u iOS 27.1 pobieranego osobno przez xcodebuild -downloadPlatform iOS. Noty Apple ostrzegają, że pierwsze uruchomienie „can take several minutes” (może zająć kilka minut) i że w tym runtimie niedostępne są StandBy oraz większość rozszerzeń aplikacji.235
Skąd wziąć symulator iPhone Duo?
Należy zainstalować Xcode 27.1 beta, pobrać runtime iOS 27.1 poleceniem xcodebuild -downloadPlatform iOS uruchomionym pod betą i wybrać urządzenie iPhone Duo w Device Hub, gdzie pozy są przyciskami. Beta 27.2 go nie zawiera; noty Apple do 27.2 odsyłają do bety 27.1 po „the iOS SDK and simulator support for iPhone Duo.” (SDK iOS i obsługę symulatora dla iPhone Duo).238 (11 października: 5 października wyszedł Xcode 27.1 RC (27A9275), a jego noty wymieniają te same znane problemy iPhone Duo Simulator, więc beta nie jest już jedynym Xcode 27.1, którego noty obejmują symulator Duo; RC nie instalowałem.14) (15 października: Xcode 27.1 ukazał się jako wydanie finalne, kompilacja 27A9275, czyli kompilacja RC, z tymi samymi dwoma znanymi problemami symulatora Duo w notach; nie instalowałem go.15)
Czy istnieje symulator iPhone Duo online?
Nie od Apple. Przed RC symulator był dostarczany wyłącznie w Xcode 27.1 beta i działa na runtimie iOS 27.1 od Apple; strona przeglądarkowa pod tą nazwą rysuje coś innego. Do szybkiego sprawdzenia układu canvas Previews w becie oferuje grupę Display dla alternatywnego ekranu.2 (11 października: 5 października wyszedł Xcode 27.1 RC (27A9275), a jego noty wymieniają te same znane problemy iPhone Duo Simulator, więc beta nie jest już jedynym Xcode 27.1, którego noty obejmują symulator Duo; RC nie instalowałem.14) (15 października: Xcode 27.1 ukazał się jako wydanie finalne, kompilacja 27A9275, czyli kompilacja RC, z tymi samymi dwoma znanymi problemami symulatora Duo w notach; nie instalowałem go.15)
Jak zainstalować Xcode 27.1 beta obok Xcode 27?
Rozpakować xip poleceniem xip --expand, przenieść powstałą aplikację pod nazwę z wersją, na przykład /Applications/Xcode-27.1-beta.app, i ustawić DEVELOPER_DIR na jej katalog Contents/Developer dla xcodebuild, xcrun i swiftc. Beta wymaga macOS Tahoe 26.6 lub nowszego, czyli tego samego progu co Xcode 27.0.24
Jaki rozmiar ma ekran wewnętrzny iPhone Duo w punktach?
669 na 951 punktów, zgodnie z profilem urządzenia w symulatorze, który definiuje ekran wewnętrzny jako 2007 na 2853 piksele przy skali 3 i natywnej orientacji poziomej; ekran zewnętrzny ma 466 na 678 punktów z 1398 na 2034 pikseli przy skali 3.5
Czy Xcode 27.1 beta zmienia SDK iOS 27.0 albo toolchain Xcode 27?
Nie. Kompilator Swift i linker raportują te same ciągi wersji co Xcode 27.0, a noty wydania bety mają trzy sekcje, Mac Catalyst, Previews i Simulator, z których żadna nie dotyka toolchainu. SDK iOS 27.1 jest dodatkiem, identyfikowanym jako kompilacja 24A94403 zarówno w SDK urządzenia, jak i symulatora.24
Kiedy iPhone Duo trafia do sprzedaży i z czym?
23 października, z iOS 27.1, zgodnie z wpisem prasowym Apple z 16 września: „When iPhone Duo becomes available on October 23, it will run iOS 27.1.” (gdy iPhone Duo będzie dostępny 23 października, będzie działał na iOS 27.1).9 (26 października: tak się stało, a iOS 27.1 nie ukazał się na żadnym innym urządzeniu; strona zabezpieczeń Apple wymienia go wyłącznie dla iPhone Duo, a runtime symulatora 27.1 na tym Macu przyjmuje tylko typ urządzenia iPhone Duo.16)
Powiązane na tej stronie: wpis o Duo dla deweloperów zawiera liczby ze specyfikacji i listę API, którą ten wpis zestawia z SDK, wpis o projektowaniu dla iPhone’a Duo czyta wskazówki projektowe Apple, lista kontrolna dla skalowalnego iPhone’a to ta sama praca nad układem, którą zasilają liczby z profilu, zbiorczy wpis o Xcode 27 prowadzi datowane sekcje o kolejnych betach, wpis o błędach kompilacji w Xcode 27 opisuje łańcuch narzędzi, którego ta beta nie rusza, a wpis o informacjach o wydaniu iOS 27 śledzi kompilacje 27.x.
Źródła
-
Apple, Releases, kanał RSS pobrany 19 września 2026 roku: „Xcode 27.1 beta (27A9269)” z datą Fri, 18 Sep 2026 10:00:00 PDT oraz „TestFlight Update” z datą Fri, 18 Sep 2026 14:00:00 PDT. Apple, App Store Connect release notes, 18 września 2026, aktualizacja TestFlight, cytowana w całości. ↩↩↩↩
-
Apple, Xcode 27.1 Beta Release Notes, pobrane przez endpoint JSON dokumentacji 19 września 2026 roku: Overview, cytowane; Mac Catalyst, Known Issues 185924957 i 187046347 wraz z obejściami, cytowane; Previews, New Features 182598534, cytowane; Simulator, Known Issues 187708500, 187708663 i 187708767, cytowane. Noty nie zawierają żadnych innych sekcji. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Pobranie runtime’u wykonane przez autora na macOS 26.6.2 (25G83) 19 września 2026 roku, z
DEVELOPER_DIRustawionym na Xcode 27.1 beta:xcodebuild -downloadPlatform iOSwypisało „iOS is already downloaded.” dla zainstalowanego runtime’u 27.0, a następnie „Downloading iOS 27.1 Simulator (24A94401) (arm64)”, po czymDVTDownloadable: 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)orazError Domain=DVTDownloadableErrorDomain Code=41 "Download failed."; ponowna próba,xcodebuild -downloadPlatform iOS -buildVersion 24A94401, wypisała „Downloading iOS 27.1 Simulator (24A94401) (arm64): 0.0% (66 kB of 7.85 GB)” i zakończyła się powodzeniem, po czymxcrun simctl list runtimeswymieniło „iOS 27.1 (27.1 - 24A94401) - com.apple.CoreSimulator.SimRuntime.iOS-27-1”. Strona pobierania dla deweloperów Apple, przeszukana pod kątem frazy „Simulator Runtime” po zalogowaniu tego samego dnia, wymienia obrazy dysków nie nowsze niż iOS 18.2 Simulator Runtime. ↩↩↩↩↩↩↩ -
Inspekcja
/Applications/Xcode-27.1-beta.appwykonana przez autora 19 września 2026 roku:xcodebuild -versionwypisujeXcode 27.1iBuild version 27A9269;xcrun --sdk iphoneos --show-sdk-versionorazxcrun --sdk iphonesimulator --show-sdk-versionwypisują oba 27.1;SystemVersion.plistw obu SDK niesieProductBuildVersion24A94403 iProductVersion27.1;xcrun swift --versionwypisujeApple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1), axcrun ld -vwypisujeld-27037.1, czyli te same ciągi wersji, które na tym samym Macu wypisuje Xcode 27.0 (27A266a).Xcode_27.1_beta.xipważy 2 027 292 809 bajtów;pkgutil --check-signatureraportuje „signed Apple Software” z łańcuchem certyfikatów Software Update;du -skna rozpakowanej aplikacji raportuje 3 813 336 KB wobec 3 804 188 KB dla Xcode 27.0 (27A266a) rozpakowanego w/Applications/Xcode-27.app. Liczby nazw pochodzą zgrep -cdla danego podciągu w plikachSwiftUICore.swiftmodule/arm64e-apple-ios.swiftinterface,SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterfaceiUIKit.swiftmodule/arm64e-apple-ios.swiftinterfacew SDK iPhoneOS oraz z liczby plików zgrep -rlwUIKit.framework/Headers; atrybuty dostępności odczytane z tych plików:@available(anyAppleOS 27.1, *)nadpublic struct ArrangementView<w interfejsie SwiftUICore i nadextension SwiftUICore.View, które deklarujefunc toolbarVerticalBehaviorw interfejsie SwiftUI,API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1))z następującym po nimAPI_UNAVAILABLE(watchos)wUIArrangementViewController.h, przy obu deklaracjachreservedRegionsOfKind:wUIView.horaz przy enumieUIVerticalBarEdgei ceszeverticalBarEdge, a takżeAPI_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos)przy jego przypadkachUIVerticalBarEdgeLeadingiUIVerticalBarEdgeTrailing;@available(anyAppleOS 27.0, *)nadfunc presentationPlacement;@available(iOS 27.0, visionOS 27.0, *)nadpublic static let topBarPinnedTrailingi brak atrybutu nadpublic static let cancellationAction. Pierwsze uruchomienie: pierwszexcodebuild -versionpodDEVELOPER_DIRbety przekroczyło dwuminutowy limit czasu, a/var/log/install.logodnotowujexcodebuildkolejkujący instalację PackageKit o 16:01:54 dnia 19 września, która wypakowałaCoreTypes.pkgiXcodeSystemResources.pkgzXcode-27.1-beta.app/Contents/Resources/Packagesi zakończyła się o 16:03:04;xcodebuild -checkFirstLaunchStatuszwróciło następnie 0. ↩↩↩↩↩↩↩↩↩↩↩ -
/Library/Developer/CoreSimulator/Profiles/DeviceTypes/iPhone Duo.simdevicetype, zainstalowany przez Xcode 27.1 beta i odczytany poleceniemplutil -convert xml119 września 2026 roku.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 i vdpi 460, refreshRate 60, nativeOrientation 0, cornerRadiusUL 8, UR 59, LL 8, LR 59, colorspace P3) orazprimary-1(displayName LCD-1, screenID 3, width 2007, height 2853, scale 3, hdpi i vdpi 460, refreshRate 60, nativeOrientation 270, wszystkie cztery promienie narożników 55, colorspace sRGB), a do tegoexternal-0(TVOut),wireless0(carPlay) iresizable(scene). Oba pliki PDF wskazane przezframebufferMaskIdentifierwyrenderowano poleceniemqlmanagei obejrzano; dane ze specyfikacji Apple dla paneli znajdują się we wpisie o Duo dla deweloperów.xcrun simctl list devicetypespod betą wymienia „iPhone Duo (com.apple.CoreSimulator.SimDeviceType.iPhone-Duo)”. ↩↩↩↩↩↩↩↩↩ -
Uruchomienia autora na macOS 26.6.2 (25G83), 19 i 20 września 2026 roku. Urządzenie:
simctl create "Duo-27.1" com.apple.CoreSimulator.SimDeviceType.iPhone-Duo com.apple.CoreSimulator.SimRuntime.iOS-27-1, wystartowane przezsimctl bootisimctl bootstatus -b(na tym Macu około minuty);simctl io <udid> enumeratewymienia dwa portycom.apple.framebuffer.displayklasy ekranu 0 o wymiarach 1398 na 2034 i 2007 na 2853 oraz, w sekcji Connected Screens, „LCD-1” z nazwą urządzeniaprimary-1, screen ID 3, rozmiarem w pikselach {2007, 2853}. Sonda: DuoProbe, jednoplikowa aplikacja SwiftUI zbudowana poleceniemxcrun swiftc -sdk <iPhoneSimulator.sdk> -target arm64-apple-ios27.1-simulator -parse-as-librarypod Xcode 27.1 beta, zainstalowana przezsimctl install, uruchomiona przezsimctl launch --console-pty, zrzuty ekranu przezsimctl io <udid> screenshot --mask=alpha --display=primaryi--display=primary-1. Linie konsoli dla pozy zamkniętej: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); żadnej liniidivision[aniocclusion[. Zrzut z--display=primary-1jest czarny. Zasilanie ekranu:simctl io <udid> screenConfig --display=primary power offwypisało „Screen 1 power state set to off”; kolejnesimctl launchzawiodło zFBSOpenApplicationServiceErrorDomainkod 5, „The system shell probably crashed.”;simctl shutdownibootprzywróciły urządzenie. Przebiegi póz 20 września odbyły się w dwóch seriach, obie naciskały Rotate Right, Closed, Book i Open przez API dostępności akcjąAXPressna przyciskach, które Device Hub udostępnia dla zaznaczonego urządzenia, i obie były sterowane narzędziem wiersza poleceńsimctlz bety 27.2 orazDEVELOPER_DIR, który ustawiają tamte skrypty, przeciwko runtime’owi, typowi urządzenia i Device Hubowi z bety 27.1. W pierwszej serii sonda z poprzedniej pozy wciąż działała w chwili naciśnięcia kolejnego przycisku, po czym była zamykana i uruchamiana ponownie, z konsolą nagrywaną przez dwanaście sekund i zrzutami obu ekranów; stamtąd pochodzą powyższe odczyty po obrocie oraz linie przejściowe. W drugiej serii sonda była zamykana po każdym zrzucie, więc w chwili naciśnięcia kolejnego przycisku żadna aplikacja nie była na pierwszym planie; stamtąd pochodzą zrzuty sprzed ponownego uruchomienia. 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)orazDUOPROBE screen=(466.0, 678.0); zrzut z--display=primary-1pokazuje sondę, a--display=primaryjest czarny. Book: te same trzy linie po ponownym uruchomieniu; zrzut ekranu wewnętrznego wykonany po naciśnięciu i przed ponownym uruchomieniem, bez żadnej działającej aplikacji, pokazuje ekran początkowy. Closed: powyższe linie pozy zamkniętej. Po 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)orazuikit bounds=(637.0, 44.0), ze zrzutem ekranu wewnętrznego w pionie. Żaden przebieg nie wypisał liniidivision[aniocclusion[. Zamknięty stan po obrocie pojawił się wyłącznie jako linie przejściowe w trakcie zmiany pozy,DUOPROBE size=610x232 h=compact v=compact ... screen=(678.0, 466.0), i nie jest liczony powyżej. Ta kompilacja miała znaczniksdk 27.0; zob. aktualizację z 2 października i przypis 13. ↩↩↩↩↩↩↩ -
Apple, JSON dokumentacji pobrany 19 września 2026 roku dla ArrangementView, UIArrangementViewController, reservedRegions(kind:options:layoutDirectionBehavior:), reservedRegions(kind:options:) i toolbarVerticalBehavior(_:): dostępność platform na każdej ze stron podaje iOS 27.1 i iPadOS 27.1, oznaczone jako beta. Apple, Preparing your app for iPhone Duo, pobrane tego samego dnia, dla nazw używanych w przewodniku. ↩↩↩↩
-
Apple, Xcode 27.2 Beta Release Notes, pobrane 19 września 2026 roku, SDK, Known Issues, 187160501, cytowane; pobrane ponownie 26 września 2026 roku dla wstawki w Overview, „Download Xcode 27.1 beta to get the iOS SDK and simulator support for iPhone Duo.”, cytowane. ↩↩↩
-
Apple, „Get ready with the latest beta releases”, aktualności, 16 września 2026, „Note about iOS 27.1 and iPhone Duo”, cytowane. ↩
-
Apple, Designing for iPhone Duo, Human Interface Guidelines, pobrane przez endpoint JSON dokumentacji 20 września 2026 roku: „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.” (elementy sterujące z boku obejmują zarówno części systemu, jak i aplikacji: Dynamic Island, pasek stanu, pasek narzędzi wraz z przyciskami nawigacji oraz pasek kart) i „A hinge in the center lets people open and close the device” (zawias pośrodku pozwala otwierać i zamykać urządzenie); pobrane ponownie 2 października 2026 roku, Vertical controls: „The exception is the inner display in portrait, which has enough vertical space to keep standard horizontal bars.” (wyjątkiem jest ekran wewnętrzny w pionie, który ma dość miejsca w pionie, by zachować standardowe poziome paski); Anatomy: „The inner camera is behind the display and stays hidden until the camera is active.” (wewnętrzna kamera znajduje się pod ekranem i pozostaje ukryta, dopóki kamera nie jest aktywna). ↩↩↩↩
-
Apple Newsroom, Apple unveils iPhone Duo, 9 września 2026, pobrane 20 września 2026 roku: „Set iPhone Duo down and it enters StandBy on either the outer or inner display” oraz „hub for widgets”, cytowane z akapitu o StandBy. ↩
-
Sven-Eric Molzahn, iphone-duo-probe, README w serwisie GitHub pobrane 24 września 2026 roku (ostatni commit 20 września 2026 roku): „Two caveats before reaching for it:
reservedRegionsis empty on the first geometry evaluation and populated on a later one” oraz „Half-folded, inner display, content 867 × 575, hinge band at x 455.5…495.5”, cytowane. Antoine van der Lee, iPhone Duo Simulator: Testing and optimizing your SwiftUI app, SwiftLee, 22 września 2026, cytowane. ↩↩↩ -
Ponowny pomiar autora 2 października 2026 roku: macOS 27.0 (26A428), Xcode 27.1 beta (27A9269), runtime iOS 27.1 (24A94401), ten sam symulator
Duo-27.1. Sonda: DuoProbe2, jeden plik Swift,TabView, którego pierwsza karta zawieraNavigationStackz pięcioma elementami paska narzędzi, odczyty opisane w tekście oraz widok UIKit logujący swoje okno, ekran sceny swojego okna,UIScreen.maini cechęverticalBarEdge. Zbudowana dwukrotnie z tego pliku z SDK symulatora 27.1, z poleceniem dla linkera, jaką wersję SDK ma zapisać (-Xlinker -platform_version -Xlinker ios-simulator -Xlinker 27.1 -Xlinker 27.0oraz... 27.1);otool -lwypisałosdk 27.0isdk 27.1. Trzecia kompilacja wykonana po wrześniowemu,swiftc -sdk <iPhoneSimulator27.1.sdk>bez ustawionegoSDKROOT, wypisałaclang: warning: using sysroot for 'macOS 27.0' but targeting 'arm64-apple-ios27.1.0-simulator'i dostała znaczniksdk 27.0; zSDKROOTwyeksportowanym na SDK symulatora to samo polecenie zapisujesdk 27.1. Prawdziwa aplikacja, która ujawniła różnicę, to Kiradex (941 Apps), zbudowana w Xcode 27.1 beta:minos 27.0,sdk 27.1. Linie konsoli, znacznik 27.1, zamknięty: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; zamknięty i obrócony:size=594x350 ... h=compact v=compact verticalEdge=trailing,window=(678.0, 466.0); otwarty: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: to samo zdivision[0] active=trueihinge=partiallyOpen 127 degorazmainScreen=(466.0, 678.0)oboksceneScreen=(951.0, 669.0); otwarty i obrócony: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 i obrócony: to samo zdivision[0] active=true. Ramki są podane we współrzędnych widoku odczytu, którego początek leży 82 lub 134 punkty poniżej górnej krawędzi okna. Znacznik 27.0:window=(386.0, 678.0)po zamknięciu,(871.0, 669.0)po otwarciu i w pozie Book,(669.0, 871.0)po otwarciu i obróceniu,(678.0, 386.0)po zamknięciu i obróceniu, zverticalEdge=nil,verticalBarEdge=0idivisions=0 occlusions=0w każdej linii. PlainProbe, ten sam widok kart, stos nawigacji i pasek narzędzi bez niczego z SDK 27.1, skompilowany w Xcode 27.0 (27A266a) z jego własnym SDK iOS 27.0 (otool:minos 27.0,sdk 27.0):window=(386.0, 678.0)po zamknięciu i(871.0, 669.0)po otwarciu. Przy każdym uruchomieniu ze znacznikiem 27.1 pierwsze sześć do dziewięciu ewaluacji zalogowałodivisions=0 occlusions=0, zanim pojawiły się regiony, w tym trzy, zanim widok miał rozmiar. Przesłonięcie kamery porównano z plikiem PNG ramki „Outer Closed Portrait” od Apple, w którym wycięcie na kamerę obejmuje od 400,3 do 436,3 punktu w poziomie i od 29,7 do 65,7 w pionie przy skali 3x; przesłonięcie obejmuje od 399 do 436 i od 30 do 67 w punktach okna, z odchyleniem najwyżej 1,3 punktu na każdej krawędzi. Położenie paneli zmierzono na zrzutach: panel podstawowy od x 8 do 433,7 i drugorzędny od 433,7 do 859 na płasko; podstawowy do 455,7, pusty pas do 495,7 i drugorzędny do 859 w pozie Book. Arkusz sondy mierzył653x501wyśrodkowany po otwarciu i459x501przy krawędzi początkowej w pozie Book. Z opcją uruchomienia, przy której widok układu sondy wypełnia obszar treści, obrócony ekran pokazał panel podstawowy nad drugorzędnym, a.split.axes(.horizontal)pokazało sam panel podstawowy. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, Releases, kanał RSS pobrany 11 października 2026: „Xcode 27.1 RC (27A9275)” z datą Mon, 05 Oct 2026 10:00:00 PDT. Apple, App Store Connect release notes, pobrane 11 października 2026, wpis z 5 października 2026: „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.” Apple, Xcode 27.1 RC Release Notes, pobrane 11 października 2026, Simulator, Known Issues: „StandBy is unavailable in the iPhone Duo Simulator runtime. (187708663)” i „Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime. (187708767)”, tak jak w notach bety. ↩↩↩↩
-
Apple, Releases, kanał RSS pobrany 15 października 2026 o 17:16 czasu pacyficznego (00:16 UTC, 16 października): „Xcode 27.1 (27A9275)” z datą Thu, 15 Oct 2026 13:00:00 PDT, z tym samym numerem kompilacji co pozycja RC z 5 października z pobrania 11 października, której kanał już nie zawiera. Apple, Xcode 27.1 Release Notes, pobrane przez endpoint JSON dokumentacji 15 października 2026 o 17:21 czasu pacyficznego, z tytułem zmienionym z „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.”; dwa Known Issues iPhone Duo Simulator, 187708663 i 187708767, bez zmian. Apple, App Store Connect release notes, pobrane 15 października 2026 o 17:20 czasu pacyficznego, wpis z datą 15 października 2026, „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.” i „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.” Kanał aktualności Apple dla deweloperów, pobrany w tej samej godzinie, nie zawiera żadnej pozycji o tym wydaniu. ↩↩↩↩↩
-
Apple Newsroom, „iPhone Duo arrives at Apple Store locations worldwide”, 23 października 2026, pobrane 26 października: „On Friday, October 23, the highly anticipated iPhone Duo made its debut at Apple Store locations worldwide.” Apple Support, „Apple security releases”, pobrane 26 października 2026: wiersz „iOS 27.1,” „This update has no published CVE entries.,” „iPhone Duo,” „23 Oct 2026,” bez linku. Apple, Releases, kanał RSS pobrany 26 października 2026 o 16:12 czasu pacyficznego: „iOS 27.2 (24B91020)” i „iOS 27.2 (24B119)” z datą Mon, 26 Oct 2026 10:00:00 PDT; „Xcode 27.2 RC (27B48)” z datą Mon, 19 Oct 2026, najnowsza pozycja Xcode; żaden tytuł pozycji nie wymienia wydania iOS 27.1. Indeks iOS & iPadOS Release Notes, pobrany 26 października, wymienia tylko „iOS & iPadOS 27 Release Notes” i „iOS & iPadOS 27.2 Release Notes”; punkt końcowy JSON strony 27.1 zwrócił 404. Apple, Xcode 27.2 RC Release Notes, pobrane 26 października 2026 (Last-Modified Mon, 19 Oct 2026 04:56:10 GMT): Device Hub, Known Issues (187146039, 187148389, 189465196 z obejściem); Mac Catalyst, Known Issues (185924957); Simulator, Resolved Issues (190155353); cytowane. Apple, iOS & iPadOS 27.2 Release Notes, pobrane 26 października 2026: UIKit, New Features (186294594). Mac autora, 26 października 2026, macOS 27.0 (26A428), Xcode 27.1 (27A9275) w /Applications/Xcode.app:
iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plisti plist SDK iPhoneSimulator podająProductVersion27.1 iProductBuildVersion24A94232;xcrun simctl list runtimeswypisuje „iOS 27.1 (27.1 - 24A94425)”, a-jwymienia jeden wpissupportedDeviceTypes, „iPhone Duo”;xcrun simctl createdlacom.apple.CoreSimulator.SimDeviceType.iPhone-16-Pronacom.apple.CoreSimulator.SimRuntime.iOS-27-1zakończyło się błędem „Incompatible device” (SimError 403); sonda marginesów i jej wyniki są w przypisie 4 wpisu o informacjach o wydaniu iOS 27.2. ↩↩