L'impératif des scènes UIKit : ce qui ne se lancera plus sur iOS 27
La documentation de migration d’Apple énonce l’exigence la plus stricte du cycle iOS 27 en une seule phrase : « À partir d’iOS 27, iPadOS 27, Mac Catalyst 27, tvOS 27 et visionOS 27, les apps compilées avec le SDK le plus récent doivent adopter le cycle de vie basé sur les scènes, faute de quoi elles ne se lancent plus. »1 Pas dépréciées, pas signalées par un avertissement, pas ralenties : elles ne se lancent plus. La session 278 le dit tout aussi clairement : « Le cycle de vie UIScene est désormais requis lors de la compilation avec les SDK les plus récents. Sans lui, votre application ne se lancera plus. »2 Chaque app UIKit qui tourne encore sur l’ancien cycle de vie de l’app delegate a jusqu’à sa compilation avec le SDK iOS 27 pour migrer, et la phase d’avertissement dure déjà depuis des années.
L’exigence, énoncée à 2:36 dans la session 278.
En bref
- Les apps compilées avec le SDK iOS 27 doivent utiliser le cycle de vie UIKit basé sur les scènes, faute de quoi elles ne se lancent plus, sur iOS, iPadOS, Mac Catalyst, tvOS et visionOS 27.1 Les binaires existants compilés avec des SDK plus anciens continuent de fonctionner ; le mur, c’est le SDK avec lequel vous compilez.
- L’escalade s’est faite par étapes : UIKit a commencé à consigner un message de migration dès iOS 18.4, et le message a changé dans iOS 26. C’est avec iOS 27 que ce message devient un échec au lancement.1
- Vous devez migrer si l’une de ces deux conditions est vraie : votre Info.plist ne comporte pas de clé
UIApplicationSceneManifestavec une configuration, ou votre app delegate n’implémente pas la méthode de configuration de scène.1 - La migration minimale est légère : une entrée de manifeste de scène dans la property list, ou la méthode du delegate pour les configurations dynamiques. La prise en charge de plusieurs scènes reste facultative.1
- Xcode 27 est livré avec un agent skill de modernisation d’app qui convertit les apps vers le cycle de vie basé sur les scènes, réécrit les vérifications de l’écran principal et de l’orientation, pose des questions de clarification sur les tâches complexes et laisse des commentaires pour le travail qu’il ne peut pas terminer en une seule session.2
Un impératif, pas une dépréciation
Le cycle 27 suit un schéma de suppression d’API une version après que leurs remplaçantes ont atteint leur maturité : ImageCreator cesse de fonctionner sur iOS 27, et MXMetricManager porte une dépréciation 27.0 la semaine même où sa remplaçante est sortie. L’exigence relative aux scènes est l’entrée la plus lourde de conséquences de ce schéma, car elle conditionne l’app tout entière, pas une fonctionnalité. Une app qui ne touche jamais à Image Playground ne perd rien cet automne. Une app qui ignore le cycle de vie basé sur les scènes cesse de se lancer le jour où elle est compilée avec le nouveau SDK.
Le calendrier montre la marge de manœuvre qu’Apple a consommée avant d’imposer la règle. À partir d’iOS 18.4, iPadOS 18.4, Mac Catalyst 18.4, tvOS 18.4 et visionOS 2.4, UIKit consignait un message pour les apps qui n’avaient pas migré, et dans les versions 26 ce message a changé.1 Deux versions d’avertissements, puis le plancher s’effondre. Les fondements conceptuels sont encore plus anciens : la session remonte à la WWDC 2014 pour reprendre la formule de Bruce Nilo selon laquelle « une rotation d’appareil n’est qu’un changement de bounds animé », et note qu’avec les fenêtres iPad redimensionnables et les apps iPhone redimensionnables, « cette idée est aujourd’hui plus pertinente que jamais ».2
Une limite mérite d’être énoncée avec précision : l’exigence s’applique aux apps « compilées avec le SDK le plus récent ».1 Les binaires en production compilés avec les SDK d’iOS 26 ou antérieurs continuent de se lancer. Dès l’instant où vous recompilez avec les SDK de Xcode 27 pour récupérer la moindre nouveauté, le cycle de vie basé sur les scènes vient avec.
Avez-vous réellement besoin de migrer ?
La documentation fournit un test à deux conditions. Migrez si la clé UIApplicationSceneManifest est absente de votre information property list (ou ne précise aucune configuration), ou si votre app delegate n’implémente pas la méthode de configuration de scène.1 La plupart des apps démarrées après 2019 passent déjà le test ; les modèles de Xcode génèrent depuis lors des projets basés sur les scènes. Les apps que cet impératif rattrape sont celles de longue durée de vie dont l’AppDelegate possède encore la fenêtre.
Le correctif minimal emprunte l’une de deux voies. La voie statique ajoute une clé UIApplicationSceneManifest avec une configuration de scène à la property list, accessible via les réglages General de la cible, sous « Scene manifest » dans Deployment Info.1 La voie dynamique implémente à la place la méthode du delegate de configuration de scène, pour les apps qui personnalisent les scènes en fonction des activités de l’utilisateur ou qui gèrent différents rôles de scène ; l’exemple de la doc utilise la propriété de rôle de la session pour déterminer quelle scène créer.1 Les apps qui chargent le view controller racine depuis un storyboard incluent le nom du storyboard dans le manifeste de scène, et le système configure automatiquement la window scene et le view controller racine.1
Ce que l’impératif n’exige pas, c’est la prise en charge de plusieurs scènes. La doc est explicite : la prise en charge de plusieurs scènes reste facultative et peut nécessiter de restructurer votre modèle de données pour le rendre spécifique à chaque scène ; elle vous invite à évaluer si l’expérience utilisateur en bénéficie avant de l’activer.1 Migrer signifie déplacer les événements de cycle de vie du niveau de l’app vers le niveau de la scène, où UIApplicationDelegate conserve les événements liés au processus et où le scene delegate prend en charge ceux qui sont propres à l’UI.1 Un détail qui fait trébucher la configuration : précisez des objets UIWindowScene plutôt que de simples objets UIScene, et les scènes CarPlay utilisent leur propre type de scène d’application basée sur un modèle.1
Pourquoi maintenant : tout se redimensionne
L’impératif arrive dans la même version qui rend la redimensionnabilité universelle, et la session 278 les présente comme une seule et même histoire. Sur iOS et macOS 27, les fenêtres d’iPhone Mirroring sur le Mac se redimensionnent librement, et une app exclusivement iPhone qui tourne sur iPad devient « entièrement redimensionnable comme n’importe quelle autre app iPad ».2 Le cycle de vie basé sur les scènes est, selon les mots de la session, « la base de toute app adaptative » : le prérequis de tout le reste que la session vous demande de corriger.2
La liste des correctifs est une purge des hypothèses centrées sur l’écran. Les références à l’écran principal renvoient des informations incorrectes dès lors que votre scène vit sur un autre écran ; la session recommande donc d’accéder à l’écran de manière dynamique via la window scene de la fenêtre, ou mieux, de supprimer entièrement les références à l’écran : l’échelle de l’écran devient le displayScale de la trait collection, et les bounds de l’écran deviennent la géométrie effective de la window scene, ou tout simplement la taille de la vue environnante.2 Le suivi automatique des traits adoucit la migration : le système suit les propriétés de trait lues à l’intérieur des méthodes de layout et de dessin comme layoutSubviews, et les appelle de nouveau lorsqu’un trait suivi change.2
Deux signaux de longue date perdent purement et simplement leur signification pour le layout. L’idiome d’interface utilisateur « n’a plus de sens pour aucune décision de layout », car une app iPhone sur iPad tourne en mode entièrement redimensionnable tout en continuant de rapporter l’idiome du téléphone ; et l’orientation d’interface prise en charge devient une préférence que le système ignore dans les environnements redimensionnables, iPhone Mirroring rapportant toujours le mode portrait quel que soit le ratio de la fenêtre.2 Le remplacement de l’un comme de l’autre, ce sont les size classes. Les jeux bénéficient d’un aménagement plutôt que d’une exemption : UIRequiresFullscreen est respecté sur iPhone dans les environnements redimensionnables à partir d’iOS 27, mais son comportement passe à un redimensionnement discret, faisant transitionner la scène vers une configuration d’écran correspondante à chaque redimensionnement, afin que le jeu s’affiche en pleine qualité dans l’espace disponible.2
Tester l’ensemble de la matrice est devenu moins coûteux dans le même cycle : Device Hub et Xcode Previews gagnent un « mode redimensionnement » qui fait glisser librement les bords de l’appareil, la session conseillant ensuite de procéder à des vérifications sur appareil réel via iPhone Mirroring et sur iPad.2
La migration a son agent skill
La session se conclut en reconnaissant l’ampleur de la demande et en pointant la réponse de Xcode 27 : un nouveau skill de modernisation d’app doté d’« une compréhension approfondie des tâches d’adaptativité » que la session décrit.2 Lorsqu’on lui demande de rendre une app plus adaptable, l’agent convertit les appels à l’écran principal en vérifications de trait collection ou de bounds de scène, avec une logique d’invalidation là où c’est nécessaire, remplace les vérifications d’orientation d’interface par des size classes, et « convertira même votre app pour qu’elle utilise le cycle de vie des scènes ».2 Pour les tâches complexes, il pose des questions de clarification, et pour un travail trop volumineux pour une seule session, il laisse des commentaires signalant ce qu’il reste à faire.2
La logique de distribution rejoint le reste de l’effort d’Apple sur les skills lors de cette WWDC : xcrun agent skills export produit des fichiers markdown que vous pouvez importer dans d’autres outils, le mécanisme même couvert dans l’export d’agent skills de Xcode 27.2 Une migration imposée par le SDK, associée à un skill qui réalise cette migration, est l’expression la plus claire à ce jour de la manière dont Apple s’attend à voir absorber les changements cassants à l’ère des agents : la plateforme relève le plancher, et l’outillage vous fait franchir l’obstacle.
FAQ
Mon app existante cessera-t-elle de fonctionner sur iOS 27 ?
Pas du fait de cette seule exigence. L’impératif s’applique aux apps « compilées avec le SDK le plus récent ».1 Les binaires déjà livrés avec des SDK plus anciens continuent de se lancer sur iOS 27. L’échec survient lorsque vous recompilez avec le SDK iOS 27 sans que le cycle de vie basé sur les scènes soit en place.
Comment savoir si mon app est concernée ?
Vérifiez deux choses.1 Si votre Info.plist ne comporte pas de clé UIApplicationSceneManifest avec une configuration, et que votre app delegate n’implémente pas la méthode de configuration de scène, vous êtes sur le cycle de vie de l’app delegate et l’app ne se lance plus une fois compilée avec le SDK iOS 27. UIKit consigne un message de migration pour les apps concernées depuis iOS 18.4.1
Cela m’oblige-t-il à prendre en charge plusieurs fenêtres ?
Non. La prise en charge de plusieurs scènes reste facultative, et la documentation d’Apple conseille de peser si votre expérience utilisateur en bénéficie avant de l’activer, car cela peut nécessiter de rendre votre modèle de données spécifique à chaque scène.1 L’impératif n’exige que le cycle de vie basé sur les scènes lui-même : des événements de cycle de vie gérés par scène plutôt que globalement.
Un agent peut-il réaliser la migration ?
Xcode 27 est livré avec un skill de modernisation d’app qui, selon la session, peut convertir une app vers le cycle de vie des scènes, réécrire les références à l’écran principal et remplacer les vérifications d’orientation par des size classes, en posant des questions de clarification là où le changement est ambigu et en laissant des commentaires pour le travail inachevé.2 Il s’exporte vers d’autres outils via xcrun agent skills export.2 Traitez son résultat comme n’importe quelle migration écrite par un agent : relisez le diff, en particulier autour de la restauration d’état et de la mise en place de la fenêtre.
L’impératif parachève un thème de ce cycle : Apple impose les migrations à la frontière de la version 27 au lieu de les suggérer, après que l’abandon d’ImageCreator a montré la même escalade par étapes sur une surface plus restreinte. La réponse de l’agent skill se rattache à l’arc plus large des skills dans Xcode 27 livre des agent skills exportables partout. Le hub complet de la série est la série Écosystème Apple.
Références
-
Apple, Transitioning to the UIKit scene-based life cycle, Apple Developer Documentation. Source de l’exigence (« À partir d’iOS 27, iPadOS 27, Mac Catalyst 27, tvOS 27 et visionOS 27, les apps compilées avec le SDK le plus récent doivent adopter le cycle de vie basé sur les scènes, faute de quoi elles ne se lancent plus »), des avertissements par étapes (UIKit consignant un message de migration à partir d’iOS 18.4, iPadOS 18.4, Mac Catalyst 18.4, tvOS 18.4 et visionOS 2.4, le message changeant dans les versions 26), du test de migration à deux conditions (clé
UIApplicationSceneManifestabsente ou aucune méthode de delegate de configuration de scène), des voies de migration par property list et par configuration dynamique, y compris l’emplacement « Scene manifest » dans les réglages General et l’exemple du rôle de session, de la note sur le nom du storyboard avec configuration automatique de la window scene, de la prise en charge de plusieurs scènes restant facultative avec la mise en garde sur le modèle de données, de la répartition app/scène des responsabilités du cycle de vie, de la consigne de préciser des objetsUIWindowSceneplutôt que des objetsUIScene, et du type de scène CarPlay. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, WWDC 2026 session 278, Modernize your UIKit app. Transcription officielle ; présentée par Michael Ochs, engineering manager au sein de l’équipe UI Frameworks. Source de l’énoncé de l’exigence (« Le cycle de vie UIScene est désormais requis lors de la compilation avec les SDK les plus récents. Sans lui, votre application ne se lancera plus »), du redimensionnement d’iPhone Mirroring et des apps exclusivement iPhone tournant en mode entièrement redimensionnable sur iPad, du cycle de vie des scènes en tant que « base de toute app adaptative », de la consigne sur l’écran principal (accès dynamique via la window scene,
displayScalevia la trait collection, géométrie effective et taille de la vue environnante plutôt que bounds de l’écran), du suivi automatique des traits dans les méthodes de layout et de dessin, de la consigne sur l’idiome et l’orientation d’interface, y compris le comportement toujours portrait sous iPhone Mirroring et le passage aux size classes, du comportement de redimensionnement discret deUIRequiresFullscreenpour les jeux, de la citation de Bruce Nilo à la WWDC 2014 (« une rotation d’appareil n’est qu’un changement de bounds animé ») et de son cadrage, du mode redimensionnement de Device Hub et de Xcode Previews, et du skill de modernisation d’app (compréhension approfondie des tâches d’adaptativité, conversion des appels à l’écran principal avec logique d’invalidation, remplacement des vérifications d’orientation par des size classes, conversion des apps vers le cycle de vie des scènes, questions de clarification, commentaires de progression et export viaxcrun agent skills export). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩