Et si Compose Multiplatform devenait LE nouveau langage de programmation cross-plateforme ?

Marion Griesemann Responsable Éditoriale
Marwa Nasrallah Développeuse Android
26 Août 2024 • Lecture 8 min

Alors que Flutter et React Native dominent pour l’instant le marché du développement cross-plateforme, un jeune couple semble depuis quelques temps sortir de l’ombre. Son crédo ? Proposer une solution commune pour créer des interfaces multiplateformes (applications Android, iOS mais aussi web) en comptant sur le mariage de deux technologies made in JetBrains. D’un côté Kotlin Multiplatform (KMP), qui permet de partager les fondements d’un service codé en Kotlin sur plusieurs plateformes, et de l’autre Compose Multiplatform (CMP), qui y ajoute la couche graphique.

Si on ne présente déjà plus KMP (enfin si, nous on l’a fait dans cet article), on pourrait en fait dire que CMP, extension du framework Jetpack Compose de Google sur Android, vient la compléter en proposant une solution de création d'interfaces partagée entre les plateformes.  

Mais comment fonctionne exactement ce mariage ? Avez-vous intérêt à l’adopter dans vos projets d’apps ? Peut-il à date rivaliser avec d’autres solutions ? On fait le point. 

Comment fonctionne le duo Compose Multiplatform et Kotlin Multiplatform ?

©USERADGENTS (visuel adapté de la conférence de Sebastian Aigner de JetBrains lors de la KotlinConf’2024)

Dans le couple, KMP joue le rôle de la première pierre. Il va permettre de partager toutes les “couches basses” d’une application (les appels aux webservices, la gestion du cache et donc la logique métier) en générant un code spécifique à chaque plateforme. CMP de son côté va un pas plus loin en permettant le partage de la couche UI de l’application. Concrètement, cela permet d’éviter de recréer l’interface puisqu’on va la définir une seule fois en Kotlin. Il reste toutefois possible de personnaliser le code pour chaque plateforme, par exemple pour le web grâce à l'interopérabilité avec le langage Javascript ou pour iOS en insérant directement des vues natives (widgets UIKit ou même SwiftUI) dans une fonction Composable, de la même manière que pour les autres plateformes où l'utilisation des API UI natives est nécessaire. 

Qui utilise KMP-CMP aujourd’hui ? 

Bien que son usage reste encore relativement faible, quelques acteurs ont déjà fait le choix du couple KMP-CMP, avec pas mal de succès. 

JetBrains Toolbox

Cette application desktop permet à ses 1 million d’utilisateurs actifs la gestion centralisée des IDE de JetBrains. En 2021, elle a migré à 100% sur Kotlin et son interface utilisateur est passée de React à CMP.

Instabee (application interne)

La société de technologie logistique suédoise spécialisée dans la livraison de dernière minute a fait appel au couple KMP-CMP pour favoriser la publication rapide de l’app iOS en exploitant la base de code Android.

Markaz

Développée avec CMP pour Android et iOS, Markaz est une application / marketplace de social commerce très populaire au Pakistan avec plus de 1 million de téléchargements.

Quels sont les avantages de KMP-CMP ?

Développement rapide

KMP-CMP encourage la réutilisation maximale du code ce qui réduit considérablement le temps et les ressources nécessaires au développement d'applications. Les développeurs peuvent alors se concentrer sur les spécificités de chaque plateforme et vont donc déployer plus rapidement que si chaque version était développée indépendamment.

Meilleure maintenabilité

Avoir une seule base de code améliore aussi la maintenabilité du projet car les mises à jour et les corrections de bugs vont être effectuées une seule fois et se propager automatiquement sur toutes les plateformes. Un moyen aussi de réduire les potentielles incohérences et de faciliter la gestion des versions et des mises à jour.

Code propre

Kotlin étant réputé pour sa syntaxe claire et concise et Jetpack Compose encourageant à l'utilisation de modèles de conception modernes et réactifs, le couple KMP-CMP devrait permettre d'écrire un code plus propre et surtout plus facile à lire. 

Interopérabilité

KMP-CMP utilise les technologies Kotlin/Native pour compiler et exécuter du code Kotlin sur des plateformes comme iOS, macOS, Linux ou Windows et Kotlin/Wasm sur des projets Web en Javascript. Elles génèrent automatiquement des liaisons (ou « bindings ») avec le code natif permettant au code Kotlin d'appeler des API, natives elles aussi, telles que les bibliothèques écrites en Objective-C ou Swift sur iOS. 

À noter qu’avec Kotlin/Native, Compose Multiplatform est aussi interopérable avec UIKit (et grâce à ses ViewControllers avec SwiftUI) ce qui ouvre la voie à la création d’interfaces utilisateur cohérentes tout en tirant parti des fonctionnalités spécifiques de chaque plateforme. Il faut toutefois garder en tête que l’interopérabilité, avec UIKit notamment, n’est pas toujours simple car certaines fonctionnalités d’assistance sont plus difficilement accessibles. Par exemple pour l’auto-complétion, JetBrains recommande l’utilisation de son IDE Fleet spécialement conçu pour le développement avec KMP mais l'outil reste peu stable car encore en Preview. 

Flexibilité

KMP-CMP offre une grande flexibilité en permettant aux développeurs de choisir les parties de leur application qu'ils souhaitent partager et celles qu'ils préfèrent développer de manière native. L’optique ? Combiner les performances du natif en matière d’expérience utilisateur et les avantages de la réutilisation du code. Par exemple, pour iOS, il est possible de créer des interfaces uniquement avec SwiftUI si cela semble plus approprié pour le projet. En somme, l’utilisation du duo favorise une approche modulaire du développement, en adaptant l’utilisation de CMP aux besoins de chaque service.

Des performances qui pourraient concurrencer celles des applications natives

Par définition, un code natif est un code qui communique directement avec les composants physiques d'un périphérique sans nécessiter d’intermédiation par une machine virtuelle. Un véritable atout de performance dont bénéficie aussi le couple KMP-CMP grâce à Kotlin/Native qui va compiler le code Kotlin directement en code machine natif pour des plateformes natives. Nul besoin d’avoir une machine virtuelle à l'exécution (runtime) contrairement à Flutter par exemple qui utilise Dart VM. Dans son cas, le code Dart (propre au framework Flutter) va être compilé en un bytecode intermédiaire qui sera ensuite exécuté sur une machine virtuelle, Dart VM, incluse dans l’application et spécialisée dans l’exécution du code. C’est elle qui va alors gérer la mémoire et interagir avec le système d’exploitation concerné. Attention, Flutter offre tout de même un excellent rendu et des performances généralement solides mais il peut parfois y avoir une légère surcharge due à la présence de cette machine virtuelle. Côté KMP-CMP, c’est différent puisque les systèmes d'exploitation natifs peuvent exécuter directement le code ce qui pourrait laisser présager des performances proches de celles des applications natives.1

Petite nuance toutefois : il est important de noter que le côté natif ne concerne pas l'aspect visuel, qui est déterminé par les composants graphiques utilisés. Dans le cas de CMP, l'aspect visuel est déterminé par Skia qui est une bibliothèque de graphiques 2D maintenue par Google. Skia est utilisée dans des projets de grande envergure comme Chrome, Android et Flutter, ce qui garantit a priori sa fiabilité.

Le support de Google

Lors de la Google I/O 2024, Google a officiellement annoncé son support pour Kotlin Multiplatform et Compose Multiplatform, renforçant leur crédibilité et l'avenir de ces technologies. Ce support officiel signifie également que les outils et les intégrations seront davantage optimisés pour fonctionner avec KMP-CMP, ce qui devrait aboutir à une meilleure expérience pour les développeurs et garantir une adoption plus large sur le marché.

“L’annonce de ce support de la part de Google peut sembler étonnante. En effet, Flutter étant un produit Google, on aurait pu imaginer que l’entreprise ne favoriserait pas le déploiement d’un autre framework multi-plateforme que le sien, celui de JetBrains en l'occurrence. Pour autant, ce n’est pas la première fois que Google montre un intérêt pour les technologies de JetBrains et notamment pour KMP. L’année dernière, elle l’avait adopté pour son projet Google Workspace qui porte toute la suite Gmail, Calendar, Meet, Docs, etc. Selon nous, cela peut s’expliquer par l’étroite collaboration qui unit déjà Google et JetBrains, sur l’IDE Android Studio par exemple ou depuis l’adoption de Kotlin comme langage officiel pour Android. Cela ne serait donc qu’un pas de plus dans ce sens. Reste à voir comment le duo KMP-CMP va évoluer face à d’autres technologies comme Flutter et si Google peut jouer un rôle là-dedans.”

Marwa Nasrallah, Développeuse Android

Quels sont les inconvénients de KMP-CMP ? 

Malgré ces avantages, quelques freins doivent être pris en compte pour envisager l’utilisation de ces deux technologies. 

D’abord, la maturité. En effet, si KMP est stable sur toutes les plateformes, CMP ne l’est pour l’instant que sur Android et desktop (pour des applications de bureau pour Windows, macOS, Linux…) mais reste en beta sur iOS et en Alpha sur le web. Les conséquences de cette récence de CMP ? Peu de documentation, de guides et de ressources d'apprentissage pour les développeurs aujourd’hui, ce qui peut engendrer des difficultés pour résoudre des problèmes spécifiques ou pour implémenter des fonctionnalités avancées. 

N’oublions pas non plus que même si KMP peut être un véritable challenger pour les autres technologies cross-plateformes sur le marché et qu’elle existe maintenant depuis longtemps, son utilisation reste relativement faible (entre 2% et 4% d’adoption en 2023), en tout cas loin derrière celle de Flutter (autour de 45%) et React Native (autour de 35%). Cela peut s’expliquer entre autres par l’absence de mutualisation de l’UI qui la caractérisait jusqu’à maintenant et il conviendra de voir demain comment s’en saisira la communauté des développeurs avec l’arrivée de CMP.

Enfin, et comme pour toutes les technologies cross-plateformes, les connaissances doivent être plus multiples. Même si KMP-CMP vise à partager le code, les développeurs doivent quand même comprendre les spécificités de chaque plateforme pour gérer les cas où des adaptations seraient nécessaires.

“Si le passage en bêta d’iOS sur CMP retient particulièrement notre attention, il est encore trop tôt pour lancer un projet avec cette technologie selon nous. Nous préférons chez USERADGENTS privilégier pour l’instant l’usage de Flutter pour des développements cross-plateformes car il a largement fait ses preuves. Nous allons toutefois dans le cadre de notre démarche R&D garder un œil sur CMP et investir davantage de temps pour être prêts lorsque cette technologie sera mature.”

Prigent Roudaut, Head of Mobile

Compose Multiplatform, couplé avec Kotlin Multiplatform, représente une avancée majeure dans le développement cross-plateforme. Sa capacité à combiner performance native et flexibilité de l'interface utilisateur en fait un choix particulièrement prometteur pour les développeurs Android ayant déjà de l'expérience avec Compose et Kotlin. Attention en revanche, si le couple KMP-CMP apparaît en effet comme une solution assez simple d’accès pour des équipes de développement natif, des équipes cross-plateformes pourraient avoir plus de difficultés à franchir le pas. Chez USERADGENTS, nous allons donc rester attentifs à son déploiement et à sa maturité car le chemin reste encore long à parcourir. Affaire à suivre ! 


Vous avez des questions sur CMP et envisagez d’utiliser la techno pour vos projets ? Contactez-les experts en développement d’applications mobiles de l’agence design et tech USERADGENTS.

1- Source : Github

Sur le même sujet

Étude : Pourquoi est-il urgent de refondre votre site en 2026 ?
10/06/2026

Étude : Pourquoi est-il urgent de refondre votre site en 2026 ?

Je découvre arrow_forward
expand_less