Sobes.tech
Senior

Czy pracowałeś z Kotlin Multiplatform?

sobes.tech AI

Odpowiedź od AI

Tak, pracowałem nad tym. Tworzyłem wspólną logikę dla iOS i Android za pomocą Kotlin Multiplatform Mobile (obecnie w skład Kotlin Multiplatform).

Używałem Ktor do zapytań sieciowych, SQLDelight do pracy z bazą danych i Koin do zarządzania zależnościami.

Opracowałem następujące warstwy:

  • Warstwa danych: Praca z danymi lokalnymi i siecią.
  • Warstwa domenowa: Logika biznesowa.

Warstwa UI pozostała zależna od platformy.

Główne zalety, które wyróżniłem:

  • Ponowne użycie kodu: Znaczne zmniejszenie duplikacji logiki.
  • Język jednolity: Kotlin dla obu platform.
  • Interoperacyjność: Natywna współpraca z kodem platformy (Swift/Objective-C i Java/Kotlin).

Zwróciłem również uwagę na pewne trudności:

  • Dojrzałość ekosystemu: Niektóre biblioteki mogą być mniej dojrzałe niż na platformowo-specyficznych stosach.
  • Debugowanie: Debugowanie kodu wieloplatformowego może być mniej intuicyjne.
  • CI/CD: Konfiguracja pipeline'ów CI/CD wymaga uwagi na specyfikę KMP.

Przykład prostej klasy z modułu wspólnego:

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

W tym przykładzie Platform jest oczekiwanym (expect) klasą, której implementacja jest dostarczana na każdej platformie (actual). Greeting używa tej klasy do tworzenia powitania.

Doświadczenie z KMP, choć nie było głównym celem, pokazało potencjał do przyspieszenia rozwoju i unifikacji logiki w projektach wieloplatformowych.