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.