26 - Tendances et avenir du mobile
Objectifs pédagogiques
À la fin de ce chapitre, vous serez capable de :
- Comprendre Kotlin Multiplatform (KMP) et son rôle stratégique
- Maîtriser les évolutions de Swift 6 (concurrence stricte)
- Expliquer l'Edge AI sur device (Core ML, TensorFlow Lite, ML Kit)
- Intégrer les LLM (Gemini, modèles on-device) dans une app mobile
- Évaluer Jetpack Compose Multiplatform pour le partage d'UI
- Identifier les opportunités : wearables, foldables, automotive, spatial computing
Plan du chapitre
| Section | Sujet |
|---|
| 1 | Kotlin Multiplatform (KMP) |
| 2 | Swift 6 |
| 3 | Edge AI on-device |
| 4 | Gemini et intégration LLM |
| 5 | Jetpack Compose Multiplatform |
| 6 | Wearables |
| 7 | Foldables |
| 8 | Automotive |
| 9 | Spatial computing (Vision Pro) |
| 10 | Comment se positionner |
Fichiers du chapitre
| Fichier | Contenu |
|---|
course.md | Guide complet des tendances (400+ lignes) |
references/README.md | Ressources pour aller plus loin |
Prérequis
- Maîtrise des fondamentaux (chapitres 02 à 18)
- Curiosité technique : ce chapitre explore le futur proche du mobile
Temps estimé
- Lecture du cours : 3 h
- Projets d'exploration (KMP, ML Kit, Compose Multiplatform) : 10 h
Section 1 — Kotlin Multiplatform (KMP)
1.1 Qu'est-ce que KMP ?
KMP est la technologie de JetBrains (supportée par Google) qui permet de partager du code Kotlin entre plateformes : Android, iOS, desktop, web. Le code partagé compile en bytecode JVM pour Android et en code natif (via Kotlin/Native) pour iOS.
Ce que l'on partage : logique métier, modèles, repository, use cases, sérialisation, réseau.
Ce que l'on ne partage pas : l'UI (au sens large) et les API spécifiques (caméra, Keychain vs Keystore).
1.2 Architecture KMP typique
shared/
commonMain/ — code commun (Kotlin)
domain/ — entités, use cases
data/ — repository, API
networking/ — Ktor client
platform/ — expect/actual
androidMain/ — implémentation Android (actual)
iosMain/ — implémentation iOS (actual)
Le pattern expect/actual permet de déclarer une API commune (expect fun getSecureStorage()) et de fournir l'implémentation par plateforme (actual).
1.3 Quand adopter KMP ?
| Situation | Recommandation |
|---|
| Partager la logique métier entre iOS et Android | Excellent candidat |
| Équipe Android expérimentée, iOS à venir | Bon candidat |
| App Android seule | Pas nécessaire |
| App très dépendante de l'UI native | Limiter au modèle |
1.4 Écosystème
- Ktor Client : HTTP multiplateforme.
- kotlinx.serialization : JSON multiplateforme.
- SQLDelight : persistance multiplateforme (SQL).
- kotlinx.coroutines : coroutines partagées.
- Compose Multiplatform : l'UI partagée (section 5).
1.5 Limites et points de vigilance
- Coût d'outillage (Gradle, Xcode intégration).
- Les API
expect/actual demandent une discipline d'équipe.
- Le débogage iOS depuis Kotlin/Native est moins mature.
- Swift/Objective-C interop : les types Kotlin non triviales (sealed, generics) ont des traductions Swift parfois lourdes.
1.6 Exemple minimal
// commonMain
class Greeting { fun greet(): String = "Hello from KMP" }
// expect/actual
expect fun platformName(): String
// androidMain
actual fun platformName(): String = "Android"
// iosMain
actual fun platformName(): String = "iOS"
Section 2 — Swift 6
2.1 Les objectifs de Swift 6
Swift 6 (2025) finalise le langage de concurrence stricte : la sécurité de la concurrence devient un objectif de compilation, pas une bonne pratique. L'objectif : « des programmes sûrs par construction ».
2.2 Concurrence stricte : les changements clés
- Isolation stricte : les types partagés doivent être
Sendable pour traverser les frontières d'isolation.
- Région-based isolation (optionnel) : le compilateur comprend les régions mémoire, réduit les copies.
nonisolated et @MainActor explicites : le modèle d'isolation devient visible.
- Migration par module : les projets peuvent migrer module par module (Swift 5 mode).
- Concurrency checking activé par défaut : les data races sont des erreurs de compilation.
2.3 Ce que ça change pour les développeurs
| Avant (Swift 5) | Après (Swift 6) |
|---|
| Concurrence « best effort » | Vérifiée par le compilateur |
@MainActor optionnel | Required pour l'UI |
Closures @escaping risquées | Erreurs si capture non Sendable |
| Migrations silencieuses | Migrations contrôlées par mode |
2.4 Exemple typique
@MainActor
final class ProfileViewModel {
private(set) var profile: Profile?
func load() async {
let profile = await service.fetchProfile() // actor safe
self.profile = profile
}
}
2.5 Swift 6 et SwiftUI
@Observable remplace ObservableObject/@Published pour un suivi plus fin.
- Le modèle d'observation « trait-based » réduit les re-rendus inutiles.
@Entry permet d'injecter des valeurs dans l'environnement.
- Le
PreviewModifier améliore les préviews avec données de test.
2.6 Stratégie d'adoption
- Compilez vos projets en Swift 6 mode pour lister les erreurs de concurrence.
- Corrigez module par module (les types partagés →
Sendable, UI → @MainActor).
- Utilisez les
actor pour les états partagés, jamais les globals mutables.
Section 3 — Edge AI on-device
3.1 Pourquoi l'AI sur l'appareil ?
- Confidentialité : les données ne quittent pas le device (RGPD friendly).
- Latence : pas de réseau pour une inférence.
- Disponibilité : fonctionne hors-ligne.
- Coût : zéro coût serveur par requête.
3.2 Les trois frameworks principaux
Core ML (Apple)
- Modèles convertis au format
.mlmodel (ou .mlpackage).
- Entraînement : Create ML (no-code), ou conversion depuis PyTorch/TensorFlow.
- Évaluation ultra-optimisée (Neural Engine, GPU, CPU selon le modèle).
MLModel / MLModelConfiguration, prédiction via prediction(from:) async.
TensorFlow Lite (TFLite) — Android et multiplateforme
- Modèles
.tflite convertis depuis TensorFlow/Keras.
- Délégués GPU, NNAPI, Hexagon pour l'accélération.
- Interop avec Java/Kotlin, C++ (via l'API native).
ML Kit (Google)
- API de haut niveau pour les tâches courantes : vision (barcode, text, face), langue (traduction, smart reply), objets.
- On-device par défaut, cloud en option.
- Démarrage rapide : peu de code pour des fonctionnalités utiles.
3.3 Cas d'usage classiques
| Tâche | Frameworks |
|---|
| Classification d'images | Core ML, TFLite |
| Détection d'objets (yolo) | Core ML, TFLite |
| OCR / lecture de texte | ML Kit text recognition, Vision |
| Traduction instantanée | ML Kit translation |
| Résumé / classification de texte | Core ML NLP, Gemini Nano |
| Reco de formes/matrices | ML Kit, OpenCV |
| Reco vocale | Speech framework, ML Kit |
3.4 Pipeline d'une app Edge AI
1. Acquisition (caméra, micro, entrée utilisateur)
2. Prétraitement (redimensionnement, normalisation)
3. Inférence (Core ML / TFLite / ML Kit)
4. Post-traitement (seuils, mapping des classes)
5. Présentation + actions
Performance : visez < 100 ms par inférence pour une expérience fluide. Mesurez sur device réel (Neural Engine vs GPU vs CPU).
3.5 Bonnes pratiques
- Quantification : Int8/FP16 réduisent la taille (jusqu'à 4×) pour ~1 % de perte.
- Batching : regroupez les inférences pour amortir les coûts.
- Déploiement à chaud : téléchargez les modèles à la demande (Core ML config, ML Kit download).
- Fallback cloud : pour les modèles trop lourds, avec respect de la vie privée.
Section 4 — Gemini et intégration LLM
4.1 Les LLM dans le mobile : les approches
| Approche | Description | Cas d'usage |
|---|
| API cloud (Gemini API) | Appels HTTP vers un LLM distant | Chat, génération, analyse riche |
| On-device (Gemini Nano) | LLM compressé exécuté localement | Résumé, auto-complétion, smart reply |
| Hybrid | Triage : simple → local, complexe → cloud | Optimisation coût/latence |
4.2 Gemini Nano et AI Core
- Gemini Nano : le modèle de Google optimisé pour les appareils Android (Pixel, Samsung).
- AI Core : le service système qui gère l'exécution du modèle.
- AICore APIs : intégration de haut niveau pour les tâches courantes (résumé, rewrite, smart reply) via Android AICore APIs (ML Kit).
4.3 Intégration classique avec l'API Gemini (Android/iOS)
1. Clé API / OAuth dans le backend (jamais dans l'app).
2. SDK (Google AI client SDK) ou HTTP : POST /v1beta/models/gemini-2.x:generateContent.
3. Stream des réponses (SSE) pour l'UX conversationnelle.
4. Gérer : rate limits, retries, erreurs, token budgets.
Sécurité : la clé API ne doit jamais être embarquée dans l'app (extractible). Passez par un serveur mandataire.
4.4 Design d'une expérience LLM
- Prompt system : définir le rôle, le ton, les limites.
- Grounding : donner le contexte métier (données de l'app).
- Streaming : afficher les tokens au fur et à mesure.
- Limites : bloquer les prompts hors-périmètre (filtering).
- Fallback : si le LLM échoue, offrir une réponse locale.
- Coût : cache, résumés, taille des prompts maîtrisée.
4.5 Évaluation
- Latence perçue (TTFT : time to first token).
- Qualité (échantillons évalués manuellement).
- Coût par session (budget).
- Erreurs/refus (hallucinations, contenu bloqué).
Section 5 — Jetpack Compose Multiplatform
5.1 Qu'est-ce que CMP ?
Compose Multiplatform est le portage de Jetpack Compose à d'autres plateformes : iOS, desktop (JVM), web. Le même code Compose peut dessiner l'UI sur Android et iOS, avec des points d'intégration natifs.
5.2 Architecture d'une app CMP
composeApp/
commonMain/ — UI Compose partagée
App.kt — composables
androidMain/ — activité hôte
iosMain/ — host (UIViewController)
Côté iOS, le composable est exposé via un UIViewControllerRepresentable ; côté Android, via une ComponentActivity.
5.3 Forces
- UI 100 % partagée : cohérence visuelle parfaite entre plateformes.
- Kotlin partout : même langage pour l'UI et la logique.
- Écosystème Compose : Material 3, navigation, animations.
5.4 Limites (à évaluer)
- Les bibliothèques UI natives (Cupertino, intégrations spécifiques) restent à réécrire.
- Les performances iOS sont encore en évolution (génération de code, Skiko).
- Le rendu ne suit pas les conventions natives iOS par défaut (il faut les implémenter).
5.5 Stratégie
| Projet | Recommandation |
|---|
| App Android existante + iOS à venir | KMP pour la logique, CMP pour l'UI si l'équipe est Kotlin |
| Équipe iOS Swift forte | Conserver SwiftUI natif, partager seulement le modèle (KMP) |
| Greenfield cross-platform | CMP est un candidat sérieux vs Flutter/RN selon l'équipe |
Section 6 — Wearables
6.1 L'écosystème
| Plateforme | SDK | Cas d'usage |
|---|
| Wear OS (Google/Samsung) | Wear OS + Compose Wear | Notifications, santé, navigation |
| watchOS (Apple) | SwiftUI + WatchKit | Santé, complications, fitness |
| Tizen (Samsung) | Web-ish | Historique |
6.2 Conception pour un petit écran
- Glanceable : informations en 2-3 secondes.
- Actions courtes : tap, swipe, pas de textes longs.
- Complications : widgets sur le cadran (données utiles d'un coup d'œil).
- Synergie phone/watch : l'app phone fait le gros, la watch affiche.
- Batterie : les capteurs (HR) consomment ; batchez et réduisez la fréquence.
6.3 Compose pour Wear OS
Scaffold adapté (TimeText, PositionedIndicator).
- Navigation par
SwipeDismissableNavHost.
MaterialTheme spécifique wear.
- Tiles : UI de type carte sans app ouverte.
6.4 watchOS SwiftUI
WKApplication / WKInterfaceController (legacy) vs SwiftUI.
ComplicationController pour les complications.
- HealthKit pour la santé ;
WCSession pour la communication phone/watch.
- Watch faces avec widgets (SwiftUI
WidgetKit).
Section 7 — Foldables et écrans adaptatifs
7.1 Les facteurs de forme
| Type | Taille écran | Design |
|---|
| Phone standard | 6-6,9" | Layout classique |
| Foldable plié | 6" | Une main, usage compact |
| Foldable déplié | 7-8" | Tablette-ish, multi-tâches |
| Foldable book style | 8"+ | Lecture, productivité |
| Flip (clam) | 3-4" externe | Notifications, quick actions |
7.2 Les défis techniques
- Configuration changes : le pliage change la taille → recréation d'activité. Utilisez
android:configChanges avec précaution, ou mieux : des layouts adaptatifs robustes.
- Resizable : même hors foldables, le mode fenêtré multi-tâches impose des layouts adaptatifs.
- Hinge : éviter les éléments dans la charnière (zone d'occlusion).
- Orientation : portrait/paysage sur 2 panneaux → qualifiers
sw600dp, resizable.
7.3 Outils et bonnes pratiques
- WindowManager / Jetpack Window :
currentWindowMetrics pour les tailles réelles.
- Breakpoints : compact (0-599dp), medium (600-839dp), expanded (840dp+).
- Compose :
BoxWithConstraints pour les layout adaptatifs ; Material3 adaptive components (NavigationSuites).
- Canary Checks (Play Console) : tests sur foldables virtuels.
- Testez sur émulateur foldable (configurations plié/déplié).
7.4 iOS : vision générale
Sur iPadOS, le multitâching (Split View, Stage Manager) impose la même discipline de layouts adaptatifs. size classes et UISplitViewController restent les outils clés ; SwiftUI gère ces cas avec des vues conditionnelles par horizontalSizeClass.
Section 8 — Automotive
8.1 Les plateformes
| Plateforme | Description |
|---|
| Android Auto | Miroir d'API Android dans l'auto |
| Apple CarPlay | Miroir d'API iOS dans l'auto |
| Android Automotive OS (AAOS) | Android natif embarqué dans l'info-divertissement |
| Car Connectivity Consortium (CCC) | Standard de la Digital Key |
8.2 Règles de design embarqué (sécurité routière)
- Minimum tap : réduire les interactions.
- Pas de texte long : lecture en mouvement interdite.
- Conseils audios : répondre par la voix quand possible.
- Templates imposés : Android Auto/CarPlay imposent des modèles de vues certifiés.
8.3 Intégration pour un développeur mobile
- Android Auto : configurer les « template categories » (Navigation, Media, Communication) dans le manifeste.
- CarPlay :
CarPlayAppDelegate avec CPTemplateApplicationSceneDelegate.
- AAOS : l'app tourne directement sur l'unité centrale (nouveaux APIs : Car App Library).
- Digital Key : NFC/UWB pour ouvrir/démarrer la voiture depuis le téléphone.
8.4 Opportunités
- Vente de véhicules + apps companion (état, contrôle à distance).
- Navigation enrichie (EV routing pour véhicules électriques).
- Infotainment personnalisé.
Section 9 — Spatial computing (Vision Pro / visionOS)
9.1 Le paradigme
visionOS (Apple Vision Pro, 2024) introduit le spatial computing : pas un VR casque fermé, mais un système qui mélange le monde physique et les fenêtres 3D. Les apps s'organisent en windows, volumes et spaces.
9.2 Concepts clés visionOS
| Concept | Description |
|---|
| Window | Fenêtre 2D (SwiftUI) ancrée dans l'espace |
| Volume | Contenu 3D (RealityKit) |
| Immersive Space | Environnement plein écran |
| Ornaments | UI détachée des fenêtres |
| Shared Space | Multi-apps côte à côte |
| Persona / avatars | Présence sociale |
9.3 Développer pour visionOS
- SwiftUI est le framework de choix ; UIKit est bridé.
- RealityKit pour le 3D : modèles
.usdz, matériaux physiquement réalistes.
- ARKit (sur le device) : tracking du monde, occlusion, plane detection.
- Gestes : regard (eye tracking), pincement, mains, voix.
- Conception : ne pas surcharger, respecter la profondeur, penser à la fatigue.
9.4 Impact sur le métier mobile
- Nouvelles compétences : 3D, spatial UX, capteurs.
- Nouveaux cas d'usage : éducation, santé, retail (essayage), collaboration.
- Les fondamentaux (Swift, SwiftUI, architecture) restent la base : visionOS est une extension, pas une rupture.
9.5 La concurrence
| Écosystème | Plateforme | Stack |
|---|
| Apple | visionOS | SwiftUI + RealityKit |
| Meta | Horizon OS / Quest | React, Unity, WebXR |
| Google/Samsung | Android XR | Jetpack XR, Kotlin, ARCore |
| Open standard | WebXR | Web |
Section 10 — Comment se positionner
10.1 Les compétences de demain
| Compétence | Priorité |
|---|
| Concurrence (coroutines / async-await / actors) | Critique |
| Architecture (MVVM/MVI/Clean) | Critique |
| Edge AI / on-device ML | Croissante |
| LLM intégration (prompting, streaming) | Croissante |
| Multiplatform (KMP, CMP, Flutter/RN) | Forte |
| Adaptatif (foldables, tablette, car) | Importante |
| 3D / spatial | Émergente |
10.2 Stratégie d'apprentissage
- Maîtrisez les fondamentaux (chapitres 02-18) : ils ne changent pas.
- Choisissez UNE tendance à explorer en profondeur (projet de 2-3 mois).
- Apprenez la logique de la veille (chapitre 22) pour suivre le rythme.
- Gardez du temps pour les fondamentaux : les tendances passent, les bases restent.
10.3 Projets d'exploration suggérés
| Tendance | Projet 2-3 mois |
|---|
| KMP | Partager la logique d'une app météo entre Android et iOS |
| Edge AI | App de reco d'objets/caméra avec TFLite ou Core ML |
| LLM | Assistant de notes avec résumé Gemini (streaming) |
| CMP | Porter un écran Compose existant sur iOS |
| Foldables | Rendre votre app adaptative (compact/expanded) |
| Spatial | Explorer visionOS avec une app de visualisation |
10.4 Ce qui ne change pas
- L'expérience utilisateur et l'accessibilité.
- L'architecture, les tests, la qualité.
- La sécurité et la vie privée (RGPD).
- La performance et l'observabilité.
Synthèse
| Tendance | À retenir |
|---|
| KMP | Partager la logique, pas l'UI ; expect/actual |
| Swift 6 | Concurrence stricte : Sendable, actors, MainActor |
| Edge AI | Core ML, TFLite, ML Kit : privé, rapide, offline |
| LLM | Gemini : cloud, on-device (Nano), hybride |
| CMP | Compose sur iOS/desktop : à évaluer selon l'équipe |
| Wearables | Glanceable, batterie, complications |
| Foldables | Layouts adaptatifs, breakpoints, hinge |
| Automotive | Templates imposés, sécurité routière, Digital Key |
| Spatial | SwiftUI + RealityKit, windows/volumes/immersive |
Pour aller plus loin
- Choisissez une tendance et réalisez le projet d'exploration associé.
- Suivez les conférences du chapitre 22 (Google I/O, WWDC) pour les annonces à jour.
- Relisez ce chapitre chaque année : les tendances évoluent vite.