Sobes.tech
Senior

Ai lucrat cu Kotlin Multiplatform?

sobes.tech AI

Răspuns de la AI

Da, am lucrat la asta. Am creat o logică comună pentru iOS și Android folosind Kotlin Multiplatform Mobile (acum parte din Kotlin Multiplatform).

Am folosit Ktor pentru solicitări de rețea, SQLDelight pentru lucrul cu baza de date și Koin pentru dependențe.

Am dezvoltat următoarele straturi:

  • Stratul de date: Lucru cu date locale și rețea.
  • Stratul de domeniu: Logica de afaceri.

Stratul UI a rămas dependent de platformă.

Principalele avantaje pe care le-am evidențiat:

  • Reutilizarea codului: Reducere semnificativă a duplicării logicii.
  • Limbaj unic: Kotlin pentru ambele platforme.
  • Interoperabilitate: Interacțiune nativă cu codul platformei (Swift/Objective-C și Java/Kotlin).

De asemenea, am evidențiat unele dificultăți:

  • Maturitatea ecosistemului: Unele biblioteci pot fi mai puțin mature decât pe stack-urile specifice platformei.
  • Depanare: Depanarea codului multiplatform poate fi mai puțin intuitivă.
  • CI/CD: Configurarea pipeline-urilor CI/CD necesită atenție la specificul KMP.

Iată un exemplu de clasă simplă dintr-un modul comun:

// 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}!"
    }
}

În acest exemplu, Platform este o clasă așteptată (expect), a cărei implementare este furnizată pe fiecare platformă (actual). Greeting folosește această clasă pentru a forma o salutare.

Experiența cu KMP, deși nu a fost scopul principal, a arătat potențialul de a accelera dezvoltarea și de a unifica logica în proiecte multiplatformă.