KMM | Kotlin Multiplatform Mobile - Notre avis et retour d'expérience

Notre avis sur KMM. Qu'est-ce que KMM (Kotlin Multiplatform Mobile) ? Un retour d'expérience de l'intégration de KMM dans un projet d'application mobile.
KMM | Kotlin Multiplatform Mobile - Notre avis et retour d'expérience

Kotlin Multiplatform Mobile ou KMM offre une alternative à React Native et Flutter, permettant aux développeurs de créer des applications natives pour iOS et Android en partageant efficacement du code Kotlin.
Cette approche promet une productivité optimale et une uniformité entre les plateformes, ouvrant ainsi la voie à de nouvelles possibilités pour les projets mobiles multiplateformes.
Nous donnerons ici notre avis sur KMM et partagerons nos premiers retours d'expériences sur l'intégration de KMM dans des projets d'application mobile.

Un projet KMM ?
Contactez-nous !

Qu’est-ce que KMM ou Kotlin Multiplarform Mobile ?

Conçu par JetBrains, KMM (Kotlin Multiplatform Mobile) offre une approche cross-platforme efficace en permettant aux développeurs de partager la logique métier, les algorithmes et même certaines parties de l'interface utilisateur entre les deux plateformes mobiles iOS et Android, tout en conservant la possibilité d'écrire du code spécifique à chaque plateforme lorsque nécessaire.
Cette approche doit permettre une meilleure réutilisation du code, une maintenance simplifiée et une cohérence maximale entre les versions iOS et Android d'une application.

Un peu d’historique sur Kotlin et KMP

JetBrains

Logo Jetbrains

JetBrains est une société de logiciels fondée en 2000 en République tchèque par Sergey Dmitriev, Valentin Kipiatkov et Eugene Belyaev.
JetBrains est réputé pour son expertise dans le développement d'outils de développement logiciel de haute qualité et innovants.

Kotlin

Kotlin, créé en 2010 par JetBrains et annoncé publiquement en 2011.
Il est prévu dès le départ pour fonctionner avec la JVM, javascript mais aussi sur des plateformes natives grâce à LLVM.

Après sa sortie officielle en 2016, Kotlin a rapidement gagné en popularité grâce à ses fonctionnalités avancées telles que la nullabilité explicite et les extensions de fonction.

En 2017, Google a officiellement annoncé son support pour Kotlin sur Android, propulsant encore davantage son adoption. Aujourd’hui, Kotlin est largement utilisé dans le développement d’applications Android, ainsi que dans d’autres domaines tels que le développement web et backend.
Reconnaissable pour sa lisibilité, sa sécurité et sa compatibilité avec le code Java existant, Kotlin est devenu un choix privilégié pour de nombreux développeurs.

KMP

En 2017, JetBrains présente Kotlin Multiplatform (KMP) comme une solution pour partager du code entre différentes plateformes, notamment la JVM, JavaScript, et d'autres.

Comparatif des environnement et technologies Java, JS et LLVM

Kotlin Multiplatform (KMP) continue de grandir et mûrir jusqu’en 2020 lorsque JetBrains annonce la création de Kotlin Multiplatform Mobile (KMM), une extension de KMP dédiée au développement d'applications mobiles natives pour iOS et Android.

Dès lors, KMM a gagné en popularité auprès des développeurs mobiles, offrant une alternative efficace à d’autres cadres de développement mobile cross-plateformes tels que React Native et Flutter.
La communauté des développeurs continue d’adopter KMM pour ses avantages en termes de partage de code, de productivité accrue et de cohérence entre les plateformes.

En 2021, JetBrains annonce Compose Multiplatform, une extension de Kotlin Multiplatform qui permet aux développeurs de partager des composants d'interface utilisateur créés avec Jetpack Compose.
Depuis 2023, Compose Multiplatform est officiellement passé en version alpha pour iOS et il est désormais possible de réaliser des application entière en KMM.

Pour connaître toute la roadmap 2024 de KMP et KMM, vous pouvez lire notre article dédié.

Comprendre l'architecture de KMM

La philosophie KMM

KMM a été pensé dans une approche hybride qui permet de partager du code entre les plateformes iOS et Android, mais également de conserver une partie native lorsque cela est nécessaire.
C’est une des spécificité de cette technologie qui permet de partager uniquement ce que l’on souhaite partager.

Découpage du code avec KMM

La philosophie de Kotlin Multiplatform Mobile (KMM) repose sur plusieurs principes fondamentaux :

L'architecture KMM

La structure d'un projet Kotlin Multiplatform Mobile (KMM) est généralement organisée de manière à séparer clairement le code partagé entre les différentes plateformes (iOS, Android) du code spécifique à chaque plateforme.

Le module se découpe en 3 parties :

Architecture KMM

Lorsqu’un composant ne peut pas être directement développé dans la partie Common, on peut alors utiliser la fonctionnalité expect/actual de KMM.
Les mots-clés actual et expect sont utilisés pour définir des déclarations de fonction, de classe ou de propriété qui sont implémentées différemment selon la plateforme cible.

Voici une explication plus détaillée de ces concepts :

Ci-dessous un exemple de découpage du code partagé et spécifique avec KMM :

Découpage code avec KMM

Notre avis sur KMM

Ci-dessous notre avis sur l'utilisation de KMM au sein d'un projet d'application mobiles.
Ces retours sont issus d'une part de notre propre expérience et d'autre part de témoignages clients.

Les avantages de KMM

Les axes d'améliorations

Les challenges organisationnels

L'intégration de KMM au sein d'un projet d'application mobile induit une organisation et une réflexion sur l'utilisation des ressources au sein d'une équipe de développement.
Les développeurs Android auront naturellement une appétence plus forte pour KMM et l'éco-système Kotlin.
Les retours clients montrent qu'un déséquilibre de vélocité peut apparaître entre l'équipe Android et l'équipe iOS, dans le cas où les développeurs Android sont en charge du développement du code commun. Ils sont alors moins véloces sur le développement des features, créant un décalage avec les features iOS.

Une autre stratégie d'organisation serait de positionner des ressources uniquement dédiées à KMM, en conservant des équipes purement sur le natif. Cette organisation demande un suivi plus poussé des interfaces entre les équipes et de la gestion des dépendances.

D'une manière générale, l'intégration de KMM dans les stacks de développement des équipes mobiles semble prendre de plus en plus d'ampleur sur le marché. Cette article a pour vocation d'être mis à jour afin de capitaliser sur les retours d'expérience les plus récents.

Si vous projeter d'intégrer du KMM dans une projet d'application mobile ou si vous souhaitez échanger sur un retour d'expérience n'hésitez pas à nous contacter.

Un projet KMM ? Contactez-nous !

Exemple concret d'un développement avec KMM

Créer un projet avec KMM

KMM permet au développeur mobile de conserver ses habitudes en termes d’outils de développement. On pourra ainsi utiliser les IDE propres aux plateformes à savoir Android Studio ou xCode.

Création d’un projet mobile avec KMM via Android Studio :

Tutoriel création d'un projet mobile avec KMM

Instanciation du projet mobile avec KMM via Android Studio :

Tutoriel paramétrage d'un projet mobile avec KMM

Mettre en place le socle technique et l'architecture

Modifier la configuration du projet :

Tutoriel architecture d'un projet mobile avec KMM

Tutoriel configuration d'un projet mobile avec KMM

Exemple d'implémentation de Cocoapods en tant que gestionnaire de dépendances dans un projet mobile avec KMM :

Tutoriel gestionnaire de dépendances cocoapoads pour un projet mobile avec KMM

Instanciation des briques de codes communes et spéficiques aux OS Android et iOS :

Tutoriel sourceSets d'un projet mobile avec KMM

La Roadmap ambitieuse pour Kotlin Multiplatform (KMP et KMM) en 2024

JetBrains accélère le développement de son framework Kotlin Multiplatform avec des objectifs ambitieux pour la fin d’année prochaine. De nombreuses évolutions vont être apportées au niveau de l’interface graphique, en particulier pour iOS (KMM)
Leur objectif est clair : devenir un acteur important dans les prochaines années.

La roadmap Kotlin Multiplatform :

  1. Compose Multiplatform : L'ascension vers la maturité
    JetBrains prévoit de rendre les APIs Jetpack Compose et ses composants entièrement multi-plateforme. Il est également évoqué la mise en place d’une solution de navigation multi-plateformes.
    Côté iOS, les objectifs sont :
  1. Performance et accessibilité : priorités clés sur iOS
    L'amélioration des performances sur iOS est une priorité absolue, avec des efforts considérables déployés pour optimiser l'expérience utilisateur sur les appareils Apple. De plus, l'ajout d'APIs d'accessibilité pour iOS témoigne de l'engagement de Kotlin envers une expérience inclusive, pensée pour tous les utilisateurs.

  2. Expansion de compose : desktop et web
    L'expansion de Compose s'étendra également aux versions pour desktop et web, soulignant l'engagement de Kotlin envers un développement véritablement universel.

  3. Outils et débogage : vers plus de stabilité
    Reconnaissant les défis actuels, 2024 verra une amélioration des outils et du débogage unifié pour KMM, visant à créer une expérience plus stable et fluide pour les développeurs.

  4. Kotlin à Swift : Une transition directe
    Kotlin permettra l'exportation directe du code en Swift, éliminant le besoin de passer par Objective-C. Cette évolution représente un bond en avant dans l'interopérabilité entre les écosystèmes Kotlin et Swift.

  5. Compilation Native et Support de SPM
    L'amélioration de la compilation native et du support de CocoaPods, puis l’ajout du support de Swift Package Manager (SPM) ouvriront de nouvelles possibilités pour les développeurs travaillant sur des projets multiplateformes.

  6. KMP : Liberté et Flexibilité Accrues
    La possibilité de générer une librairie KMM sans Mac est une avancée majeure. De plus, JetBrains fournira des templates et guidelines qui permettront de faciliter et standardiser la création de librairies KMP.

Conclusion

La roadmap 2024 de KMM marque un tournant décisif dans le développement multiplateforme. Avec des améliorations majeures en termes de performance, d'accessibilité, et d'interopérabilité, Kotlin se positionne comme un acteur clé dans l'évolution du développement d'applications mobiles.
JetBrains tient à rassurer la communauté de développeurs en indiquant que les librairies construites en anciennes versions de KMP seront toujours fonctionnelles.

Publié par Jessy Bonnotte