Jour 1
Premiers pas avec Kotlin et la philosophie multiplateforme
Pourquoi Kotlin Multiplatform ? Enjeux, cibles supportées (Android, iOS, Desktop, Web)
Différences clés Kotlin/Java, Projet Android/KMP
Structure d’un projet multiplateforme : commonMain, androidMain, iosMain
Syntaxe de base de Kotlin : types, variables, contrôles, fonctions
Notions orientées objet : classes, interfaces, héritage, data class, enum, délégation
Fonctionnement des expect / actual pour l’abstraction multiplateforme
Installation et configuration de l’environnement de développement (Android Studio, plugins KMP, simulateurs)Travaux pratiquesObjectif : Comprendre l’architecture des modules et compiler un premier code commun.
Description : Création d’un projet KMP simple partageant du code métier entre Android et iOS.Développement mobile multiplateforme (KMM)
Introduction à Kotlin Multiplatform Mobile (KMM)
Intégration dans une app Android et une app iOS
Configuration des IDE (Android Studio/xCode) + plugin KMM
Présentation de Jetpack Compose Multiplatform, Structure d’un projet code partagé et code spécifique
Cycle de vie Android vs iOS, gestion des plateformes spécifiquesTravaux pratiquesObjectif : Mettre en œuvre les bases de l’interface avec gestion du cycle de vie.
Description : Mise en place d’un écran d’accueil multiplateforme avec Compose + logique partagéeNavigation, état et enchaînement des écrans
Architecture de navigation avec Compose Navigation
Notion de ViewModel multiplateforme
Gestion d’état avec State, remember, StateFlow, MutableStateFlow
Navigation entre écrans dans une application Compose
Compatibilité avec SwiftUI / Navigation iOSTravaux pratiquesObjectif : Application à plusieurs écrans (liste + détail), navigation avec passage d’arguments.
Description : Créer une navigation cohérente et dynamique avec gestion d’état partagée.Jour 2Chargement de données distantes (Ktor & serialization)
Présentation de Ktor Client multiplateforme (structure, configuration)
Appels HTTP GET, POST, gestion des en-têtes
Utilisation de Kotlinx.serialization pour parser des flux JSON
Patterns d’appel avec coroutines : suspend, async/await, gestion d’erreurs
Injection de dépendances pour faciliter les testsTravaux pratiquesObjectif : Consommer une API publique (ex : météo ou Pokédex), affichage des résultats côté Android.
Description : Mise en œuvre d’une application avec plusieurs fragments et une seule activité.
Navigation entre les fragments (NavigationDrawer).Stockage local et persistance partagée
Présentation de SQLLite (multiplateforme, types sûrs, migration intégrée)
Définition des entités et requêtes SQL
Intégration avec des ViewModel pour persister des données
Différences de comportement Android / iOS concernant le stockage local
Mise en cache des résultats d’API avec fallbackTravaux pratiquesObjectif : Associer stockage local et appels réseau pour améliorer l’expérience utilisateur.
Description : Créer un mini système de favoris (articles ou éléments API) stockés localementJour 3Accès aux fonctionnalités mobiles
Accès aux fonctionnalités spécifiques via expect/actual (ex : géolocalisation, SMS)
Utilisation de Plans sur iOS et Google Maps sur Android via librairies natives
Envoi / réception de SMS (permissions + accès natif)
Accès aux capteurs (gyroscope, accéléromètre)
Gestion des permissions (permissions multiplateformes avec Multiplatform Settings ou spécifiques)
Interfaçage avec des SDK natifs si nécessaire (interopérabilité Swift / ObjC / Kotlin Native)Travaux pratiquesObjectif : Savoir intégrer les fonctionnalités natives et tirer parti du matériel tout en maintenant une base de code partagé
Description : Créer une fonctionnalité conditionnelle selon la plateforme : par exemple, alerter l’utilisateur en fonction de sa position géographique et du mouvement de l’appareil.Notions avancées du langage Kotlin Multiplatform
Les coroutines et Flow multiplateformes
La gestion fine de la concurrence (Dispatchers, Job, SupervisorJob)
Les expect/actual avancés : partager une logique métier tout en intégrant du code natif ciblé
Extensions multiplateformes (formatage, validation, conversion)
Structure de projet évoluée : domain/shared/ui-platform separation
Optimisation de la taille des librairies KMM (Kotlin Multiplatform Mobile)Travaux pratiquesObjectif : Savoir structurer des modules partagés puissants, maintenables et réactifs avec KMM.
Description : Mettre en œuvre une logique métier réactive basée sur un Flow, observable sur plusieurs écrans.Synthèse et bilan critique de KMM
Réflexions sur la maintenabilité, testabilité, et industrialisation d’un projet KMM
Retour d’expérience sur les limites actuelles de Kotlin Multiplatform (UI iOS, tooling, performance, debug)
Recommandations et bonnes pratiques de structuration d’un projet KMM en production
Présentation de la roadmap JetBrains (compose-multiplatform, tooling iOS, etc.)