Arrow iconArrow icon used in website

Des apps natives au prix d’une solution cross-platform avec Kotlin Multiplatform

Pendant des années, les développeur·euse·s ont eu le choix entre deux options pour mettre leurs applications mobiles entre les mains des utilisateur·rice·s : l’approche native ou cross-platform. Chacune a ses avantages, ses limites, et le choix dépendait surtout des besoins spécifiques au projet et des ressources disponibles. Aujourd’hui, Kotlin Multiplatform vient changer la donne en proposant une troisième voie : une solution qui combine le meilleur des deux mondes, sans leurs inconvénients. 

Blog_Kotlin

Native vs cross-platform : la perfection n’existe pas

Prenons un moment pour examiner ce que les approches natives et cross-platform (ou multi-plateforme) ont réellement à offrir. Même si leurs avantages et inconvénients peuvent varier selon les projets, nous avons listé pour vous les principales différences 

Performance  

L’un des avantages que l’on cite le plus souvent au sujet des apps natives est leur performance. Elles communiquent en effet directement avec le système d’exploitation, ce qui se traduit par des animations plus fluides, de meilleures performances pour les jeux et une consommation de batterie réduite. 

Les solutions multi-plateformes fonctionnent un peu différemment. React Native, par exemple, utilise une couche intermédiaire qui traduit du code JavaScript abstrait (plus lent par nature) pour l’exécuter sur chaque plateforme. Flutter, en revanche, propose une app entièrement compilée en Dart, ce qui lui permet d’égaler les performances d’une app native 

Accès au hardware  

Certaines fonctionnalités sont uniquement possibles en code natif, car elles nécessitent un accès direct au hardware de l’appareil, comme le NFC, le Bluetooth ou certains types de lecture vidéo.   

Les frameworks multi-plateformes proposent souvent des wrappers pour les fonctions système les plus courantes, mais ils se heurtent régulièrement à des limitations ou doivent recourir à des solutions détournées. Les apps natives, elles, exploitent pleinement les capacités du système, en s’appuyant directement sur les outils développés par Google ou Apple. 

Look-and-feel  

Les apps natives offrent une expérience familière sur le système pour lequel elles sont conçues, en respectant les standards UX/UI propres à chaque plateforme. Lorsque vous développez une app multi-plateforme, en revanche, il peut être difficile de garantir une expérience cohérente sur tous les appareils. Et, quand une app ne semble pas parfaitement adaptée à l’environnement de l’utilisateur·rice, elle est souvent perçue comme moins qualitative 

Travail de développement 

Une chose est sûre : développer deux apps distinctes demande plus de travail que créer une seule app qui fonctionne partout. C’est là que les solutions multi-plateformes brillent : elles permettent souvent de déployer une app sur plusieurs plateformes de manière bien plus rentable. 

Cohérence 

Une base de code partagée facilite grandement la maintenance. L’app a le même comportement et le même aspect sur tous les appareils. Les bugs apparaissent généralement sur toutes les plateformes en même temps, et peuvent être corrigés en une seule fois, ce qui est bien plus efficace que de devoir analyser le problème, trouver une solution et la déployer sur chaque système séparément. 

Sécurité 

Pour certaines applications, la sécurité est cruciale. C’est notamment le cas pour les apps bancaires ou médicales (l’une de nos spécialités). La différence se joue ici dans le fonctionnement même de l’app. Les solutions multi-plateformes utilisent une couche supplémentaire fournie par le stack cross-platform. Et, plus il y a de software, plus le risque de vulnérabilité et de failles de sécurité augmente. 

En résumé : non, la perfection n’existe pas 

Comme vous le voyez, les apps natives et cross-platform ont chacune leurs avantages et leurs inconvénients. Mais alors, comment créer une app rapide, fluide et riche en fonctionnalités… sans exploser le budget ? 

Blog_Kotlin

Kotlin Multiplatform : le meilleur des deux mondes

L’arrivée de Kotlin Multiplatform (KMP) est venue tout changer. Depuis plus de cinq ans, Kotlin est le langage natif de référence utilisé par la majorité des développeurs pour Android. Ces dernières années, JetBrains, l’équipe derrière Kotlin, a considérablement élargi la portée de celui-ci en ajoutant la prise en charge de nouvelles plateformes.  

Outre Android, Kotlin/Native permet de compiler du code Kotlin en code natif pour iOS, macOS, Linux et Windows. Avec Kotlin/JS et Kotlin/WASM, Kotlin peut aussi être utilisé pour le développement web.  

Toutes ces possibilités convergent dans Kotlin Multiplatform (KMP). KMP permet d’utiliser une seule base de code partagée pour cibler plusieurs plateformes. Ce code commun peut être importé en tant que dependency dans des projets natifs iOS, Android ou sur d’autres plateformes telles que le web, et regrouper tous les éléments non visibles (communication réseau, mise en cache, logique business…) qui peuvent être réutilisés dans toutes vos apps. 

Tout ce qu’il vous reste à faire, c’est d’ajouter une interface utilisateur native à chaque app, ce qui est aujourd’hui plus simple que jamais grâce à des frameworks UI modernes tels que Jetpack Compose et SwiftUI. Mieux encore : il sera bientôt possible de partager aussi des éléments UI avec Compose Multiplatform.  

Sur la base des nombreuses apps que nous avons lancées avec succès pour nos clients, nous pouvons affirmer que quasiment tout le code qui ne touche pas directement à l’interface utilisateur peut être partagé sans compromettre les avantages du développement natif. Les performances de KMP atteignent le même niveau, puisque le code Kotlin est compilé en code natif. Tout ce que l’utilisateur·rice voit ou touche est donc 100 % natif. Résultat : une expérience utilisateur authentique, combinée à tous les avantages du multi-plateforme, tant pour les développeur·euse·s que pour nos client·e·s. 

Autre atout : il existe un grand nombre de bibliothèques KMP qui accélèrent le développement, et le nombre de bibliothèques de la communauté ne cesse d’augmenter. KMP gère aussi très bien les fonctionnalités propres à chaque plateforme : le code Kotlin peut appeler directement toutes les fonctions natives prévues par le système d’exploitation. 

En résumé, KMP offre bien le meilleur des deux mondes : les performances et le look-and-feel des apps natives, combinés avec l’efficacité d’une base de code partagée. Comme seule l’interface utilisateur doit encore être développée séparément par plateforme, cela représente un gain de temps considérable, tant pour le développement que pour la maintenance. Et, même si cet article se concentre essentiellement sur Android et iOS, Kotlin Multiplatform permet aussi de créer des apps natives pour macOS, des programmes Windows basés sur Java et des applications web 

Réécrire le passé 

L’une des caractéristiques uniques de KMP est sa capacité à transformer des applications natives existantes en projets multi-plateformes partagés, et ce, même si elles existent depuis longtemps. Une base de code Android bien entretenue peut servir de fondation à un projet KMP, en extrayant les fonctionnalités Android vers une base de code partagée.  

Nous avons ainsi migré avec succès notre plus grand projet d’application, passant de deux apps natives à une seule app KMP, avec une large base de code partagé. Cela nous a permis de supprimer plus de 40 % du code iOS, tout en accélérant les développements futurs. De nombreuses nouvelles fonctionnalités ou ajustements apparaissent désormais automatiquement sur iOS dès que la dependency est mise à jour. Comme les équipes natives ont souvent déjà de l’expérience avec le code KMP, cette transition peut se faire progressivement, sans perturber le travail de développement en cours. 

Partager l’interface utilisateur avec Kotlin Multiplatform  

Mais que faire si l’on souhaite aller plus loin et partager (des parties de) l’UI entre les plateformes ? C’est précisément ce que promet Compose Multiplatform, dès qu’il sera disponible sur tous les environnements. À l’instar de Flutter, il vous permet d’écrire une UI partagée pour toutes les plateformes, en s’appuyant sur ce que les utilisateur·rice·s d’Android connaissent déjà. Les API proposées dans Compose Multiplatform sont quasiment identiques à celles du framework natif Jetpack Compose.  

Certes, en utilisant Compose Multiplatform, vous perdez les avantages d’une UI native sur iOS. Mais pour les utilisateur·rice·s d’Android, l’expérience reste inchangée. Et le partage de l’UI n’est pas une décision radicale : de nombreux éléments visuels sont identiques sur toutes les plateformes. Les cellules ou les éléments de liste, par exemple, doivent souvent avoir le même aspect. Plutôt que de partager toute l’interface, on peut choisir de partager des composants plus petits, et de les intégrer dans l’UI native de chaque app. Lorsque c’est bien fait, l’utilisateur·rice n’y voit aucune différence, mais cela vous permet d’élargir encore la portée de la base de code partagée.  

Compose Multiplatform est actuellement uniquement disponible en version bêta pour iOS et alpha pour le web, mais il est déjà pleinement utilisable pour les apps Android et desktop 

Blog_Kotlin

En résumé

Kotlin Multiplatform combine les avantages des développements natif et cross-platform. Plutôt que de devoir choisir entre les deux, vous décidez vous-même quelle part de code sera partagée et quelle part restera spécifique à chaque plateforme. Cette flexibilité fait de KMP une solution idéale dans de nombreux cas. Pour l’instant, l’interface utilisateur reste entièrement native, mais à l’avenir, vous pourrez aussi choisir de partager certains composants, voire l’UI complète, entre les plateformes. 

Envie d’en savoir plus ?

Nous sommes là pour vous !

Blog_Kotlin

Articles sur le même sujet

Sujets pertinents

Mobile apps