Publié le 01/10/2022• Alexandre BOREL

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.
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 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.
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.
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.
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.
Nous avons commencé par établir des règles sur les branches Git du projet pour réussir à automatiser la publication des mises à jour.

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.
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é.
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.

Écrit par