Alexis Lefebvre

Comment s’appuyer sur Expo pour publier sur les deux app stores ?

4 minutes de lecture

La publication d'une application sur App Store et Google Play Store nécessite de nombreuses heures de travail : il faut installer des outils complexes sur notre machine, compiler l'application pour les 2 boutiques d'application, puis transférer les fichiers, et enfin les envoyer pour qu'elles soient validées.

Heureusement Expo nous aide à réduire ces étapes au strict minimum.

Expo nous permet d'utiliser encore plus facilement des librairies de React Native :

  • Permissions
  • Géolocalisation
  • Sélecteur d’images
  • Signatures
  • Notifications

EAS (Expo Application Service) est un service d'Expo qui permet de publier facilement sur les deux stores en suivant ces étapes : Gitlab → Expo → App Store.

Grâce à GitLab CI et à Expo, nous n’avons plus besoin de compiler l’application nous-mêmes, ce qui était contraignant en particulier pour iOS car il nous fallait un Mac disponible et éviter les écueils lors de l’installation de Xcode.

Mise en place

Pour cela nous sommes passés par ces phases :

  1. Configuration EAS pour branchement App Store
  2. Configuration dans GitLab CI
  3. Pas de configuration particulière dans App Store
  4. Pas d’automatisation vers le PlayStore mais un simple fichier APK à envoyer sur la console Google Play Store

Configuration dans GitLab CI :

1.eas: &eas
2 image: ghcr.io/troopers/node-14-eas:latest
3 stage: build
4 before_script:
5   - yarn install
6 when: manual
7
8
9build-android-preprod:
10 <<: *eas
11 script:
12   - yarn eas build --platform=android --profile=preprod --no-wait --non-interactive
13 only:
14   - develop
15
16
17build-ios-preprod:
18 <<: *eas
19 script:
20   - yarn eas build --platform=ios --profile=preprod --auto-submit-with-profile=release --no-wait --non-interactive
21 only:
22   - develop
23
24
25update-preprod:
26 <<: *eas
27 stage: update
28 script:
29   - yarn eas channel:create preprod || true
30   - yarn eas channel:edit preprod --branch develop || true
31   - yarn eas update --non-interactive --branch=develop --auto
32 only:
33   - develop

Le job build-android-preprod envoie les données à EAS qui va compiler l’application et nous fournir un lien vers un fichier APK qui peut être partagé et installé sur un appareil Android.

Le job build-ios-preprod envoie les données à EAS qui va compiler l’application et l’envoyer directement dans Testflight, on pourra alors publier cette version pour les utilisateurs qui font partie de notre groupe de testeurs.

Le job update-preprod sert quant à lui à pousser une mise à jour en OTA. Puisque la mise à jour ne demande pas de compiler l’application, la mise à jour est très rapide, elle est effective en moins de 5 minutes (contre 10 à 15 minutes pour les compilations Android et iOS).

Côté Expo, on peut visualiser comment chaque branche de git est connectée à un environnement Expo :

expo_branches.pngOuvre une nouvelle fenêtre

Récemment nous avons mis à jour la version d’Expo sur l’un de nos projets pour installer la version 45.

Cette version 45 a débloqué Expo Go et donc les mises à jour OTA très faciles, y compris via un QR code.

Les mises à jour OTA nous autorisent à mettre à jour l’application à l’exception des couches natives de l’application : configuration de base, dépendances écrites en code natif, etc.

expo_update.png

Les publications OTA sont parfaites pour les mises à jour urgentes, par exemple pour une mise à jour pour avoir tout le monde sur le même niveau d’API. Une fois qu’une mise à jour OTA est publiée, Expo s’occupe de télécharger la mise à jour. Les utilisateurs et utilisatrices n’ont alors qu’à redémarrer leur application pour utiliser la nouvelle version.

Nous mettons quand même à jour la version sur les boutiques Apple et Google afin que les nouveaux utilisateurs aient directement la dernière version.

Conclusion

Expo permet de publier sur les deux stores via EAS en allégeant la charge de travail. Il vient avec des avantages et des inconvénients et c’est un choix d’architecture important. Le nombre et la spécialisation des développeurs, le temps à accorder au projet aux phases de déploiement doivent jouer dans ce choix.