Tous les articles

Mobile8 min de lecture

Expo, iOS 27, macOS 27 et Xcode 27 : ce qui change pour votre application

Xcode 27 exige le cycle de vie UIScene, sinon votre application Expo ne se lance pas. Ce qui change, ce qui casse et comment migrer avant l'échéance d'avril 2027.

Écrit par Balekage Gael

Apple a publié iOS 27, macOS 27 et Xcode 27 en septembre. Pour la plupart des applications, la mise à jour est une formalité. Pour les applications React Native construites avec Expo, un changement est incontournable : les applications compilées avec Xcode 27 doivent utiliser le cycle de vie UIScene, sinon elles ne se lancent pas.

Voici ce qui change, ce qui casse et comment migrer à la fin septembre 2026.

La chronologie

QuandQuoi
30 juin 2026Sortie d'Expo SDK 57 avec React Native 0.86
9 septembre 2026L'App Store accepte les soumissions compilées avec la Release Candidate de Xcode 27
14 septembre 2026iOS 27 est disponible pour tous
Septembre 2026Expo SDK 57.0.23 ajoute la prise en charge optionnelle de Xcode 27 ; la bêta du SDK 58 (React Native 0.88 RC) est conçue pour iOS 27
Avril 2027Les envois sur l'App Store doivent être compilés avec le SDK d'iOS 27

La dernière ligne est la vraie échéance : après avril 2027, impossible de publier une mise à jour sans Xcode 27 toutes les applications Expo doivent donc passer ce cap.

Ce qui casse : le cycle de vie UIScene

Avec Xcode 27, UIKit exige le cycle de vie basé sur les scènes. Les applications générées par les anciens SDK Expo créent encore leur fenêtre dans l'AppDelegate ; compilées avec Xcode 27, elles plantent au lancement avec :

Application failed to launch: UIScene life cycle is required for apps built with this SDK

La solution dépend de votre SDK.

SDK 58 : rien à faire

Le SDK 58 utilise le cycle de vie par scènes par défaut. Le prebuild génère un SceneDelegate.swift et le manifeste de scène dans Info.plist, et la fenêtre est créée par le délégué de scène. Le SDK 58 est en bêta au moment où j'écris :

npx expo install expo@next --fix

SDK 57 : l'activer

À partir d'expo@57.0.23, la prise en charge des scènes est une propriété de build optionnelle. Mettez à jour expo et expo-build-properties, puis activez-la dans app.json :

{
  "expo": {
    "plugins": [
      ["expo-build-properties", { "ios": { "enableSceneSupport": true } }]
    ]
  }
}

Puis régénérez le projet iOS natif :

npx expo prebuild --clean

SDK 56 ou plus ancien : migrer d'abord

Il n'y a pas de prise en charge des scènes avant le SDK 57. Migrez un SDK à la fois (par exemple 55 → 56 → 57), en lançant npx expo install --fix à chaque étape et en testant avant de continuer. Sauter des versions rend les changements cassants bien plus difficiles à identifier.

Si vous avez ajouté du code natif dans l'AppDelegate qui manipule la fenêtre, déplacez-le dans le délégué de scène c'est là que vit la fenêtre désormais.

Xcode 27 : de nouveaux outils

  • Device Hub remplace Simulator.app. Le SDK 58 ajoute un plugin d'outils de développement expo-device-hub pour piloter les appareils depuis le navigateur.
  • Les applications iPhone sont redimensionnables par défaut. Ne supposez pas une taille d'écran fixe : utilisez flexbox, les marges de zone sûre et useWindowDimensions, et testez vos mises en page à différentes tailles.
  • EAS Build : à l'annonce de la bêta du SDK 58, les images EAS avec Xcode 27 étaient « à venir » (la plus récente était Xcode 26.6). Consultez le changelog d'EAS avant de compter sur les builds cloud pour iOS 27.

macOS 27 : Apple silicon uniquement

macOS 27 ne fonctionne que sur les puces Apple. macOS 26 est la dernière version pour les Mac Intel et la dernière avec Rosetta. Si vous compilez vos applications iOS en local sur un Mac Intel, préparez la transition dès maintenant vers un Mac Apple silicon ou vers EAS Build dans le cloud.

iOS 27 : Liquid Glass affiné

iOS 27 affine Liquid Glass avec une réfraction plus uniforme et un meilleur contraste, et permet aux utilisateurs de choisir un verre plus transparent ou plus teinté. Pour les applications Expo :

  • expo-glass-effect renvoie true pour isLiquidGlassAvailable() dans les applications compilées avec le SDK d'iOS 27.
  • Les onglets natifs sont stables dans le SDK 58 importez-les depuis expo-router/native-tabs.
  • Expo UI ajoute des composants de navigation iOS : NavigationStack, Toolbar, NavigationLink et NavigationDestination.

Je détaille Liquid Glass dans Liquid Glass dans React Native avec Expo.

Autres changements du SDK 58 à vérifier

  • Android : R8 est activé par défaut pour les builds de production testez les builds de release, pas seulement de debug.
  • expo-file-system : File.write() est désormais asynchrone et renvoie une promesse ajoutez await.
  • TypeScript : l'API TypeScript stricte de React Native est activée par défaut, donc les imports profonds depuis react-native/... deviennent des erreurs de type.

Liste de migration

  • Identifier votre SDK actuel et prévoir une migration SDK par SDK vers le 57 ou le 58
  • Sur le SDK 57, activer enableSceneSupport et lancer npx expo prebuild --clean
  • Déplacer le code natif lié à la fenêtre de l'AppDelegate vers le délégué de scène
  • Compiler avec Xcode 27 et lancer l'application sur un appareil iOS 27
  • Tester les mises en page avec des fenêtres iPhone redimensionnables
  • Vérifier votre machine de build : Mac Apple silicon ou EAS Build
  • Publier avant avril 2027

Sources

Avis et commentaires

0 commentaires

Laisser un avis

Votre note

Aucun commentaire pour l'instant. Soyez le premier à donner votre avis.