Sobes.tech
Senior

Hai lavorato con Kotlin Multiplatform?

sobes.tech AI

Risposta dell'AI

Sì, ho lavorato su questo. Ho creato una logica comune per iOS e Android usando Kotlin Multiplatform Mobile (ora parte di Kotlin Multiplatform).

Ho usato Ktor per le richieste di rete, SQLDelight per lavorare con il database e Koin per le dipendenze.

Ho sviluppato i seguenti strati:

  • Strato Dati: Lavoro con dati locali e rete.
  • Strato Dominio: Logica di business.

Lo strato UI rimaneva dipendente dalla piattaforma.

I principali vantaggi che ho evidenziato:

  • Riutilizzo del codice: Riduzione significativa della duplicazione della logica.
  • Linguaggio unico: Kotlin per entrambe le piattaforme.
  • Interoperabilità: Interazione nativa con il codice della piattaforma (Swift/Objective-C e Java/Kotlin).

Ho anche evidenziato alcune difficoltà:

  • Maturità dell'ecosistema: Alcune librerie potrebbero essere meno mature rispetto agli stack specifici della piattaforma.
  • Debug: Il debug del codice cross-platform può essere meno intuitivo.
  • CI/CD: La configurazione delle pipeline CI/CD richiede attenzione alle specificità di KMP.

Ecco un esempio di una classe semplice di un modulo comune:

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

In questo esempio, Platform è una classe attesa (expect), la cui implementazione viene fornita su ogni piattaforma (actual). Greeting utilizza questa classe per formare un saluto.

L'esperienza con KMP, anche se non è stato il focus principale, ha mostrato il potenziale per accelerare lo sviluppo e unificare la logica nei progetti multipiattaforma.