Pour ou contre Expo.io ? Le retour d’expérience theTribe

par | 3 Mar 2021 | Expertise Mobile

Lorsque l’on démarre un projet avec React Native, on a deux possibilités principales si l’on suit la documentation : soit travailler directement en React Native, soit utiliser Expo.

Pour rappel, React Native est un des frameworks les plus populaires pour le développement mobile. Il permet de générer les applications pour iOS et Android avec un seul code source.

Mais alors Expo, c’est quoi ? C’est un framework conçu pour créer des applications React Native, et il est très souvent conseillé aux développeurs qui démarrent dans cet univers.

Dans cet article, nous allons vous présenter notre retour d’expérience sur Expo, afin que vous puissiez facilement savoir s’il est adapté à votre projet… ou pas.


Notre retour d’expérience sur Expo.io

— Présentation d’Expo et de ses avantages

Expo, c’est à la fois un framework et une plateforme qui simplifient la création et le déploiement d’applications mobiles avec React Native. Expo embarque de nombreux outils utiles et des librairies natives pour React Native. Il gère aussi la mise à jour de ces librairies. C’est donc un moyen de démarrer facilement et rapidement son projet.

Expo a l’avantage d’être très simple à configurer et il simplifie grandement la vie des développeurs, à tous les stades du projet :  

  • Développement : vous vous contentez d’écrire le code, Expo s’occupe du build des applications.
  • Test : Expo vous permet de tester et de faire tester vos applications sans avoir à les publier sur les stores. Il suffit d’installer l’application Expo Go et de scanner un QR code pour pouvoir tester une application en développement.
  • Publication et mise à jour sur les stores : Expo simplifie la publication des applications sur les stores Apple et Google, et permet de les mettre à jour sans passer par la validation des stores (Over the Air updates).

Et en plus, Expo est gratuit (avec certaines limitations) ! 

À la lecture de tous ces avantages, on comprend bien ce qui a fait son succès. 

Chez theTribe, nous utilisions Expo, nous aussi… jusqu’à ce que nous décidions d’arrêter. Je vais vous expliquer pourquoi.

Expo : les inconvénients

Avant de décider d’utiliser Expo, il faut bien être conscient de ses limites.

Tout d’abord, Expo prend la main sur les processus de build et publish qui ne sont en théorie pas liés à votre framework. Avec Expo ça sera forcément lié à React Native et vous ne pourrez pas capitaliser votre expérience sur d’autres frameworks.

Ensuite, Expo est livré comme on l’a vu avec de nombreuses librairies React Native. C’est intéressant, certes… sauf que même si vous ne les utilisez pas toutes, votre application les chargera quand même.

C’est pourquoi le poids des applications générées par Expo est très élevé : 20 Mo minimum pour iOS, 15 Mo minimum pour Android. 

En développant vos applications sans passer par Expo, vous allez facilement diviser par deux leur poids !

Un autre inconvénient majeur, c’est que malgré toutes ces librairies, il manque des fonctionnalités cruciales à Expo : par exemple, votre application ne pourra pas intégrer d’achats in app, ni utiliser le Bluetooth, et si vous voulez afficher une carte vous serez contraints d’utiliser Google Maps. Ces limites peuvent être carrément bloquantes.

Notons également qu’en version gratuite le temps de build peut être très long en passant par les serveurs d’Expo, jusqu’à 5 à 6 h ! En effet, les builds des utilisateurs gratuits ne sont pas prioritaires, il faut donc attendre dans une file d’attente. En période de développement et de tests, c’est très pénalisant pour la productivité de l’équipe et l’avancement du projet.

Terminons avec un inconvénient qu’il faut connaître : une application buildée avec Expo ne peut pas être fournie à des enfants de moins de 13 ans car elle embarque des librairies Facebook (même si on ne les utilise pas). Bon à savoir si vous avez un projet qui s’adresse au grand public.

Pourquoi theTribe a choisi d’arrêter l’utilisation d’Expo ?

Chez theTribe, nous avons décidé d’arrêter d’utiliser Expo.

Et la première raison, c’est que la majorité des projets sur lesquels nous travaillons ont besoin de gérer des achats in app, et comme on l’a vu, c’est impossible avec Expo. Si vous faites des recherches, vous trouverez des articles qui vous expliqueront comment contourner cette limitation. C’est ce que nous avons testé sur un projet… Et nous avons regretté.

Sur ce projet démarré avec Expo, nous pensions pouvoir mettre en place une solution de paiement en contournant les limites d’Expo… sauf que ça n’a pas été possible. 

Et c’est là que nous avons compris le vrai problème d’Expo : une fois que vous avez commencé avec, c’est extrêmement complexe d’en sortir. Il est en effet possible “d’éjecter” Expo de son projet, mais le code restera toujours très forcément lié aux bibliothèques d’Expo après coup. Sans entrer dans les détails, nous avons perdu beaucoup de temps pour tout reprendre de zéro. C’est là que nous avons décidé d’arrêter les frais.

Car finalement, les avantages d’Expo, de notre point de vue, ne valent pas ses inconvénients : 

  • Nous n’avons pas besoin de tout le framework. Nous sommes tout à fait en mesure de développer directement avec React Native, sans utiliser les librairies Expo.
  • Il n’y a pas que React Native dans la vie ! Sur nos projets, nous utilisons de plus en plus Flutter (on vous expliquera bientôt pourquoi).
  • Pour développer des applications un peu complexes, nous préférons avoir la main sur tout l’environnement.

Finalement, ce qui était vraiment le plus utile pour nous avec Expo, c’est le déploiement sur les stores et la gestion des tests utilisateurs. 

Voici donc les solutions alternatives que nous avons mises en place.

Expo.io : les alternatives

— Déploiement sur les stores : Fastlane

Pour automatiser les déploiements sur iOS et Android, que ce soit sur les plateformes de test ou sur les stores, nous utilisons Fastlane. C’est un outil plus complexe qu’Expo, mais que nos équipes ont appris à maîtriser.

Les avantages de Fastlane :

  • Il permet d’automatiser les déploiements et les mises à jour sur iOS et Android, ce qui représente un gain de temps considérable.
  • Il permet aussi de publier les applications sur les plateformes de test.
  • Il permet de centraliser les métadonnées liées à l’application sur les stores (images, captures d’écran, descriptions, …), et de pousser ces informations directement sur les stores : c’est propre et plus simple que de devoir passer par l’interface de saisie propre à chaque store pour mettre à jour un texte ou un screenshot.

Les inconvénients de Fastlane :

  • Ce n’est pas un outil “plug & play” comme Expo : la courbe d’apprentissage est plus élevée, il faut prendre le temps de comprendre la documentation et les options de configuration.
  • Il n’est pas toujours facile de comprendre ce que Fastlane fait quand on lance une commande. Ça peut compliquer les tâches des développeurs quand tout ne se passe pas comme prévu.

— Tests utilisateurs : Firebase App Tester + Testflight

Pour faire tester les applications sur Android et iOS sans attendre leur déploiement sur les stores, nous utilisons Firebase App Tester et Testflight.

Firebase App Tester

Firebase App tester est un outil de Google, qui permet de tester les applications mobiles avant de les publier.

Les avantages de Firebase App Tester : 

  • Même si c’est un outil Google, il permet de tester les versions Android mais aussi iOS, et tout est publié en une seule fois.
  • Une fois configuré, il donne accès à tout l’univers de Firebase, qui fournit de nombreuses fonctionnalités utiles.
  • Les testeurs sont notifiés à chaque nouvelle version de l’app.

Les inconvénients de Firebase App Tester : 

  • Cela reste un outil un peu complexe à mettre en place.
  • Chaque fois que vous voulez ajouter un testeur sur iOS, une action manuelle d’un développeur est nécessaire.
  • Le test d’applications mobile sur iOS en passant par App Testeur reste incomplet, c’est pourquoi nous utilisons Testflight en complément.

Testflight

Testflight est un outil fourni par Apple pour tester les applications iOS avant de les publier. Par sécurité nous utilisons Testflight en plus de Firebase App Tester car il permet de tester les applications en conditions réelles dans l’environnement iOS : c’est notamment indispensable pour tester le bon fonctionnement des notifications, par exemple.

Les avantages de Testflight :

  • C’est un outil relativement simple à mettre en place pour tester une application sous iOS.
  • Il utilise la même interface que celle utilisée pour les publications sur l’App Store d’Apple.
  • Il est très simple pour l’utilisateur final, et utilisé par de nombreux développeurs.

Les inconvénients de Testflight 

  • C’est un outil Apple, disponible uniquement pour iOS.

Expo ou pas Expo ? Nos recommandations !

Si vous souhaitez découvrir React Native, ou développer une petite application sans achats in app qui n’évoluera pas, Expo est clairement une bonne option. En effet, il est vraiment très simple à prendre en main, c’est donc un bon outil pour démarrer sur React Native.

Mais si vous savez que l’application sera amenée à évoluer, à intégrer de nouvelles fonctionnalités (et notamment les achats In App), faites bien attention. 

Certes vous gagnerez du temps en début de projet, mais ce temps sera perdu ensuite lorsque vous vous creuserez la tête pour sortir d’Expo. 

C’est pour cette raison que je ne recommande pas Expo pour un usage professionnel. Dans tous les cas, il faut décider dès le début du projet si vous utilisez Expo ou pas, en analysant bien les besoins actuels et futurs.

Mais Expo reste un framework à suivre, qui a vocation à devenir incontournable. 

Il évolue en permanence, et les problèmes que nous avons cités seront peut-être réglés demain. On peut déjà aujourd’hui utiliser certaines fonctionnalités clés d’Expo (Mises à jour OTA, librairies de fonctionnalités natives, utilisation de Expo Go…) sans passer intégralement par Expo pour développer son application. C’est clairement un axe à creuser pour allier le meilleur des deux mondes : la souplesse d’une application React Native, combinée à la force des fonctionnalités d’Expo.

Simon Galet

Simon Galet

Architect developer @theTribe

Et si on discutait ?