Sobes.tech
Senior

Já trabalhou com Kotlin Multiplatform?

sobes.tech IA

Resposta da IA

Sim, trabalhei nisso. Criei uma lógica comum para iOS e Android usando Kotlin Multiplatform Mobile (agora parte do Kotlin Multiplatform).

Usei Ktor para requisições de rede, SQLDelight para trabalhar com bases de dados e Koin para dependências.

Desenvolvi as seguintes camadas:

  • Camada de Dados: Trabalho com dados locais e rede.
  • Camada de Domínio: Lógica de negócio.

A camada de UI permanecia dependente da plataforma.

As principais vantagens que destaquei:

  • Reutilização de código: Redução significativa da duplicação de lógica.
  • Linguagem única: Kotlin para ambas as plataformas.
  • Interoperabilidade: Interação nativa com o código da plataforma (Swift/Objective-C e Java/Kotlin).

Também destaquei algumas dificuldades:

  • Maturidade do ecossistema: Algumas bibliotecas podem ser menos maduras do que em stacks específicos de plataforma.
  • Depuração: Depurar código multiplataforma pode ser menos trivial.
  • CI/CD: Configurar pipelines de CI/CD requer atenção às particularidades do KMP.

Aqui está um exemplo de uma classe simples de um módulo comum:

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

Neste exemplo, Platform é uma classe esperada (expect), cuja implementação é fornecida em cada plataforma (actual). Greeting usa essa classe para formar uma saudação.

A experiência com KMP, embora não tenha sido o foco principal, mostrou potencial para acelerar o desenvolvimento e unificar a lógica em projetos multiplataforma.