Sobes.tech
Senior

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.