Comment assurer la transition entre une application native et une application hybride Flutter ?

Process de migration des données locales, phase de tests, différences entre les builds release et debug, …

Aperçu de l'application mobile Affluences nouvelle génération
Aperçu de la nouvelle application mobile Affluences : téléchargez-la !

Nous vous parlions il y a quelques temps de la toute nouvelle version de l’application faite avec Flutter, qui était en développement et bientôt disponible au publique.

C’est chose faite ! Nous avons pour l’instant lancé une publication progressive sur le Play Store et l’App Store (bientôt complète) !
Le but de cette article est d’expliquer comment nous avons fait la transition de notre version native (Android et iOS) à la version cross-platform Flutter.

Nous voulions par exemple garder certaines préférences de l’utilisateur afin d’assurer une transition “fluide”. Nous utilisons le plugin “SharedPreferences” sur Flutter pour stocker ces préférences. Malheureusement, ce plugin n’utilise pas le même fichier que notre version native. Nous avons donc dû écrire du code natif (Kotlin et Swift), spécifique à notre besoin pour pouvoir récupérer les anciennes préférences et les stocker dans les nouvelles. Le fait de devoir migrer ces données nous a notamment permis de découvrir un bug dû à ProGuard sur les versions natives qui, heureusement, n’a pas été bloquant sur la migration. En effet, le modèle concernant certaines préférences était obfusqué . Les clés du JSON sauvegardé n’étaient donc plus identiques (ex: “app_startup” devenait “a”). Nous avons contourné ce problème en utilisant les valeurs obfusquées pour migrer les données.

Au tout début du développement, Flutter était à la version 1.2.1, au fur et à mesure nous mettions Flutter à jour, pour aujourd’hui être à la version 1.6.3. Cela a notamment permis de corriger certains bugs, comme par exemple les minutes des TimePicker qui n’était pas sélectionnées automatiquement.

Il n’y a rien de pire que de publier une mise à jour qui rend inutilisable une application.

C’est pourquoi, différentes phases de tests ont eu lieu avant la publication afin de nous assurer que la migration des données fonctionne correctement et qu’aucun bug n’est présent. Il y a eu dans un premier temps des BETA toutes les 2 semaines, restreintes à quelques personnes, puis des Release Candidate toutes les semaines, avec un nombre d’utilisateur un peu plus important. Cela nous a permis d’identifier des bugs restants et certains points à améliorer, que ce soit niveau UI ou UX. En complément, nous avons mis en place différents tests unitaires ainsi que des tests d’intégrations afin d’assurer la pérennité de l’application et éviter d’éventuelles régressions dans les futures mise à jour.

Malgré le changement de technologie majeure et l’ajout de nombreuses nouvelles fonctionnalités, tous ces mécanismes nous ont permis de lancer cette nouvelle version tant attendue avec sérénité. Cette base solide va nous permettre de consolider notre cycle de développement et de proposer de nouvelles fonctionnalités toujours plus rapidement !

La nouvelle application Affluences

Comme nous l’avons annoncé dans notre précédent article, la prochaine version majeur de l’application Affluences sera développée avec Flutter, un SDK permettant de réaliser des applications cross-platform avec le langage Dart.

Avant de commencer à porter l’application Affluences du natif vers Flutter, nous nous sommes assurés que toutes les fonctionnalités nécessaires étaient disponibles (couche réseau, persistance des données, géolocalisation, traductions, etc). Malgré la jeunesse du projet (la première version stable a été publiée en décembre 2018); Flutter dispose de suffisamment de packages et de librairies pour développer une application nécessitant des fonctionnalités natives. L’autre interrogation majeure que nous avions concernait les performances. Après plusieurs séries de tests, les résultats étaient pleinement satisfaisants avec un framerate stable à 60 fps.


Flutter nous apporte différents avantages. Le plus important est indéniablement le gain de temps que génère l’utilisation d’un framework cross-plateforme, puisque nous utilisons une seule et même base de code pour Android et iOS. D’autres fonctionnalités, comme le Hot-reload, facilitent le processus de développement. Le fonctionnement par Widget permet également de développer des vues uniformes sur iOS et Android. La construction de vues complexes n’a jamais été aussi simple !

Malgré cela, quelques doutes subsistent : certains packages de base, comme l’affichage de contenu sur une carte, semblent encore être en développement. Notre utilisation de ce module étant assez simple, les fonctionnalités disponibles sont suffisantes, mais cet exemple témoigne de la jeunesse du framework que nous avons déjà évoqué. Cependant, nous pouvons d’ores et déjà compter sur une communauté dynamique et grandissante qui aide Flutter à se développer.

Pour développer la nouvelle version de l’application Affluences, nous utilisons VSCode avec le plugin Dart et Flutter. Cet environnement fonctionne parfaitement et est bien moins gourmand comparé à Android Studio.

Avec Flutter, de très belles perspectives s’ouvrent pour l’application mobile Affluences, aussi bien d’un point de vue fonctionnalités que d’un point de vue design. Pour preuve, voici un premier rendu de la prochaine version !

L’application mobile Affluences, du natif vers le cross-platform.

L’application Affluences a officiellement été lancée le 1er octobre 2014. À cette époque, nous diffusions uniquement le temps d’attente de la Bpi, l’une des bibliothèques les plus fréquentées de Paris. Lorsque nous avons commencé le développement de l’application, les solutions cross-plateform existantes ne supportaient pas toutes les fonctionnalités systèmes et souffraient de problèmes importants de performances (chargement des données lent, latences visibles dans les animations ou la navigation, …), même sur les smartphones les plus répandus.

Malgré le gain de temps certain que nous apportaient ces framework, nous avons décidé d’utiliser les langages natifs sur chaque plateforme afin de garantir une expérience fluide à nos utilisateurs.

Première version de l'application mobile Affluences iOS Trois écrans : temps d'attente, horaires et infos pratiques

La première version de l’application Affluences était… épurée !

À mesure que de nouveaux établissements partenaires rejoignaient l’application, celle-ci a gagné de nouvelles fonctionnalités : informations pratiques, services, filtres, visualisation des établissements à proximité, … La dernière en date a d’ailleurs été suggérée directement par nos utilisateurs : la vue « Mes réservations ».

La vue "Mes réservations" permet de consulter l'historique des réservations faites par l'utilisateur
La vue « Mes réservations » permet de consulter l’historique des réservations faites par l’utilisateur.

Nous avons en parallèle fait évoluer nos applications en fonction des nouveautés apportées pour chaque plateforme. C’est donc naturellement que nous avons migré notre base de code d’Objective-C vers Swift lorsque la version 2.0 a été annoncée par Apple en septembre 2015. Cette transformation a pu se faire progressivement grâce à l’interopérabilité entre les deux langages. En effet, il n’a pas été nécessaire de tout réécrire d’un seul coup : nous avons développé les nouveautés directement en Swift et traduit la base de code existante lorsque nous devions y apporter des changements.

Aujourd’hui, nous utilisons donc les dernières versions des langages et outils proposés par Apple et Google pour les systèmes mobiles. En revanche, la prochaine version majeure de l’application Affluences utilisera quant à elle le SDK Flutter qui permet de développer avec une base de code commune en Dart tout en garantissant une expérience fluide. Plus d’informations à venir lorsque nous aurons une première version …!