Avez-vous travaillé avec Kotlin Multiplatform?
sobes.tech IA
Réponse de l'IA
Oui, j'ai travaillé dessus. J'ai créé une logique commune pour iOS et Android en utilisant Kotlin Multiplatform Mobile (maintenant intégré à Kotlin Multiplatform).
J'ai utilisé Ktor pour les requêtes réseau, SQLDelight pour la gestion de la base de données et Koin pour la gestion des dépendances.
J'ai développé les couches suivantes :
- Couche de données : Travail avec des données locales et réseau.
- Couche de domaine : Logique métier.
La couche UI restait dépendante de la plateforme.
Les principaux avantages que j'ai soulignés :
- Réutilisation du code : Réduction significative de la duplication de logique.
- Langage unique : Kotlin pour les deux plateformes.
- Interopérabilité : Interaction native avec le code de la plateforme (Swift/Objective-C et Java/Kotlin).
J'ai également noté quelques difficultés :
- Maturité de l'écosystème : Certaines bibliothèques peuvent être moins matures que sur des stacks spécifiques à la plateforme.
- Débogage : Déboguer du code multiplateforme peut être moins trivial.
- CI/CD : La configuration des pipelines CI/CD nécessite une attention particulière aux spécificités de KMP.
Voici un exemple d'une classe simple d'un module commun :
// commonMain
expect class Platform() {
val name: String
}
// androidMain
actual class Platform actual constructor() {
actual val name: String = "Android ${android.os.Build.VERSION.SDK_INT}"
}
// iosMain
actual class Platform actual constructor() {
actual val name: String =
UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
}
// commonMain
class Greeting {
private val platform: Platform = Platform()
fun greet(): String {
return "Hello, ${platform.name}!"
}
}
Dans cet exemple, Platform est une classe attendue (expect), dont l'implémentation est fournie sur chaque plateforme (actual). Greeting utilise cette classe pour former une salutation.
L'expérience avec KMP, bien que ce ne fût pas le principal objectif, a montré un potentiel pour accélérer le développement et unifier la logique dans des projets multiplateformes.