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
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.
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.
La philosophie de Kotlin Multiplatform Mobile (KMM) repose sur plusieurs principes fondamentaux :
-
Réutilisation du code : KMM encourage la réutilisation du code Kotlin entre les applications mobiles iOS et Android, permettant aux développeurs de partager la logique métier, les algorithmes et les composants d'interface utilisateur pour réduire la duplication et maximiser l'efficacité du développement.
-
Cohérence entre les plateformes : En utilisant Kotlin comme langage commun, KMM vise à assurer une cohérence maximale entre les applications iOS et Android, garantissant une expérience utilisateur uniforme tout en simplifiant la maintenance et les mises à jour.
-
Flexibilité et contrôle : KMM offre aux développeurs la flexibilité nécessaire pour écrire du code spécifique à chaque plateforme lorsque cela est nécessaire, leur permettant de tirer parti des fonctionnalités natives et des bibliothèques propres à chaque plateforme tout en partageant le reste du code.
-
Interopérabilité avec les technologies existantes : KMM est conçu pour s'intégrer facilement aux écosystèmes de développement existants, permettant aux développeurs de tirer parti des outils, des bibliothèques et des frameworks populaires tels que Jetpack Compose, SwiftUI, et d'autres.
-
Innovation continue : JetBrains s'engage à faire évoluer et à améliorer constamment KMM en fonction des retours des développeurs et des évolutions technologiques, garantissant ainsi une plateforme robuste et adaptée aux besoins changeants du développement mobile multiplateforme.
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 :
- Common : contient le code en Kotlin native partagé entre toute les plateformes
- Android : Le code spécifique à Android. C’est le code qui demande d’accéder directement à des ressources d’Android
- iOS : Le code spécifique à iOS. C’est le code qui demande d’accéder directement à des ressources d’iOS
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 :
- expect :
- Le mot-clé expect est utilisé pour déclarer une entité (fonction, classe, propriété) dont l'implémentation doit être fournie dans chaque plateforme cible. Cela permet de définir une interface commune qui sera utilisée dans tout le code partagé.
- Par exemple, dans un projet KMM, vous pouvez déclarer une fonction expect pour effectuer une opération spécifique, telle qu'un appel réseau. Cette déclaration indique que chaque plateforme cible doit fournir une implémentation de cette fonction.
- actual :
- Le mot-clé actual est utilisé pour fournir une implémentation concrète d'une entité déclarée avec expect. Chaque plateforme cible aura sa propre implémentation réelle de cette fonction, classe ou propriété.
- Les déclarations actual se trouvent dans les modules spécifiques à chaque plateforme et fournissent une implémentation adaptée à la plateforme respective.
Ci-dessous un exemple de découpage du code partagé et spécifique 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
- UI Native
- Kotlin est proche de Swift
- L'intégration de librairies externes est simple
- La documentation et la communauté sont une force de l'éco-système
- La possibilité de faire du code Natif pour iOS et d'utiliser la JVM pour Android
Les axes d'améliorations
- Le pur Swift n'est pas pris en compte pour les dépendances
- Quelques incompatibilités dans la gestion des threads
- Quelques incompatibilités de type
- Difficultés à remonter les crashs côté iOS, cela peut avoir un impact sur les investigations, et sur le taux de crash
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 :
Instanciation du projet mobile avec KMM via Android Studio :
Mettre en place le socle technique et l'architecture
Modifier la configuration du projet :
Exemple d'implémentation de Cocoapods en tant que gestionnaire de dépendances dans un projet mobile avec KMM :
Instanciation des briques de codes communes et spéficiques aux OS Android et iOS :
La roadmap 2025 Kotlin Multiplatform : Vers une maturité complète
JetBrains a dévoilé une roadmap ambitieuse pour 2025, confirmant l'engagement à long terme de l'entreprise envers Kotlin Multiplatform. Cette annonce fait suite au support officiel de Google pour KMM annoncé lors de la Google I/O 2024, marquant un tournant majeur pour la technologie.
Les principaux axes de développement pour 2025 sont :
- Compose Multiplatform
- Stabilisation complète de la version iOS
- Parité totale des fonctionnalités avec Jetpack Compose
- Amélioration significative des performances de rendu sur iOS
- Développement des composants de navigation multiplateforme
- Renforcement de la documentation
- Outillage et IDE
- Lancement d'un IDE KMP autonome basé sur JetBrains Fleet
- Support linguistique amélioré pour Kotlin et Swift
- Exploration du développement iOS sur machines cloud
- Intégration poussée avec les outils d'IA
- Exportation Kotlin vers Swift
- Première version publique prévue
- Support élargi des fonctionnalités Kotlin
- Amélioration de l'expérience utilisateur par rapport à l'export Objective-C
- Écosystème des bibliothèques
- Amélioration du format klib
- Nouveaux outils de compatibilité d'API
- Simplification du processus de publication
- Lancement d'une plateforme de recherche de bibliothèques KMP
- Outils de build
- Support des dépendances au niveau projet
- Nouveau format de distribution pour les bibliothèques
- Support complet de Declarative Gradle
- Amélioration de l'intégration Kotlin/Native
Cette roadmap démontre la volonté de JetBrains de faire de KMM une solution mature et complète pour le développement multiplateforme, s'appuyant sur l'adoption croissante par des entreprises majeures comme Shopify, Forbes, Haier et la Banque cantonale de Zurich.
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 :
- 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 :
- améliorer les performances de rendu,
- le scrolling et l’édition de texte pour qu’ils aient le même comportement que dans une app native iOS,
- intégrer les APIs d’accessibilité pour iOS
En 2024, Compose for iOS franchira un cap majeur en entrant en phase bêta.
-
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. -
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. -
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. -
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. -
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. -
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.
FAQ
Qu'est-ce que KMM (Kotlin Multiplatform Mobile) ?
KMM est une technologie développée par JetBrains permettant de créer des applications mobiles natives pour iOS et Android en partageant du code Kotlin entre les plateformes. Elle permet aux développeurs de mutualiser la logique métier tout en conservant des interfaces utilisateur natives spécifiques à chaque plateforme.
Quels sont les avantages de KMM par rapport à d'autres solutions cross-platform ?
KMM offre plusieurs avantages clés - il permet de conserver des interfaces utilisateur natives pour de meilleures performances, facilite la réutilisation du code métier entre plateformes, et s'intègre parfaitement avec les outils de développement existants. De plus, il offre une grande flexibilité en permettant d'écrire du code spécifique à chaque plateforme quand nécessaire.
KMM est-il prêt pour la production ?
Oui, KMM est considéré comme stable et prêt pour la production. De grandes entreprises comme Netflix, Philips et VMware l'utilisent déjà en production. JetBrains continue d'améliorer activement la technologie et fournit un support robuste.
Quelles compétences sont nécessaires pour développer avec KMM ?
Pour développer avec KMM, il est nécessaire d'avoir une bonne maîtrise de Kotlin et une compréhension du développement mobile natif (Android et iOS). Une connaissance de Swift est également recommandée pour la partie iOS, bien que le code partagé soit écrit en Kotlin.
Comment KMM gère-t-il les différences entre iOS et Android ?
KMM utilise des "expect/actual declarations" pour gérer les différences entre plateformes. Cela permet de définir une interface commune en Kotlin, puis d'implémenter le code spécifique à chaque plateforme tout en maintenant une cohérence dans l'API partagée.