Sobes.tech
Senior

Да ли сте радили са Kotlin Multiplatform?

sobes.tech АИ

Одговор од АИ

Da, radio sam na tome. Kreirao sam zajedničku logiku za iOS i Android koristeći Kotlin Multiplatform Mobile (sada deo Kotlin Multiplatform).

Koristio sam Ktor za mrežne zahteve, SQLDelight za rad sa bazom podataka i Koin za upravljanje zavisnostima.

Razvio sam sledeće slojeve:

  • Sloj podataka: Rad sa lokalnim podacima i mrežom.
  • Sloj domena: Poslovna logika.

UI sloj je ostao zavistan od platforme.

Glavne prednosti koje sam istakao:

  • Ponovna upotreba koda: Značajno smanjenje dupliranja logike.
  • Jedan jezik: Kotlin za obe platforme.
  • Interoperabilnost: Nativna interakcija sa platformskim kodom (Swift/Objective-C i Java/Kotlin).

Takođe sam istakao neke izazove:

  • Zrelost ekosistema: Neke biblioteke mogu biti manje zrele u poređenju sa platformama specifičnim stackovima.
  • Debagovanje: Debugovanje koda za više platformi može biti manje intuitivno.
  • CI/CD: Podešavanje CI/CD pipeline-a zahteva pažnju na specifičnosti KMP.

Evo primera jednostavne klase iz zajedničkog modula:

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

Iskustvo sa KMP, iako nije bilo glavni fokus, pokazalo je potencijal za ubrzanje razvoja i ujednačavanje logike u multiplatformskim projektima.