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 -version wypisuje Xcode 27.1 oraz Build version 27A9269; SDK iPhoneOS i iPhoneSimulator identyfikują się oba jako iOS 27.1, kompilacja 24A94403; kompilator Swift raportuje ten sam ciąg wersji swiftlang-6.4.0.34.1 co Xcode 27.0, a linker ten sam ld-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 ArrangementView i reservedRegions(kind:options:layoutDirectionBehavior:) w SwiftUICore, toolbarVerticalBehavior(_:) w SwiftUI oraz UIArrangementViewController, preferredVerticalBarBehavior i verticalBarEdge w UIKit. SwiftUI oznacza je jako @available(anyAppleOS 27.1, *); nagłówki UIKit oznaczają kontroler układu i metody zarezerwowanych regionów jako API_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 produktu V68, numer modelu A3447) definiuje dwa wbudowane ekrany: primary o wymiarach 1398 na 2034 piksele przy skali 3 oraz primary-1 o 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, toolbarVerticalEdge ró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.bounds wciąż 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, z systemem iOS 27.1 beta: ciemny ekran początkowy z ikoną Ustawień w lewym górnym rogu, zegar i wskaźnik Wi-Fi ułożone pionowo przy prawej krawędzi, kafelek Docka po prawej i przycisk Szukaj w prawym dolnym rogu

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)

  1. 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_DIR do pracy w wierszu poleceń; beta wymaga macOS Tahoe 26.6 lub nowszego.12
  2. Runtime iOS 27.1, którego xip nie zawiera. Należy uruchomić xcodebuild -downloadPlatform iOS z DEVELOPER_DIR ustawionym na betę; polecenie pobiera runtime 27.1, dzięki któremu typ urządzenia iPhone Duo da 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
  3. 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; simctl nie 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

Sonda na ekranie zewnętrznym symulatora iPhone Duo, zlinkowana z SDK 27.1: rozmiar treści 382 na 562 punkty, klasy rozmiaru compact i regular, toolbarVerticalEdge trailing, zawias zamknięty, dwa aktywne przesłonięcia, układ dzielony jeden nad drugim, a przy prawej krawędzi kolumna z zegarem i wskaźnikiem Wi-Fi, czterema przyciskami paska narzędzi i trzema przyciskami kart

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

Sonda na ekranie wewnętrznym w pozie Open, zlinkowana z SDK 27.1: rozmiar treści 867 na 553 punkty, klasy rozmiaru regular i regular, toolbarVerticalEdge trailing, zawias w pełni otwarty pod kątem 180 stopni, jeden nieaktywny podział szeroki na czterdzieści punktów przy x 455, jedno nieaktywne i jedno aktywne przesłonięcie, układ dzielony obok siebie oraz paski w kolumnie przy prawej krawędzi

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

Sonda na ekranie wewnętrznym w pozie Book, zlinkowana z SDK 27.1: zawias częściowo otwarty pod kątem 127 stopni, jeden aktywny podział oraz dwa panele układu dzielonego rozdzielone pustym pasem pośrodku ekranu

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

Sonda na ekranie wewnętrznym obróconym do pionu, zlinkowana z SDK 27.1: rozmiar treści 669 na 734 punkty, klasy rozmiaru regular i regular, toolbarVerticalEdge nil, poziomy pasek narzędzi u góry obok zegara, unoszący się pasek kart u dołu, jeden nieaktywny podział i dwa przesłonięcia

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.

Wrześniowa sonda na ekranie zewnętrznym symulatora iPhone Duo, zlinkowana jako SDK 27.0: pasek narzędzi w prawym górnym rogu z ikoną udostępniania, wielokropkiem dodatkowych opcji i znakiem zaznaczenia, wartości rozmiar 386 na 510 punktów, klasy rozmiaru compact i regular, toolbarVerticalEdge nil, divisions 0 i occlusions 0, układ dzielony z widokiem podstawowym nad widokiem drugorzędnym oraz zegar i wskaźnik Wi-Fi ułożone na czarnej listwie przy prawej krawędzi

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

Wrześniowa sonda na ekranie wewnętrznym w pozie Open, zlinkowana jako SDK 27.0: rozmiar 803 na 515 punktów, klasy rozmiaru regular i regular, toolbarVerticalEdge nil, divisions 0 i occlusions 0, układ dzielony z widokiem podstawowym i drugorzędnym obok siebie, pasek narzędzi w prawym górnym rogu oraz zegar i wskaźnik Wi-Fi w czarnej listwie przy prawej krawędzi

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

Wrześniowa sonda na ekranie wewnętrznym obróconym do pionu, zlinkowana jako SDK 27.0: rozmiar 669 na 703 punkty, klasy rozmiaru regular i regular, układ dzielony obok siebie oraz zegar i wskaźnik Wi-Fi w czarnym pasie przez całą górę

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

  1. Zainstalować betę obok Xcode 27.0, a nie na nim: rozpakować xip, zmienić nazwę aplikacji i wskazać na nią DEVELOPER_DIR przy kompilacjach z linii poleceń; nic w notach bety nie rusza toolchainu 27.0, a kompilator i linker niosą identyczne ciągi wersji.4
  2. Uruchomić pobieranie runtime’u zanim będzie potrzebny, poleceniem xcodebuild -downloadPlatform iOS pod 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
  3. 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
  4. 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
  5. 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 .includeInactive nie 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


  1. 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. ↩↩↩↩

  2. 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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  3. Pobranie runtime’u wykonane przez autora na macOS 26.6.2 (25G83) 19 września 2026 roku, z DEVELOPER_DIR ustawionym na Xcode 27.1 beta: xcodebuild -downloadPlatform iOS wypisało „iOS is already downloaded.” dla zainstalowanego runtime’u 27.0, a następnie „Downloading iOS 27.1 Simulator (24A94401) (arm64)”, po czym 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) oraz Error 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 czym xcrun simctl list runtimes wymienił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. ↩↩↩↩↩↩↩

  4. Inspekcja /Applications/Xcode-27.1-beta.app wykonana przez autora 19 września 2026 roku: xcodebuild -version wypisuje Xcode 27.1 i Build version 27A9269; xcrun --sdk iphoneos --show-sdk-version oraz xcrun --sdk iphonesimulator --show-sdk-version wypisują oba 27.1; SystemVersion.plist w obu SDK niesie ProductBuildVersion 24A94403 i ProductVersion 27.1; xcrun swift --version wypisuje Apple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1), a xcrun ld -v wypisuje ld-27037.1, czyli te same ciągi wersji, które na tym samym Macu wypisuje Xcode 27.0 (27A266a). Xcode_27.1_beta.xip waży 2 027 292 809 bajtów; pkgutil --check-signature raportuje „signed Apple Software” z łańcuchem certyfikatów Software Update; du -sk na 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ą z grep -c dla danego podciągu w plikach SwiftUICore.swiftmodule/arm64e-apple-ios.swiftinterface, SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterface i UIKit.swiftmodule/arm64e-apple-ios.swiftinterface w SDK iPhoneOS oraz z liczby plików z grep -rl w UIKit.framework/Headers; atrybuty dostępności odczytane z tych plików: @available(anyAppleOS 27.1, *) nad public struct ArrangementView< w interfejsie SwiftUICore i nad extension SwiftUICore.View, które deklaruje func toolbarVerticalBehavior w interfejsie SwiftUI, API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)) z następującym po nim API_UNAVAILABLE(watchos) w UIArrangementViewController.h, przy obu deklaracjach reservedRegionsOfKind: w UIView.h oraz przy enumie UIVerticalBarEdge i cesze verticalBarEdge, a także API_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos) przy jego przypadkach UIVerticalBarEdgeLeading i UIVerticalBarEdgeTrailing; @available(anyAppleOS 27.0, *) nad func presentationPlacement; @available(iOS 27.0, visionOS 27.0, *) nad public static let topBarPinnedTrailing i brak atrybutu nad public static let cancellationAction. Pierwsze uruchomienie: pierwsze xcodebuild -version pod DEVELOPER_DIR bety przekroczyło dwuminutowy limit czasu, a /var/log/install.log odnotowuje xcodebuild kolejkujący instalację PackageKit o 16:01:54 dnia 19 września, która wypakowała CoreTypes.pkg i XcodeSystemResources.pkg z Xcode-27.1-beta.app/Contents/Resources/Packages i zakończyła się o 16:03:04; xcodebuild -checkFirstLaunchStatus zwróciło następnie 0. ↩↩↩↩↩↩↩↩↩↩↩

  5. /Library/Developer/CoreSimulator/Profiles/DeviceTypes/iPhone Duo.simdevicetype, zainstalowany przez Xcode 27.1 beta i odczytany poleceniem plutil -convert xml1 19 września 2026 roku. profile.plist: modelIdentifier iPhone19,4, productClass V68, aliases com.apple.CoreSimulator.SimDeviceType.V68, minRuntimeVersion 27.1, createByDefaultForRuntimeVersions versionMin 27.1. capabilities.plist: ModelNumber A3447, ThinningProductType iPhone19,4, CompatibleDeviceFallback iPhone18,3, DeviceCornerRadius 59, HomeButtonType 2, DeviceSupportsDynamicIsland true, DeviceSupportsEnhancedMultitasking false, IsLargeFormatPhone true; 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 i vdpi 460, refreshRate 60, nativeOrientation 0, cornerRadiusUL 8, UR 59, LL 8, LR 59, colorspace P3) oraz primary-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 tego external-0 (TVOut), wireless0 (carPlay) i resizable (scene). Oba pliki PDF wskazane przez framebufferMaskIdentifier wyrenderowano poleceniem qlmanage i obejrzano; dane ze specyfikacji Apple dla paneli znajdują się we wpisie o Duo dla deweloperów. xcrun simctl list devicetypes pod betą wymienia „iPhone Duo (com.apple.CoreSimulator.SimDeviceType.iPhone-Duo)”. ↩↩↩↩↩↩↩↩↩

  6. 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 przez simctl boot i simctl bootstatus -b (na tym Macu około minuty); simctl io <udid> enumerate wymienia dwa porty com.apple.framebuffer.display klasy ekranu 0 o wymiarach 1398 na 2034 i 2007 na 2853 oraz, w sekcji Connected Screens, „LCD-1” z nazwą urządzenia primary-1, screen ID 3, rozmiarem w pikselach {2007, 2853}. Sonda: DuoProbe, jednoplikowa aplikacja SwiftUI zbudowana poleceniem xcrun swiftc -sdk <iPhoneSimulator.sdk> -target arm64-apple-ios27.1-simulator -parse-as-library pod Xcode 27.1 beta, zainstalowana przez simctl install, uruchomiona przez simctl launch --console-pty, zrzuty ekranu przez simctl io <udid> screenshot --mask=alpha --display=primary i --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 linii division[ ani occlusion[. Zrzut z --display=primary-1 jest czarny. Zasilanie ekranu: simctl io <udid> screenConfig --display=primary power off wypisało „Screen 1 power state set to off”; kolejne simctl launch zawiodło z FBSOpenApplicationServiceErrorDomain kod 5, „The system shell probably crashed.”; simctl shutdown i boot przywró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ą AXPress na przyciskach, które Device Hub udostępnia dla zaznaczonego urządzenia, i obie były sterowane narzędziem wiersza poleceń simctl z bety 27.2 oraz DEVELOPER_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) oraz DUOPROBE screen=(466.0, 678.0); zrzut z --display=primary-1 pokazuje sondę, a --display=primary jest 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) oraz uikit bounds=(637.0, 44.0), ze zrzutem ekranu wewnętrznego w pionie. Żaden przebieg nie wypisał linii division[ ani occlusion[. 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 znacznik sdk 27.0; zob. aktualizację z 2 października i przypis 13. ↩↩↩↩↩↩↩

  7. 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. ↩↩↩↩

  8. 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. ↩↩↩

  9. Apple, „Get ready with the latest beta releases”, aktualności, 16 września 2026, „Note about iOS 27.1 and iPhone Duo”, cytowane. ↩

  10. 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). ↩↩↩↩

  11. 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. ↩

  12. 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: reservedRegions is 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. ↩↩↩

  13. 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 zawiera NavigationStack z pięcioma elementami paska narzędzi, odczyty opisane w tekście oraz widok UIKit logujący swoje okno, ekran sceny swojego okna, UIScreen.main i 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.0 oraz ... 27.1); otool -l wypisało sdk 27.0 i sdk 27.1. Trzecia kompilacja wykonana po wrześniowemu, swiftc -sdk <iPhoneSimulator27.1.sdk> bez ustawionego SDKROOT, wypisała clang: warning: using sysroot for 'macOS 27.0' but targeting 'arm64-apple-ios27.1.0-simulator' i dostała znacznik sdk 27.0; z SDKROOT wyeksportowanym na SDK symulatora to samo polecenie zapisuje sdk 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 z division[0] active=true i hinge=partiallyOpen 127 deg oraz mainScreen=(466.0, 678.0) obok sceneScreen=(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 z division[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, z verticalEdge=nil, verticalBarEdge=0 i divisions=0 occlusions=0 w 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ło divisions=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ł 653x501 wyśrodkowany po otwarciu i 459x501 przy 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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  14. 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. ↩↩↩↩

  15. 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. ↩↩↩↩↩

  16. 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.plist i plist SDK iPhoneSimulator podają ProductVersion 27.1 i ProductBuildVersion 24A94232; xcrun simctl list runtimes wypisuje „iOS 27.1 (27.1 - 24A94425)”, a -j wymienia jeden wpis supportedDeviceTypes, „iPhone Duo”; xcrun simctl create dla com.apple.CoreSimulator.SimDeviceType.iPhone-16-Pro na com.apple.CoreSimulator.SimRuntime.iOS-27-1 zakoń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. ↩↩

Powiązane artykuły

Przygotowanie aplikacji na iPhone Duo: przykład krok po kroku

Jak przygotować i wysłać aplikację na iPhone Duo: znacznik SDK, który włącza nowy układ, prawdziwa aplikacja w każdej po…

58 min czytania

Uwagi do iOS 27.2: co weszło i gdzie podziało się 27.1

iOS 27.2 (24B119) ukazał się 26 października: 2 nowe funkcje, 5 poprawek, 7 znanych problemów, 162 CVE i iOS 27.1, który…

30 min czytania

Budynki w pixel art: domy, hale i wnętrza na iPhonie

Jak Pokémon, RPG ze SNES-a i Stardew budują domy, wnętrza i piętra, zmierzone w kodzie źródłowym, i jak miasteczko Kirad…

60 min czytania