Alexandre BorelLead Frontend & Mobile Developer

Cycles & gestion des versions de l’application mobile FrenchFounders

Publié le 01/10/2022• Alexandre BOREL

Introduction

Chez FrenchFounders nous avons une application mobile à destination de nos membres afin qu’ils puissent avoir accès à notre plateforme dans la poche. Cette application mobile développée en JavaScript/TypeScript avec React-Native est disponible sur les stores iOS et Android.

Afin de déployer des mises à jour pour l’ajout de fonctionnalités ou de correctifs, nous avons deux possibilités de déploiement possibles : AppCenter Codepush, qui nous permet d’appliquer des mises à jour directement dans l’application sans que l’utilisateur s’en rende compte, ou les mises à jour classiques dans les stores.

Gestions des mises à jour

Historiquement, nous n’avions pas de règles sur les mises à jour de l’application : si c’était possible, on déployait toutes les mises à jour par Codepush pour s’assurer que l’utilisateur ait toujours la dernière version disponible.

On s’est rendu compte plus tard que ce système-là pouvait être problématique dans plusieurs cas :

  • Codepush peut seulement déployer des assets (donc code JavaScript, images, typos, etc …)
  • Certains utilisateurs n’arrivaient pas à télécharger les mises à jour Codepush pour différentes raisons (connexion lente, maintenance de Codepush, etc …) et se retrouvaient donc avec une ancienne version de l’application.

Codepush a été pensé pour déployer du code sans passer par une compilation. Il est cependant impossible de déployer des modifications qui sont au niveau natif des applications mobiles car cela nécessite une compilation complète de l’application et non seulement du code JavaScript.

Nous avons établi des règles pour le déploiement des mises à jour pour assurer le minimum de frustrations possibles chez nos utilisateurs.

Mises à jour urgentes

Déployer une mise à jour sur les stores iOS & Android n’est pas aussi simple et rapide que de déployer un site web : il faut passer par une étape de vérification qui peut prendre jusqu’à 2 jours pour les apps iOS.

Souvent, dans le cas où nous avons besoin de publier un correctif urgent pour lequel on ne peut pas se permettre d’attendre la validation par les stores et que l’utilisateur télécharge la mise à jour, nous publions un Codepush. La mise à jour Codepush, sera téléchargée le plus rapidement possible et appliquée automatiquement à l’utilisateur qui relancera son application.

Le code qui a été envoyé via Codepush sera également déployé dans la prochaine mise à jour disponible sur les stores.

Mises à jour de nouvelles fonctionnalités

Les mises à jour de nouvelles fonctionnalités sont souvent préparées à l’avance et passent par les stores. En moyenne, nous publions une mise à jour de l’application FrenchFounders toutes les 2 semaines.

Dans le cas où aucune nouvelle fonctionnalité n’a été développée durant le cycle de 2 semaines, nous pouvons tout de même être amenés à déployer une mise à jour dans les stores qui embarquera seulement les correctifs qui ont été poussés par Codepush.

Automatisation des mises à jour

Pour que les développeurs passent le moins de temps possible à préparer les mises à jour qui seront déployées par Codepush ou sur les stores, nous avons automatisé un maximum la publication de mises à jour.

Structures des branches Git

Nous avons commencé par établir des règles sur les branches Git du projet pour réussir à automatiser la publication des mises à jour.

  • La branche master est la plus avancée des branches et contient tout le code qui est prêt à être déployé dans une nouvelle mise à jour.
  • La branche release contient le code qui est déployé sur les stores. Une fois que nous sommes prêts à déployer une nouvelle version dans les stores, nous envoyons toutes les modifications de la branche master vers release, ce qui déclenche la compilation de l’application sur Microsoft Appcenter.
  • Nous créons une branche codepush/ à chaque fois que l’on déploie une nouvelle version dans le store à partir de la brancherelease sur laquelle sera le code qui sera déployé par codepush.

Structure des branches du projet

Lorsqu’un nouveau correctif doit être déployé avec Codepush, une nouvelle branche est créée à partir de codepush/<version_to_fix> et une fois qu’il est prêt à être déployé, nous faisons un “merge” de la nouvelle branche dans codepush/<version_to_fix> ainsi que dans master pour que le correctif soit appliqué également dans la prochaine mise à jour dans le store.

Déploiements automatisés

Les modifications sur la branche release lancent automatiquement une compilation de l’application qui sera prête a être déployée dans les stores.

Build de l’application dans Microsoft AppCenter

Lorsqu’il y a un commit sur les branches codepush/* , nous avons mis en place une “Github Action” qui va s’occuper de compiler le bundle JavaScript puis déployer automatiquement un Codepush sur l’application de production.

Interface des releases Codepush déployées

Par défaut les Codepush sont appliqués à chaque lancement de l’application. Nous avons changé le comportement pour que les bundles déployés par Codepush soient appliqués lorsque l’application reste en arrière-plan plus de 10 minutes.

Les releases Codepush dites “Mandatory” forcent un redémarrage de l’application de l’utilisateur. Nous utilisons cette option quand nous avons besoin que le codepush soit absolument appliqué.

Conclusion

Avec cette stratégie de déploiement de Codepushs pour les mises à jour urgentes et les releases stores pour les nouvelles fonctionnalités, en plus des correctifs déployés par Codepush, nous avons optimisé les cycles de mises à jour pour réduire au maximum la frustration des utilisateurs. L’automatisation des releases quant à elle, a permis de réduire celle des développeurs qui passent moins de temps sur la préparation des releases.

auteur

Écrit par

Alexandre BOREL
Lead Frontend & Mobile Developer