Table of Contents

Le Guide complet pour mettre à jour et version d'applications dans Réagir Native

La gestion des mises à jour et des versions d'applications est l'un des aspects les plus critiques mais souvent sous-estimés de la maintenance d'une application React Native de production. Une stratégie de mise à jour bien structurée garantit aux utilisateurs d'avoir toujours accès aux dernières fonctionnalités, aux correctifs de sécurité critiques et aux améliorations de performance, sans perturber leur expérience ni causer des temps d'arrêt inattendus.

Ce guide couvre l'ensemble de la gestion des mises à jour : des versions sémantiques et des déploiements en direct aux présentations App Store, à l'automatisation, aux stratégies de renversement et aux essais. Vous apprendrez comment construire un pipeline robuste et convivial qui équilibre la vitesse de livraison avec la stabilité.

Comprendre la version de l'application dans Réagir Native

La version dans React Native implique la tenue d'un registre clair et vérifiable de chaque version. Le système utilise généralement deux identifiants : le numéro de version[ (lecture humaine) et le numéro de (intégrateur d'incrémentation de machine). Ces identifiants servent à plusieurs fins : ils aident les utilisateurs à identifier la version qu'ils ont, permettent aux développeurs de corréler les rapports d'écrasement et les rapports de bogues à des constructions spécifiques, et fournissent à l'App Store et au Play Store les données nécessaires pour gérer les déploiements échelonnés et les notifications de mise à jour.

Version sémantique (SemVer)

La norme industrielle écrasante est la version sémantique[, selon le format (p. ex. ). Les règles sont simples :

  • MAJOR a augmenté lorsque vous introduisez des changements de rupture qui exigent que les utilisateurs se comportent différemment ou qui modifient les formats de données, les API ou les intégrations de clés.
  • MINOR a augmenté lorsque vous ajoutez des fonctionnalités de manière rétrocompatible, comme un nouvel écran, un drapeau de fonctionnalité ou un flux UX amélioré.
  • PATCH incrémenté pour les corrections de bogues, les correctifs de sécurité et les modifications mineures des performances.

Les projets Natifs réagissent stockent ces valeurs dans plusieurs endroits : (pour le calque JavaScript), (versionNom et versionCode), et (CFBundleShortVersionString et BFCundleVersion).

Numéro de construction vs Numéro de version

Bien que le numéro de version soit ce que les utilisateurs voient, les numéros de construction sont strictement internes. Sur iOS, le numéro de construction () doit augmenter avec chaque archive soumise à App Store Connect, même si la chaîne de version reste la même. Sur Android, doit être un entier monotoniquement croissant. L'automatisation qui bloque les numéros de construction sur chaque essai CI élimine les erreurs humaines et les soumissions rejetées.

Mises à jour en direct (OTA) : Vitesse sans App Store

La capacité de réagir Native de fournir des mises à jour en direct (OTA)[ est l'un de ses avantages les plus puissants. Parce que la majeure partie de votre logique d'application est JavaScript (ou TypeScript compilée sur JS), vous pouvez pousser les mises à jour sans exiger des utilisateurs de télécharger un nouveau binaire du magasin.

Comment les mises à jour en direct fonctionnent-elles?

Lorsque votre application démarre, le SDK OTA (comme CodePush ou EAS Update) vérifie sur un serveur distant un paquet ou un pack d'actifs JS plus récent. Si disponible, le nouveau paquet est téléchargé en arrière-plan et appliqué sur le prochain redémarrage à froid ou via une invite "Mise à jour" orientée utilisateur. La contrainte critique est que les mises à jour OTA ne peuvent pas modifier le code natif – seulement le paquet JavaScript et les actifs groupés (images, polices, etc.).

CodePush (App Center) – L'option testée par la bataille

Microsoft , maintenant partie de l'App Center, reste une solution largement adoptée. L'intégration profonde nécessite l'installation , l'établissement de liens entre la bibliothèque native (relations automatiques avec React Native 0.60+), et la mise en place de clés de déploiement pour les environnements de mise en scène et de production.

CodePush prend en charge les drapeaux de mise à jour obligatoires (), qui obligent l'application à appliquer la mise à jour avant que l'utilisateur puisse continuer, ce qui le rend adapté pour les corrections de sécurité critiques.

Mises à jour de l'Expo et de la SAE (Moderne Alternative)

Pour les équipes utilisant Expo ou le workflow de développement Expo, EAS Update est le chemin recommandé. Il s'intègre parfaitement à l'écosystème Expo, supporte les déploiements de branchement et de canal, et offre des capacités de roulage granulaire. Une mise à jour est publiée avec:

EAS Update prend également en charge le pinning de canal[, vous permettant de cibler des segments d'utilisateurs spécifiques (p. ex., testeurs internes, groupe bêta, production de 10% déploiement).

Mise à jour des pratiques exemplaires de l'OTA

  • Toujours tester les mises à jour OTA sur un canal de mise en scène avant de sortir à la production. Un paquet JS cassé peut rendre l'application inutilisable pour des milliers d'utilisateurs.
  • Mécanisme de retour que le client peut déclencher à distance. Par exemple, un indicateur de fonction de commutateur de kill qui force l'application à charger le dernier paquet de bons connus.
  • Taille du faisceau de moniteur[. Les gros faisceaux entraînent des téléchargements lents et une mauvaise expérience utilisateur. Utilisez des outils d'analyse du faisceau et considérez le chargement paresseux ou le fractionnement de code pour les principales fonctionnalités.
  • Manipulation des échecs de mise à jour gracieusement. Affichez un message amical et offrez une option de réessayer, plutôt que de planter l'application.

Mises à jour de l'App Store et du Play Store : contrôle et soumission de version

Alors que les mises à jour en direct couvrent la couche JS, tous les changements natifs – y compris les mises à jour SDK, les nouveaux modules natifs, les modifications de la cible de version iOS/OS et les révisions majeures de l'interface utilisateur – exigent une soumission traditionnelle de magasin d'applications.

Versionnement pour les présentations de magasins

Pour iOS, vous modifiez Info.plist (ou utilisez l'éditeur de projet Xcode=S). Pour Android, vous modifiez build.gradle. L'utilisation d'un outil de version centralisé comme ou d'une voie Fastlane empêche les erreurs d'appariement :

Cette mise à jour , et en une seule commande, en utilisant la version spécifiée dans .

Mises en oeuvre et lancements échelonnés

Pour iOS, vous pouvez activer la version progressive dans App Store Connect, qui distribue la mise à jour sur une période de 7 jours. Pour Android, vous pouvez utiliser des déploiements échelonnés (5%, 10%, etc.) et surveiller les taux de crash avant de se développer. Cela réduit considérablement le rayon de bouffée d'une régression.

Mises à jour forcées et vérifications de compatibilité

Certains vont exécuter des versions plus anciennes pendant des semaines ou des mois, ce qui crée des maux de tête de compatibilité si votre API de moteur évolue. La solution standard de l'industrie est un flux de mise à jour forcé:

  1. Lors du lancement de l'application (ou après la connexion), le client envoie sa version actuelle à votre API.
  2. L'API répond avec un et .
  3. Si , affichez un écran de blocage «Mise à jour requise» avec un lien vers le magasin.
  4. Si mais au-dessus du minimum, affichez une invitation non-bloquante "Nouvelle version disponible".

Cette approche maintient votre base d'utilisateurs sur les versions d'API supportées et réduit les tickets de support liés à "l'application ne fonctionne pas".

Notes de publication Pratiques exemplaires

Écrire des notes de libération lisibles par l'homme et axées sur les avantages pour les listes de magasins.

  • Au lieu de "condition de course fixe en cours d'utilisationMémo provoquant des fermetures discontinues dans le module de caisse", écrivez "Amélioré la stabilité du paiement et a empêché les erreurs rares de caisse."
  • Inclure un appel à l'action (« Mise à jour maintenant pour une expérience d'achat plus fluide »).

Automatisation: CI/CD pour les artéfacts de bumping et de construction de version

La gestion manuelle des versions est sujette aux erreurs et perd du temps au développeur. Automatiser les incréments de versions, construire des mises à jour de nombres et stocker les téléchargements à l'intérieur de votre pipeline CI/CD est l'un des investissements de ROI les plus élevés que vous pouvez faire.

Fastlane – Le couteau suisse

Fastlane fournit des voies pour augmenter les numéros de construction, la signature de code, le bâtiment et le téléchargement sur TestFlight ou Google Play. Une voie typique pour une application Native de React:

Fastlane intègre également des fichiers de version app via le plugin ou en lisant directement.

Numéros de construction automatisés avec variables d'environnement CI

De nombreuses équipes utilisent le numéro de construction CI (par exemple, le numéro d'exécution GitHub Actions, le numéro de construction CircleCI) comme Android et iOS . Cela garantit l'unicité et élimine les erreurs de "numéro de construction déjà utilisé" d'Apple. Exemple avec un script:

Gestion des artéfacts et distribution par étapes

Constituez des artefacts (APK, AAB, IPA) avec des conventions de nommage appropriées qui incluent la version et le numéro de construction. Distribuez-les aux testeurs internes par des services comme TestFlight, Firebase App Distribution ou App Center. Pour les constructions EAS, Expo gère la gestion des artefacts nativement via les serveurs EAS.

Essais et assurance de la qualité pour les mises à jour

Chaque mise à jour, qu'elle soit en OTA ou en version binaire complète, comporte des risques. Un processus structuré d'AQ se défend contre les régressions et la frustration des utilisateurs.

Liste de contrôle des essais de régression pour les mises à jour

  • Flux d'utilisateurs de base (login, checkout, rendu de contenu, notifications push).
  • Migration et persistance des données (AsyncStorage, MMKV, SQLite) dans toutes les versions.
  • Intégrations SDK tierces (analytiques, annonces, fournisseurs d'auth).
  • Comportement en mode hors ligne (cache, file d'attente, repli).
  • Liens profonds et liens universels, qui peuvent se rompre lorsque la navigation change.

Bêta et Canaries

Utiliser TestFlight (iOS) et Track de test interne[ (Play Console) pour distribuer les compilations pré-release à un groupe de testeurs curés. Pour les mises à jour en OTA, maintenir un canal de déploiement qui miroir la production. Une fois validé, promouvoir le même paquet à la production.

Surveillance et détection des accidents post-mise à jour

Après avoir publié une mise à jour, surveiller les taux de crash, les journaux d'erreurs et les commentaires des utilisateurs. Des outils comme Sentry[, Firebase Crashlytics[ et App Center Diagnostics[ fournissent des données en temps réel segmentées par version app. Configurez des alertes pour une augmentation du taux de crash >1% immédiatement après un déploiement.

Stratégies de recul : Contenant des dommages

Même avec des tests approfondis, les problèmes peuvent glisser dans la production. Une stratégie de recul bien définie protège vos utilisateurs et votre réputation.

Caractéristiques comme un bouclier

Si une nouvelle fonctionnalité a un bug, désactivez-la côté serveur sans déployer de code. Cela fonctionne pour les mises à jour en OTA et les versions binaires. Implémentez un service centralisé de drapeau (LaunchDarkly, ConfigCat, ou un paramètre personnalisé) que votre application vérifie à l'exécution. Les drapeaux de fonctionnalité complètent les mises à jour en vous donnant un commutateur de destruction pour les fonctionnalités défectueuses tout en maintenant le reste de la version intacte.

Retour en arrière de l'OTA

Le codePush et la mise à jour EAS vous permettent de promouvoir un paquet précédent à la clé de déploiement de production. Cela revient le code JavaScript à un bon état connu. Pour CodePush: . EAS Update utilise le tableau de bord ou CLI pour définir une branche à une mise à jour précédente. Gardez à l'esprit que le périphérique user-=s doit lancer à nouveau pour télécharger le paquet roulé-retour—il n'est pas instantané.

Retour binaire

Replacer une version binaire est plus douloureux car vous devez soumettre une nouvelle version au magasin et attendre que la revue soit terminée. Si votre version actuelle est cassée de manière critique, la meilleure stratégie est de : a) soumettre une version incrémentée de hotfix (p. ex., 2.1.1), b) désactiver la fonctionnalité cassée via les drapeaux de fonctionnalité dans l'intervalle, et c) utiliser la logique de mise à jour forcée pour pousser les utilisateurs vers le hotfix. Ne jamais supprimer une version du magasin que les utilisateurs ont déjà installé, car cela ne les aidera pas – seuls les nouveaux installateurs verront la version plus ancienne.

Serveur-Side Kill Switch

Pour les problèmes graves où les utilisateurs ne doivent pas accéder du tout à l'application (par exemple, une vulnérabilité de sécurité), implémenter un commutateur de kill côté serveur. Votre API ou un paramètre dédié retourne un drapeau qui force l'application à afficher un écran "Service Indisponible" ou "Mise à jour Requise", désactivant efficacement la fonctionnalité jusqu'à ce que l'utilisateur mette à jour.

Considérations de sécurité pour les mises à jour

Les mises à jour sont un vecteur pour les attaques si elles ne sont pas gérées de manière sécuritaire.

  • Les contrôles de signature et d'intégrité du code.Les plateformes OTA doivent signer le paquet JS, et le client doit vérifier la signature avant de l'appliquer. EAS Update utilise le code de signature par défaut; CodePush supporte la signature optionnelle via l'App Center CLI. Activer ces fonctionnalités pour empêcher les attaques man-in-the-middle ou falsifié-bundle.
  • HTTPS pour tous les paramètres de mise à jour. Assurez-vous que votre serveur de mise à jour et URLs manifestes sont desservis par HTTPS. App Transport Security (ATS) sur iOS l'applique, mais vérifiez également votre configuration réseau Android.
  • Limiter l'exposition des clés de déploiement. Ne jamais engager des clés de déploiement de production pour le contrôle de la version.

Mettre tout en oeuvre ensemble : un flux de travail de mise à jour de la production

Une équipe de React Native mature fonctionne généralement avec le flux de travail suivant:

  1. Développement – Directions de fonctions, PR et révisions de codes.
  2. Station – Les compilations automatiques d'IC (binaires et mises à jour en OTA) sont publiées dans l'environnement de mise en scène.
  3. Binary Release – Une version de bosse (mineure ou majeure) déclenche la soumission App Store / Play Store. Le déploiement progressif est activé.
  4. OTA Patches – Entre les versions binaires, les corrections critiques sont déployées comme mises à jour OTA sur le canal de production stable. Chaque correction OTA passe par le canal de mise en scène d'abord.
  5. Surveillance – Les tableaux de bord et les retours des utilisateurs sont surveillés en permanence. Si une régression est détectée, les drapeaux de fonction désactivent la fonctionnalité cassée, ou un retour en OTA est exécuté.
  6. Mise à jour forcée[ – Lorsqu'une version binaire comprend un changement d'API ou un correctif de sécurité cassé, la version minimale est mise à jour côté serveur, et tous les clients en dessous de ce seuil voient un écran de mise à jour de blocage.

Cette approche permet de accélérer l'itération sans sacrifier la fiabilité. Les utilisateurs bénéficient de corrections rapides de bugs et de déploiements progressifs, tandis que l'équipe maintient la confiance dans le processus de sortie.

Ressources extérieures

Conclusion

La gestion des mises à jour et des versions dans React Native ne consiste pas seulement à augmenter les nombres, mais aussi à concevoir un système qui équilibre l'agilité et la stabilité. En combinant la mise à jour sémantique, les mises à jour OTA pour le calque JavaScript, les versions binaires progressives pour les changements natifs, l'automatisation CI/CD, les drapeaux de fonctionnalités et la surveillance proactive, vous pouvez offrir une expérience transparente à vos utilisateurs tout en maintenant le contrôle total de votre pipeline de déploiement.

La clé à retenir : investir dans automation[, test[, et observabilité[ à l'avance. Votre futur auto – et vos utilisateurs – vous remerciera chaque fois qu'un hotfix sortira en douceur ou qu'une libération potentiellement catastrophique sera contenue par un simple flip drapeau.