Aller au contenu
useffect.sh
Planifier 30 min avec un senior
Build et publication

OTA update (EAS Update)

Livrer un nouveau bundle JavaScript et ses assets aux apps déjà installées, sans passer par les stores ; EAS Update est le service d’Expo pour ça.

Définition

Une OTA update (over-the-air) consiste à livrer un nouveau bundle JavaScript et ses assets (images, polices) à une app React Native déjà installée, sans publier de nouvelle version sur l’App Store ou Google Play. EAS Update est le service hébergé d’Expo qui le fait pour les apps embarquant la librairie expo-updates. Au lancement, l’app interroge le serveur, télécharge le manifeste et les assets manquants, et applique la mise à jour au lancement suivant ; une update ne peut rien changer au code natif, aux permissions ni à la version du SDK. Trois notions pilotent le ciblage : le canal (fixé dans le build via eas.json), la branche (la liste des updates publiées) et la runtime version, qui doit correspondre exactement entre le build et l’update. EAS Update remplace CodePush, dont le service hébergé (App Center) a fermé le 31 mars 2025. Vous le rencontrez dès qu’un bug de production doit être corrigé plus vite qu’une review de store.

Dans une vraie app

Le flux de production recommandé par Expo est le suivant : eas update --channel staging sur un build de test, vérification, puis eas update:republish --destination-channel production pour promouvoir exactement le même bundle, ou eas update --channel production si les variables d’environnement diffèrent. --rollout-percentage permet un déploiement progressif, eas update:rollback revient à l’update précédente ou à celle embarquée dans le binaire. Le comportement côté app se règle dans app.json (updates.checkAutomatically, fallbackToCacheTimeout) et via l’API Updates (checkForUpdateAsync, fetchUpdateAsync, reloadAsync) pour les équipes qui veulent proposer un rechargement plutôt que l’attendre au prochain démarrage.

Le piège numéro un est l’update incompatible : du JavaScript qui appelle un module natif absent du binaire installé. La runtime version existe pour ça, et la politique fingerprint la calcule à partir du natif réel. Numéro deux : publier une update depuis un poste de dev avec des variables EXPO_PUBLIC_* de staging. Numéro trois : oublier que les stores ont des règles ; une update qui change le comportement de l’app au-delà d’un correctif reste soumise à leurs conditions.

En audit, je regarde eas update:list --branch production, la correspondance canal/branche (eas channel:list), et si les crashs sont bien associés à un identifiant d’update dans l’outil de monitoring, sinon personne ne sait quel code tourne vraiment chez les utilisateurs.

Nos offres sur ce sujet

Sources

Les 35 termes du glossaire

Un de ces sujets bloque votre app ?

30 minutes avec un senior pour regarder le problème dans votre code. Gratuit.