Dolgozott már Kotlin Multiplatform-nal?
sobes.tech MI
Válasz az MI-től
Igen, dolgoztam rajta. Közös logikát készítettem iOS és Android számára Kotlin Multiplatform Mobile segítségével (most a Kotlin Multiplatform része).
A Ktor-t használtam hálózati kérésekhez, SQLDelight-ot az adatbázis kezeléséhez, és Koin-t a függőségek kezeléséhez.
A következő rétegeket fejlesztettem:
- Adat réteg: Munka helyi adatokkal és hálózattal.
- Domaén réteg: Üzleti logika.
A UI réteg platformfüggő maradt.
A fő előnyök, amiket kiemeltem:
- Kód újrahasznosítása: Jelentős logikai duplikáció csökkentése.
- Egységes nyelv: Kotlin mindkét platformhoz.
- Interoperabilitás: Natív interakció a platform kódjával (Swift/Objective-C és Java/Kotlin).
Emellett néhány nehézséget is kiemeltem:
- Ökoszisztéma érettsége: Néhány könyvtár kevésbé érett lehet, mint a platform-specifikus stack-ek.
- Hibakeresés: A többplatformos kód hibakeresése kevésbé intuitív lehet.
- CI/CD: A CI/CD pipeline-ok konfigurálása figyelmet igényel a KMP sajátosságaira.
Íme egy egyszerű osztály példája egy közös modulból:
// 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}!"
}
}
Ebben a példában a Platform egy elvárt (expect) osztály, amelynek implementációja minden platformon (actual) rendelkezésre áll. A Greeting ezt az osztályt használja egy üdvözlet kialakításához.
A KMP-vel szerzett tapasztalat, bár nem volt fő fókusz, megmutatta a fejlesztés felgyorsításának és a logika egységesítésének lehetőségét többplatformos projektekben.