Xcode 27.1 beta : votre app dans le simulateur iPhone Duo
Xcode 27.1 beta (27A9269) est sorti le vendredi 18 septembre 2026 avec le premier SDK iOS 27.1 et un type d’appareil iPhone Duo pour le simulateur, quatre jours après Xcode 27.0. Le SDK embarque toutes les API iPhone Duo que nomme le guide de préparation d’Apple, le profil du type d’appareil définit les deux écrans à 1398 par 2034 et 2007 par 2853 pixels en 3x, soit 466 par 678 et 669 par 951 points, et le runtime du simulateur se télécharge à part, à la demande de Xcode. Les notes d’Apple listent trois choses que le simulateur ne sait pas encore faire, et une app sonde passée par les trois positions de Device Hub atterrit fermée sur un écran de 466 par 678 points et ouverte sur un écran de 951 par 669, regular dans les deux classes de taille, ne signale de régions réservées dans aucune position, et laisse UIScreen.main répondre pour l’écran externe alors que l’app tourne sur l’écran interne.12456
{.answer-block}
L’essentiel
- Dates et builds. Le flux Releases d’Apple date Xcode 27.1 beta (27A9269) du vendredi 18 septembre.
xcodebuild -versionafficheXcode 27.1etBuild version 27A9269; les SDK iPhoneOS et iPhoneSimulator s’identifient tous deux comme iOS 27.1, build 24A94403 ; le compilateur Swift annonce la même chaîne de versionswiftlang-6.4.0.34.1que Xcode 27.0, et l’éditeur de liens le mêmeld-27037.1. Le xip pèse 2 027 292 809 octets, l’app décompressée 3,6 GiB, et elle s’installe à côté de Xcode 27.0 sans le remplacer.14 - Les API Duo sont dans le SDK. Les dix noms que ma vérification du 17 septembre n’avait pas trouvés dans le SDK 27.0 sont tous présents dans le SDK 27.1, parmi eux
ArrangementViewetreservedRegions(kind:options:layoutDirectionBehavior:)dans SwiftUICore,toolbarVerticalBehavior(_:)dans SwiftUI, ainsi queUIArrangementViewController,preferredVerticalBarBehavioretverticalBarEdgedans UIKit. SwiftUI les marque@available(anyAppleOS 27.1, *); les en-têtes d’UIKit marquent le contrôleur d’arrangement et les méthodes de régions réservéesAPI_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)), soit deux plateformes de plus que ce que listent les pages de documentation.4 - Le profil du simulateur fixe la taille des écrans. Le type d’appareil iPhone Duo (
iPhone19,4, classe de produitV68, numéro de modèle A3447) définit deux écrans intégrés :primaryà 1398 par 2034 pixels, scale 3, etprimary-1à 2007 par 2853 pixels, scale 3, avec une orientation native de 270. Divisés par trois, cela donne 466 par 678 et 669 par 951 points, la valeur interne étant précisément le nombre que mon billet Duo pour les développeurs avait déduit le 10 septembre de la taille des captures d’écran d’App Store Connect. Le profil exige le runtime 27.1 ou plus récent.5 - Ce que le simulateur fait d’une vraie app. Device Hub expose trois positions, Closed (fermé), Book (en livre) et Open (ouvert), plus Rotate Right (pivoter à droite). Fermée, l’app sonde obtient l’écran externe : 466 par 678 points, compact en largeur, l’arrangement scindé empilé. Ouverte, elle obtient l’écran interne : 951 par 669 points en paysage natif, regular dans les deux classes de taille, des marges de zone sûre de 34 de chaque côté, l’arrangement scindé côte à côte ; pivotée, 669 de large sur 951 de haut, et toujours regular des deux côtés. Book a donné à l’app la même géométrie qu’Open. Dans chaque position,
reservedRegionsn’a rien renvoyé, même en incluant les régions inactives,toolbarVerticalEdgeest resté nil, la barre d’outils s’est dessinée horizontalement, etUIScreen.main.boundsa continué d’annoncer 466 par 678 alors que l’app était sur l’écran interne.6 - Ce que la bêta ne sait pas encore faire. Les notes d’Apple posent trois limites, le long premier lancement, l’absence de StandBy et la plupart des extensions d’app : « Initial Simulator launch can take several minutes. » (187708500), « StandBy is unavailable in the iPhone Duo Simulator runtime. » (187708663) et « Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime. » (187708767). Ajoutez-y deux Known Issues sur Mac Catalyst pour quiconque livre aussi son app sur le Mac, et une chose qu’Apple ne liste pas : le téléchargement du runtime a échoué chez moi au premier essai avec
Download failed.et n’a réussi qu’à la reprise.23
Que contient la bêta ?
Le flux Releases d’Apple liste « Xcode 27.1 beta (27A9269) » le vendredi 18 septembre à 10 h 00 PT, et un « TestFlight Update » le même après-midi ; les notes de version d’App Store Connect pour cette journée indiquent qu’il est désormais possible d’envoyer en test interne et externe des apps compilées avec Xcode 27.1 beta et le SDK pour iOS 27.1 beta ou iPadOS 27.1 beta : « You can now submit apps built with Xcode 27.1 beta using the SDK for iOS 27.1 beta or iPadOS 27.1 beta for internal and external testing. »1 La section Overview des notes de version nomme la série de 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 Lisez cette liste telle qu’elle est écrite : iOS est la seule plateforme en 27.1, le SDKSettings.plist du SDK annonce lui-même la version 27.1, et App Store Connect appelle ce même SDK « iPadOS 27.1 beta », une bizarrerie que traîne aussi le billet sur Xcode 27.
Le téléchargement est plus léger que le numéro de version ne le laisse croire. Le xip pèse 2 027 292 809 octets, signé par Apple sous son certificat Software Update, et se décompresse en une app de 3,6 GiB, la même taille que Xcode 27.0 ; xip --expand dans un dossier, un renommage en /Applications/Xcode-27.1-beta.app et un DEVELOPER_DIR qui pointe dessus, voilà toute l’installation pour travailler en ligne de commande. Le premier appel à xcodebuild sous la bêta a ensuite passé environ deux minutes à installer de lui-même les paquets embarqués CoreTypes.pkg et XcodeSystemResources.pkg, l’étape que xcodebuild -runFirstLaunch exécute explicitement, et c’est le second de ces paquets qui met en place le type d’appareil iPhone Duo.4 Ce que l’app ne contient pas, c’est un runtime de simulateur. La bêta trouve les runtimes iOS déjà présents sur ce Mac, dont 27.0, et aucun pour 27.1 ; sous la bêta, xcodebuild -downloadPlatform iOS nomme la pièce manquante « iOS 27.1 Simulator (24A94401) » et la récupère sous forme d’image disque cryptex via le service mobile-asset d’Apple, alors que les images disque de la page de téléchargement pour développeurs s’arrêtent au iOS 18.2 Simulator Runtime.34 Le premier essai s’est terminé par DVTDownloadable: Download Failed avec Error Domain=DVTDownloadableErrorDomain Code=41 "Download failed." ; le second, avec -buildVersion 24A94401, a annoncé le runtime à 7,85 GB, est allé au bout, et simctl list runtimes a alors listé « iOS 27.1 (27.1 - 24A94401) ». Prévoyez l’espace disque en conséquence : le runtime pèse quatre fois le téléchargement de Xcode.3

L’écran externe du simulateur iPhone Duo au premier démarrage, 1398 par 2034 pixels : les indicateurs d’état descendent le long du bord droit, le côté où les Human Interface Guidelines d’Apple placent la Dynamic Island et la barre d’état sur l’iPhone Duo.10
Le SDK 27.1 contient-il les API Duo ?
Le 17 septembre, j’ai cherché dans le SDK iOS 27.0 les noms employés par le guide « Preparing your app for iPhone Duo » d’Apple et je n’ai trouvé aucun des dix noms propres à l’appareil. La même recherche menée de la même manière contre le SDK 27.1, une simple recherche de texte dans les interfaces de module et les en-têtes, les trouve tous. Les lignes sont les sous-chaînes recherchées : sept d’entre elles portent neuf des dix noms, les deux méthodes reservedRegions et les deux membres axisBehavior se partageant chacun une ligne, et les trois autres sont les types derrière ces noms, soit ReservedRegion, ToolbarVerticalBehavior pour toolbarVerticalBehavior(_:) et UIVerticalBarBehavior pour preferredVerticalBarBehavior :4
| Sous-chaîne recherchée | Interface SwiftUICore | Interface SwiftUI | Interface UIKit | En-têtes UIKit |
|---|---|---|---|---|
ArrangementView |
45 | 0 | 19 | 4 fichiers |
UIArrangementViewController |
0 | 0 | 19 | 4 fichiers |
ReservedRegion |
16 | 0 | 15 | 3 fichiers |
reservedRegions |
2 | 0 | 5 | 1 fichier |
ToolbarVerticalBehavior |
0 | 5 | 0 | 0 |
UIVerticalBarBehavior |
0 | 0 | 0 | 1 fichier |
verticalBarEdge |
0 | 0 | 0 | 1 fichier |
toolbarVerticalEdge |
1 | 0 | 0 | 0 |
axisBehavior |
0 | 2 | 0 | 1 fichier |
preferredVerticalBarBehavior |
0 | 0 | 0 | 1 fichier |
Deux détails de ce tableau comptent pour la façon d’écrire le code. Les types SwiftUI vivent dans SwiftUICore, le module que import SwiftUI réexporte, un import ordinaire les trouve donc ; et les attributs de disponibilité contredisent la documentation sur les plateformes. L’interface SwiftUICore déclare ArrangementView, l’interface SwiftUI déclare toolbarVerticalBehavior(_:), toutes deux sous @available(anyAppleOS 27.1, *), le raccourci d’Apple pour toutes les plateformes à cette version, tandis que UIArrangementViewController.h et les méthodes reservedRegionsOfKind: dans UIView.h portent API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)) avec API_UNAVAILABLE(watchos) ; dans UIVerticalBarEdge.h, l’énumération et le trait verticalBarEdge portent la même paire, alors que les cas Leading et Trailing portent API_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos). Les pages de documentation d’Apple pour ces cinq entrées ne listent qu’iOS 27.1 et iPadOS 27.1, marqués bêta.47 Écrivez pour iOS et laissez le compilateur vous dire le reste.
Les trois noms employés par le guide qui étaient déjà dans le SDK 27.0 n’ont pas bougé : presentationPlacement(_:) se trouve toujours sous @available(anyAppleOS 27.0, *), backgroundExtensionEffect() est là depuis iOS 26, et des deux cas de ToolbarItemPlacement que nomme le guide, topBarPinnedTrailing se trouve sous @available(iOS 27.0, visionOS 27.0, *) tandis que cancellationAction ne porte aucune disponibilité propre au-delà de celle du type.4
Que dit le profil du simulateur sur les deux écrans ?
Le type d’appareil qu’Apple installe pour la bêta, iPhone Duo.simdevicetype, est un simple bundle placé sous /Library/Developer/CoreSimulator/Profiles/DeviceTypes, et ses deux listes de propriétés répondent à des questions que la fiche technique laissait ouvertes.5
profile.plist donne l’identité : identifiant de modèle iPhone19,4, classe de produit V68, un alias com.apple.CoreSimulator.SimDeviceType.V68, minRuntimeVersion 27.1, et une règle de création par défaut de l’appareil pour les runtimes à partir de 27.1. capabilities.plist donne le matériel : numéro de modèle A3447, HomeButtonType 2, DeviceSupportsDynamicIsland true, DeviceSupportsEnhancedMultitasking false, IsLargeFormatPhone true, un CompatibleDeviceFallback valant iPhone18,3, un rayon de coin d’appareil de 59, et un tableau displays avec deux entrées intégrées et trois virtuelles.5
| Écran dans le profil | Pixels | Scale | Points | Orientation native | Rayons des coins | Espace colorimétrique |
|---|---|---|---|---|---|---|
primary (« LCD », écran 1) |
1398 par 2034 | 3 | 466 par 678 | 0 | 8, 59, 8, 59 | P3 |
primary-1 (« LCD-1 », écran 3) |
2007 par 2853 | 3 | 669 par 951 | 270 | 55 sur les quatre | sRGB |
La première ligne est l’écran externe et correspond pixel pour pixel à la fiche technique d’Apple. La seconde est l’écran interne, et son nombre de pixels est celui des captures d’écran d’App Store Connect, 2007 par 2853, plutôt que les 1878 par 2670 de la dalle : le simulateur rend l’écran interne à 669 par 951 points en 3x, soit exactement le calcul que mon billet Duo pour les développeurs avait posé le 10 septembre en le qualifiant de déduction. Le profil d’Apple porte désormais ce nombre. L’orientation native à 270 degrés dit que l’écran interne est nativement en paysage, 951 points de large sur 669 de haut quand le téléphone est ouvert, ce qui concorde avec les dimensions qu’Apple donne pour l’appareil ouvert. Les deux nombres restants sont des valeurs de simulateur et non de matériel : les deux écrans sont listés à 460 pixels par pouce et 60 Hz, alors que la fiche technique donne 430 ppp à la dalle interne, il faut donc traiter hdpi comme un espace réservé.5
Le profil livre aussi les formes. Chaque écran référence un masque de framebuffer, un PDF de la zone visible. Le masque de l’écran externe a des coins asymétriques, les valeurs du profil donnant 8 sur un grand côté et 59 sur l’autre, et selon ma lecture le petit rayon se trouve du côté qui rejoint la charnière centrale que décrit le guide de design d’Apple ; le masque de l’écran interne est un simple rectangle arrondi, avec la valeur de coin 55 du profil et sans découpe pour la caméra frontale, l’occultation de la caméra vient donc de l’API de régions réservées à l’exécution, et non de la forme du framebuffer.510
Que montre le simulateur ?
L’appareil démarre fermé. Au premier démarrage, l’écran externe affiche l’écran d’accueil et le framebuffer de l’écran interne est allumé mais noir, et simctl io enumerate liste les deux écrans intégrés sous les noms du profil, primary à 1398 par 2034 et primary-1 à 2007 par 2853, à côté des écrans virtuels habituels.6 J’ai installé une app sonde SwiftUI tenant dans un seul fichier, qui lit la géométrie, les classes de taille, la valeur d’environnement toolbarVerticalEdge et les régions réservées des deux sortes avec includeInactive, enveloppe une ArrangementView dans chacun des trois styles et place six éléments dans une barre d’outils de navigation.6

L’app sonde sur l’écran externe, position Closed : 466 par 678 points, compact en largeur, l’arrangement scindé empilé, la barre d’outils horizontale.
Fermée, l’app sonde annonce ce qu’annonce un iPhone compact. UIScreen.main.bounds vaut 466 par 678 points en scale 3, les classes de taille sont compact en largeur et regular en hauteur, toolbarVerticalEdge est nil, le trait verticalBarEdge d’UIKit se lit comme la valeur brute 0, et les deux requêtes de régions réservées renvoient des tableaux vides, même en incluant les régions inactives, la position fermée n’expose donc à l’app ni pliure ni caméra. Le GeometryReader placé dans la pile de navigation a mesuré 386 par 510 points, avec des marges de zone sûre de 134 en haut et 34 en bas, et aucune sur les côtés ; selon ma lecture, les 80 points de largeur que le système a gardés sont le bandeau de droite où logent les indicateurs d’état. L’arrangement scindé a placé la vue primaire au-dessus de la secondaire, le cas plus haut que large que décrit le guide d’Apple, et la barre d’outils s’est dessinée horizontalement en haut, avec Partager et le bouton Terminé en forme de coche à côté du bouton des actions supplémentaires, les quatre actions secondaires étant absentes de la barre et, vu leur placement, rangées dans son menu.67
C’est dans Device Hub que vivent les positions. L’appareil Duo sélectionné, sa fenêtre expose Rotate Right, Closed, Book et Open sous forme de boutons que l’API d’accessibilité peut presser, et c’est ainsi qu’a été mené le reste de cette section.6
Open fait passer l’app sur l’écran interne, dans son orientation paysage native. L’app sonde annonce regular en largeur et regular en hauteur, le GeometryReader mesure 803 par 515 points avec des marges de zone sûre de 134 en haut, 34 de chaque côté et 20 en bas, et il manque à la largeur les mêmes 80 points qu’en position fermée, selon ma lecture le bandeau à nouveau, cette fois à droite d’un écran large de 951 points, avec les indicateurs d’état dedans. L’arrangement scindé place la vue primaire et la vue secondaire côte à côte, le cas plus large que haut du guide d’Apple, et la barre d’outils se dessine horizontalement en haut à droite, là encore Partager et Terminé à côté du bouton des actions supplémentaires, les quatre actions secondaires restant absentes de la barre.6

Position Open, écran interne, 2853 par 2007 pixels : regular dans les deux dimensions, l’arrangement scindé côte à côte, le bandeau à droite.
Rotate Right fait passer l’écran interne en portrait. L’app sonde mesure alors 669 par 703 points, regular dans les deux dimensions, avec des marges de 134 en haut et 34 en bas et aucune sur les côtés ; selon ma lecture, le bandeau de 80 points a migré vers le bord supérieur, où les indicateurs d’état logent maintenant dans une bande noire, et l’arrangement scindé reste côte à côte alors même que le conteneur est désormais plus haut que large.6

L’écran interne pivoté : 669 points de large, toujours regular des deux côtés, le bandeau en haut.
Book, la position partiellement pliée, est là où l’API de régions réservées devrait justifier son existence, et dans cette bêta elle ne l’a pas fait pour mon app sonde. Sans app au premier plan, l’écran interne affichait l’écran d’accueil après l’appui sur Book ; relancée, l’app sonde a annoncé exactement ce qu’elle annonçait en Open, 803 par 515 points, regular dans les deux dimensions, et zéro division et zéro occlusion en incluant les régions inactives, en SwiftUI comme en UIKit. La position fermée annonce zéro elle aussi. Je n’ai pas trouvé de position où reservedRegions renvoie une pliure ou une caméra, une mise en page qui s’adapte à la pliure est donc quelque chose que le simulateur de cette bêta ne m’a pas laissé voir ; le guide d’Apple décrit la division comme active « when iPhone Duo is partially open » (quand l’iPhone Duo est partiellement ouvert), et savoir si c’est un manque de la bêta ou un manque de ma sonde est une question pour la prochaine bêta.67
Deux autres constats ont tenu dans toutes les positions. La barre d’outils ne s’est jamais dessinée verticalement : toolbarVerticalEdge valait nil en SwiftUI et verticalBarEdge se lisait comme la valeur brute 0 en UIKit, fermé, ouvert et pivoté, les barres verticales que décrit le guide d’Apple ne sont donc pas apparues pour la barre d’outils d’une pile de navigation dans cette bêta. Et UIScreen.main.bounds répondait 466 par 678 points, l’écran externe, alors que l’app était sur l’écran interne, soit exactement le piège contre lequel met en garde le guide d’Apple quand il dit de fonder les calculs de mise en page « based on your scene or containing view’s bounds rather than screen dimensions » (sur les limites de votre scène ou de la vue contenante plutôt que sur les dimensions de l’écran) : l’écran principal n’est pas l’écran sur lequel vous êtes. Le compilateur annonce déjà 'main' was deprecated in iOS 26.0 à la compilation de la sonde, et cet appareil en est la raison.67
Une voie vers les autres positions ne fonctionne pas. simctl io screenConfig peut éteindre un écran, et éteindre l’écran externe pendant que l’interne restait allumé n’a pas ouvert le téléphone ; cela a fait planter le shell système du simulateur, simctl launch a ensuite échoué avec « The system shell probably crashed. », et il a fallu redémarrer. Les positions vivent dans la fenêtre de Device Hub.6
Ce que la bêta ne sait pas encore faire
Apple pose trois limites sous Simulator, Known Issues, dans les notes de la bêta, le long premier lancement, l’absence de StandBy et la plupart des extensions d’app : « Initial Simulator launch can take several minutes. » (187708500), « StandBy is unavailable in the iPhone Duo Simulator runtime. » (187708663) et « Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime. » (187708767).2 La limite sur StandBy compte pour quiconque a des widgets ou des Live Activities prévus pour lui : l’annonce d’Apple dit que le téléphone « enters StandBy on either the outer or inner display » et parle d’un « hub for widgets », le billet Duo pour les développeurs détaille ce qui s’y affiche, et tant qu’une bêta ultérieure ne lève pas la limite, StandBy sur cet appareil reste à vérifier sur le matériel.11
Deux autres figurent sous Mac Catalyst, Known Issues, et elles mordent toute app qui adopte ces API et se compile aussi pour le Mac : « Projects that use APIs specific to iOS 27.1 show compile errors when building for Mac Catalyst (“undeclared identifier”, “not found”, “has no member”, “cannot find”, etc). (185924957) », avec le contournement d’Apple #if !targetEnvironment(macCatalyst) en Swift ou #if !TARGET_OS_MACCATALYST en Objective-C, et « Projects that target iOS 27.1 show no Mac Catalyst run destination available. (187046347) », avec « Add a Mac Catalyst 27.0 minimum deployment in target settings. » pour contournement.2 Les notes de la bêta Xcode 27.2 en ajoutent une troisième, venue de l’autre côté : « macOS, watchOS, tvOS, and visionOS SDKs in Xcode 27.2 incorrectly report 27.1 as a valid deployment target, » et « Mac Catalyst builds with a 27.1 or 27.2 deployment target may be unable to use newly introduced API. » (187160501).8
Ce que je ferais cette semaine
- Installez la bêta à côté de Xcode 27.0 plutôt que par-dessus : décompressez le xip, renommez l’app et faites pointer
DEVELOPER_DIRdessus pour les compilations en ligne de commande ; rien dans les notes de la bêta ne change la toolchain 27.0, et le compilateur comme l’éditeur de liens portent des chaînes de version identiques.4 - Lancez le téléchargement du runtime avant d’en avoir besoin, avec
xcodebuild -downloadPlatform iOSsous la bêta, et recommencez s’il échoue ; c’est le runtime qui rend le type d’appareil iPhone Duo amorçable, et Apple prévient que le premier lancement prend en plus plusieurs minutes.23 - Compilez une fois contre le SDK 27.1 avec votre cible Mac Catalyst incluse, et lisez les deux diagnostics que nomme Apple avant de décider s’il faut clôturer la nouvelle API avec
#if !targetEnvironment(macCatalyst)ou relever le minimum Catalyst à 27.0.2 - Prenez les nombres du profil comme les tailles à prévisualiser et à tester : 466 par 678 points fermé, 669 par 951 ouvert, avec un écran interne nativement en paysage. La note Previews de la bêta ajoute un groupe Display au sélecteur de surcharges du canevas, « for previewing content on a device’s alternative display. » (182598534)25
- Journalisez les régions réservées position par position pendant le développement :
reservedRegions(kind:options:layoutDirectionBehavior:)avec.includeInactiveest documenté comme renvoyant la pliure et la caméra sous forme de valeursReservedRegionpouvant être actives ou inactives ; dans cette bêta, aucune position n’en a renvoyé, une ligne de journal dansonChange(of: proxy.size)vous dira donc à quel instant une position commence à les signaler.67
Questions fréquentes
Le simulateur iPhone Duo est-il dans Xcode 27.1 beta ?
Oui. La bêta installe un type d’appareil iPhone Duo, com.apple.CoreSimulator.SimDeviceType.iPhone-Duo, dont le profil exige un runtime iOS 27.1 que Xcode télécharge séparément via xcodebuild -downloadPlatform iOS. Les notes d’Apple préviennent que le premier lancement « can take several minutes » (peut prendre plusieurs minutes) et que StandBy ainsi que la plupart des extensions d’app sont indisponibles dans ce runtime.235
Comment installer Xcode 27.1 beta à côté de Xcode 27 ?
Décompressez le xip avec xip --expand, déplacez l’app obtenue sous un nom versionné du type /Applications/Xcode-27.1-beta.app, et réglez DEVELOPER_DIR sur son dossier Contents/Developer pour xcodebuild, xcrun et swiftc. La bêta exige macOS Tahoe 26.6 ou plus récent, le même plancher que Xcode 27.0.24
Quelle est la taille de l’écran interne de l’iPhone Duo en points ?
669 par 951 points, d’après le profil d’appareil du simulateur, qui définit l’écran interne à 2007 par 2853 pixels en scale 3 avec une orientation nativement en paysage ; l’écran externe fait 466 par 678 points, issus de 1398 par 2034 pixels en scale 3.5
Xcode 27.1 beta modifie-t-il le SDK iOS 27.0 ou la toolchain de Xcode 27 ?
Non. Le compilateur Swift et l’éditeur de liens annoncent les mêmes chaînes de version que Xcode 27.0, et les notes de version de la bêta comptent trois sections, Mac Catalyst, Previews et Simulator, dont aucune ne touche à la toolchain. Le SDK iOS 27.1 est un ajout, identifié comme le build 24A94403 dans le SDK appareil comme dans le SDK simulateur.24
Quand l’iPhone Duo sort-il, et sous quel système ?
Le 23 octobre, sous iOS 27.1, d’après la news d’Apple du 16 septembre : « When iPhone Duo becomes available on October 23, it will run iOS 27.1. »9
Sources
-
Apple, Releases, flux RSS récupéré le 19 septembre 2026 : « Xcode 27.1 beta (27A9269) » daté Fri, 18 Sep 2026 10:00:00 PDT et « TestFlight Update » daté Fri, 18 Sep 2026 14:00:00 PDT. Apple, notes de version d’App Store Connect, 18 septembre 2026, entrée TestFlight, citée intégralement. ↩↩↩
-
Apple, Xcode 27.1 Beta Release Notes, récupérées via le point de terminaison JSON de la documentation le 19 septembre 2026 : Overview, cité ; Mac Catalyst, Known Issues 185924957 et 187046347 avec leurs contournements, cités ; Previews, New Features 182598534, cité ; Simulator, Known Issues 187708500, 187708663 et 187708767, cités. Les notes ne contiennent aucune autre section. ↩↩↩↩↩↩↩↩↩↩↩
-
Téléchargement du runtime par l’auteur sur macOS 26.6.2 (25G83), le 19 septembre 2026, avec
DEVELOPER_DIRréglé sur Xcode 27.1 beta :xcodebuild -downloadPlatform iOSa affiché « iOS is already downloaded. » pour le runtime 27.0 installé, puis « Downloading iOS 27.1 Simulator (24A94401) (arm64) », suivi deDVTDownloadable: 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)et deError Domain=DVTDownloadableErrorDomain Code=41 "Download failed."; la reprise,xcodebuild -downloadPlatform iOS -buildVersion 24A94401, a affiché « Downloading iOS 27.1 Simulator (24A94401) (arm64) : 0.0% (66 kB of 7.85 GB) » et est allée au bout, après quoixcrun simctl list runtimeslistait « iOS 27.1 (27.1 - 24A94401) - com.apple.CoreSimulator.SimRuntime.iOS-27-1 ». La page de téléchargement pour développeurs d’Apple, parcourue le même jour en étant connecté à la recherche de « Simulator Runtime », ne liste aucune image disque plus récente que la iOS 18.2 Simulator Runtime. ↩↩↩↩↩ -
Inspection de
/Applications/Xcode-27.1-beta.apppar l’auteur, le 19 septembre 2026 :xcodebuild -versionafficheXcode 27.1etBuild version 27A9269;xcrun --sdk iphoneos --show-sdk-versionetxcrun --sdk iphonesimulator --show-sdk-versionaffichent tous deux 27.1 ; leSystemVersion.plistdes deux SDK porteProductBuildVersion24A94403 etProductVersion27.1 ;xcrun swift --versionafficheApple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1)etxcrun ld -vafficheld-27037.1, les mêmes chaînes de version que celles qu’affiche Xcode 27.0 (27A266a) sur le même Mac.Xcode_27.1_beta.xippèse 2 027 292 809 octets ;pkgutil --check-signaturerapporte « signed Apple Software » avec une chaîne de certificats Software Update ;du -skrapporte 3 813 336 KB pour l’app décompressée, contre 3 804 188 KB pour Xcode 27.0 (27A266a) décompressé dans/Applications/Xcode-27.app. Les décomptes de noms viennent degrep -cpour la sous-chaîne dansSwiftUICore.swiftmodule/arm64e-apple-ios.swiftinterface,SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterfaceetUIKit.swiftmodule/arm64e-apple-ios.swiftinterfacedu SDK iPhoneOS, et les décomptes de fichiers degrep -rlsurUIKit.framework/Headers; les attributs de disponibilité sont lus dans ces mêmes fichiers :@available(anyAppleOS 27.1, *)au-dessus depublic struct ArrangementView<dans l’interface SwiftUICore et au-dessus de l’extension SwiftUICore.Viewqui déclarefunc toolbarVerticalBehavior,API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1))suivi deAPI_UNAVAILABLE(watchos)dansUIArrangementViewController.h, sur les deux déclarationsreservedRegionsOfKind:deUIView.h, et sur l’énumérationUIVerticalBarEdgeet le traitverticalBarEdge, etAPI_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos)sur ses casUIVerticalBarEdgeLeadingetUIVerticalBarEdgeTrailing;@available(anyAppleOS 27.0, *)au-dessus defunc presentationPlacement;@available(iOS 27.0, visionOS 27.0, *)au-dessus depublic static let topBarPinnedTrailinget aucun attribut au-dessus depublic static let cancellationAction. Premier lancement : le premierxcodebuild -versionsous leDEVELOPER_DIRde la bêta a dépassé un délai d’attente de deux minutes, et/var/log/install.logenregistrexcodebuildmettant en file une installation PackageKit à 16:01:54 le 19 septembre, qui a extraitCoreTypes.pkgetXcodeSystemResources.pkgdeXcode-27.1-beta.app/Contents/Resources/Packageset s’est terminée à 16:03:04 ;xcodebuild -checkFirstLaunchStatusa ensuite renvoyé 0. ↩↩↩↩↩↩↩↩↩↩↩ -
/Library/Developer/CoreSimulator/Profiles/DeviceTypes/iPhone Duo.simdevicetype, installé par Xcode 27.1 beta et lu avecplutil -convert xml1le 19 septembre 2026.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 et vdpi 460, refreshRate 60, nativeOrientation 0, cornerRadiusUL 8, UR 59, LL 8, LR 59, colorspace P3) etprimary-1(displayName LCD-1, screenID 3, width 2007, height 2853, scale 3, hdpi et vdpi 460, refreshRate 60, nativeOrientation 270, les quatre rayons de coin à 55, colorspace sRGB), plusexternal-0(TVOut),wireless0(carPlay) etresizable(scene). Les deux PDF désignés parframebufferMaskIdentifieront été rendus avecqlmanagepuis inspectés ; les valeurs de la fiche technique d’Apple pour les dalles figurent dans le billet Duo pour les développeurs.xcrun simctl list devicetypesliste sous la bêta « iPhone Duo (com.apple.CoreSimulator.SimDeviceType.iPhone-Duo) ». ↩↩↩↩↩↩↩↩↩ -
Exécutions de l’auteur sur macOS 26.6.2 (25G83), les 19 et 20 septembre 2026. Appareil :
simctl create "Duo-27.1" com.apple.CoreSimulator.SimDeviceType.iPhone-Duo com.apple.CoreSimulator.SimRuntime.iOS-27-1, démarré avecsimctl bootetsimctl bootstatus -b(environ une minute sur ce Mac) ;simctl io <udid> enumerateliste deux portscom.apple.framebuffer.displayde classe d’affichage 0 à 1398 par 2034 et 2007 par 2853 et, sous Connected Screens, « LCD-1 » avec le nom d’appareilprimary-1, l’identifiant d’écran 3 et la taille en pixels {2007, 2853}. Sonde : DuoProbe, une app SwiftUI d’un seul fichier compilée avecxcrun swiftc -sdk <iPhoneSimulator.sdk> -target arm64-apple-ios27.1-simulator -parse-as-librarysous Xcode 27.1 beta, installée avecsimctl install, lancée avecsimctl launch --console-pty, captures d’écran avecsimctl io <udid> screenshot --mask=alpha --display=primaryet--display=primary-1. Lignes de console en position fermée :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); aucune lignedivision[niocclusion[. La capture--display=primary-1est noire. Alimentation des écrans :simctl io <udid> screenConfig --display=primary power offa affiché « Screen 1 power state set to off » ; lesimctl launchsuivant a échoué avecFBSOpenApplicationServiceErrorDomaincode 5, « The system shell probably crashed. » ;simctl shutdownpuisbootont récupéré l’appareil. Passages en position le 20 septembre, en deux séries, pressant toutes deux Rotate Right, Closed, Book et Open via l’API d’accessibilité avec l’actionAXPresssur les boutons que Device Hub expose pour l’appareil sélectionné, et toutes deux pilotées par l’outil en ligne de commandesimctlde la bêta 27.2, avec leDEVELOPER_DIRque ces scripts règlent, contre le runtime, le type d’appareil et le Device Hub de la bêta 27.1. Dans la première série, la sonde de la position précédente tournait encore quand le bouton suivant était pressé, puis elle était arrêtée et relancée, avec douze secondes de console capturées et des captures des deux écrans ; les relevés pivotés ci-dessus et les lignes de transition en viennent. Dans la seconde série, la sonde était arrêtée après chaque capture, de sorte qu’aucune app n’était au premier plan quand le bouton suivant était pressé ; les captures d’avant relance en viennent. 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)etDUOPROBE screen=(466.0, 678.0); la capture--display=primary-1montre la sonde,--display=primarymontre du noir. Book : les mêmes trois lignes après la relance ; la capture de l’écran interne prise après l’appui et avant la relance, sans app en cours, montre l’écran d’accueil. Closed : les lignes de position fermée ci-dessus. Après 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)etuikit bounds=(637.0, 44.0), avec la capture de l’écran interne en portrait. Aucune exécution n’a affiché de lignedivision[niocclusion[. Un état fermé pivoté n’est apparu que sous forme de lignes de transition pendant un changement de position,DUOPROBE size=610x232 h=compact v=compact ... screen=(678.0, 466.0), et n’est pas compté ci-dessus. ↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, JSON de documentation récupéré le 19 septembre 2026 pour ArrangementView, UIArrangementViewController, reservedRegions(kind:options:layoutDirectionBehavior:), reservedRegions(kind:options:) et toolbarVerticalBehavior(_:) : la disponibilité par plateforme de chaque page indique iOS 27.1 et iPadOS 27.1, marqués bêta. Apple, Preparing your app for iPhone Duo, récupéré le même jour, pour les noms qu’emploie le guide. ↩↩↩↩↩
-
Apple, Xcode 27.2 Beta Release Notes, récupérées le 19 septembre 2026, SDK, Known Issues, 187160501, cité. ↩
-
Apple, « Get ready with the latest beta releases », news, 16 septembre 2026, « Note about iOS 27.1 and iPhone Duo », cité. ↩
-
Apple, Designing for iPhone Duo, Human Interface Guidelines, récupéré via le point de terminaison JSON de la documentation le 20 septembre 2026 : « 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. » et « A hinge in the center lets people open and close the device ». ↩↩
-
Apple Newsroom, Apple unveils iPhone Duo, 9 septembre 2026, récupéré le 20 septembre 2026 : « Set iPhone Duo down and it enters StandBy on either the outer or inner display » et « hub for widgets », cités dans le paragraphe sur StandBy. ↩