Kotlin Multiplatform Mobile (KMM) é uma tecnologia da JetBrains para usar código Kotlin compartilhado em aplicações iOS e Android, preservando as interfaces nativas em cada plataforma. Ao contrário dos frameworks híbridos, o KMM não utiliza WebView nem renderiza interfaces através de abstrações — a lógica de negócio é escrita uma vez, enquanto a interface do usuário permanece completamente nativa. De acordo com a JetBrains, 2025, o KMM é usado por mais de 40.000 equipes em todo o mundo. expect/actual é um mecanismo-chave do Kotlin que permite declarar APIs dependentes de plataforma em código compartilhado.
Pontos principais
Kotlin Multiplatform Mobile (KMM) é uma tecnologia que permite escrever a lógica de negócio compartilhada de uma aplicação móvel em Kotlin e usá-la no iOS e Android sem duplicação de código. Ao contrário do Ionic ou Cordova, o KMM não renderiza a interface em um WebView — a IU permanece completamente nativa e é escrita em SwiftUI (iOS) e Jetpack Compose (Android).
O KMM foi anunciado pela JetBrains em 2019 como parte da estratégia Kotlin Multiplatform. A principal diferença de outras soluções multiplataforma é que o framework não tenta unificar a IU, mas foca em compartilhar exatamente o código que é realmente idêntico para ambas as plataformas: requisições de rede, modelos de dados, validação de formulários, regras de negócio e operações de banco de dados.
De acordo com a Pesquisa de Desenvolvedores JetBrains (2025), o KMM é usado por 14% dos desenvolvedores móveis, e esse número cresce 5% ao ano. A tecnologia é escolhida por empresas com altas exigências de desempenho e experiência de usuário nativa, para as quais soluções híbridas são inaceitáveis.
A arquitetura do KMM consiste em três módulos: shared (código comum em Kotlin), iosApp (aplicação iOS nativa em Swift) e androidApp (aplicação Android nativa em Kotlin). O módulo compartilhado é compilado em um JAR para Android e em um framework universal (Apple Framework) para iOS.
O módulo compartilhado contém todas as camadas independentes de plataforma: a camada de rede usando Ktor Client, modelos de dados com serialização via kotlinx.serialization, repositórios para gerenciamento de dados, validação de formulários e regras de negócio (por exemplo, calcular custo de entrega ou verificar permissões de acesso).
O módulo compartilhado usa o Plugin Gradle Multiplatform e contém três conjuntos de código-fonte: commonMain (código comum), androidMain (implementações específicas do Android) e iosMain (implementações específicas do iOS). O compilador Kotlin/Native transforma o código comum em uma biblioteca nativa para iOS, que é vinculada ao projeto Swift via XCFramework.
Módulo Android — é uma aplicação Android padrão em Kotlin com Jetpack Compose ou ViewBinding. O módulo compartilhado é conectado como uma dependência Gradle comum, e todas as classes do commonMain são diretamente acessíveis.
O módulo iOS é um projeto Xcode em Swift ou Objective-C. O módulo compartilhado é conectado via CocoaPods, Swift Package Manager ou XCFramework. O Kotlin/Native gera cabeçalhos Objective-C para exportar tipos Kotlin, tornando-os acessíveis a partir do Swift.
expect/actual é um mecanismo do Kotlin Multiplatform que permite declarar uma API em código compartilhado (declaração expect) e fornecer sua implementação separadamente para cada plataforma (declaração actual). O compilador garante que exista uma declaração actual para cada plataforma alvo.
Casos de uso típicos do expect/actual: obter a hora atual com fuso horário, trabalhar com SharedPreferences (Android) / UserDefaults (iOS), funções criptográficas e geração de UUID. Cada plataforma usa sua própria API do sistema.
Sem o expect/actual, seria impossível ter um código unificado de lógica de negócio, pois as APIs para trabalhar com sistema de arquivos, rede e armazenamento diferem entre iOS e Android no nível de chamadas de sistema. O mecanismo garante que o desenvolvedor não se esqueça de implementar a parte específica da plataforma.
Para chamadas de plataforma como trabalhar com câmera ou biometria, o KMM oferece o mecanismo expect/actual combinado com plugins similares ao Cordova, mas em Kotlin/Native. A JetBrains também lançou a biblioteca kotlinx-datetime, que abstrai o manuseio de datas e horas.
Vejamos a estrutura básica de um projeto KMM com a declaração de uma função expect para geração de UUID e sua implementação para iOS e Android.
// commonMain — declaração comum
expect fun generateUUID(): String
// androidMain — implementação para Android
actual fun generateUUID(): String {
return java.util.UUID.randomUUID().toString()
}
// iosMain — implementação para iOS
actual fun generateUUID(): String {
return platform.Foundation.NSUUID().UUIDString
}
No código compartilhado, declara-se expect fun generateUUID(). O Android usa java.util.UUID, enquanto o iOS usa NSUUID do framework Foundation. No restante do código do módulo compartilhado, esta função é chamada independentemente da plataforma.
Um exemplo de requisição de rede usando Ktor Client em código compartilhado:
import io.ktor.client.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class User(
val id: Int,
val name: String
)
class UserRepository {
private val client = HttpClient()
suspend fun getUser(id: Int): User {
val response: HttpStatement =
client.get("https://api.example.com/users/$id")
return Json.decodeFromString(response.bodyAsText())
}
}
Este código funciona em ambas as plataformas sem alterações. O Ktor Client usa OkHttp no Android e NSURLSession no iOS automaticamente, sem configuração adicional. A serialização JSON via kotlinx.serialization também é multiplataforma.
O KMM ocupa uma posição única entre as tecnologias multiplataforma, pois não tenta substituir a IU nativa ao contrário do Flutter e React Native. KMM é uma solução para compartilhar lógica, não para unificar a interface.
| Critério | KMM | Flutter | React Native |
|---|---|---|---|
| IU | Nativa (SwiftUI / Jetpack Compose) | Mecanismo próprio (Skia) | JavaScript → Componentes nativos |
| Linguagem | Kotlin (compartilhado) + Swift / Kotlin (IU) | Dart | JavaScript / TypeScript |
| Desempenho | Máximo (IU nativa) | Alto (renderização própria) | Médio (ponte JS-Nativo) |
| Compartilhamento de código | Lógica de negócio (40–70%) | IU + lógica (80–95%) | IU + lógica (70–90%) |
| Barreira de entrada | Alta (duas linguagens) | Média (uma linguagem) | Baixa (desenvolvedores web) |
A principal vantagem do KMM é o controle total sobre a IU. Se uma aplicação precisa parecer e se comportar de forma nativa em cada plataforma (por exemplo, usando a TabBar do iOS e a BottomNavigation do Android com animações de plataforma), o KMM é a única solução multiplataforma que proporciona isso sem gambiarras.
A desvantagem é que a equipe precisa conhecer Kotlin, Swift, Jetpack Compose e SwiftUI simultaneamente, o que dificulta a contratação. Flutter e React Native exigem conhecimento de uma linguagem e um framework.
Kotlin Multiplatform Mobile é uma tecnologia poderosa, mas sua adoção requer uma abordagem equilibrada. Vamos examinar as principais vantagens e os desafios típicos que as equipes enfrentam.
A primeira e principal vantagem é a redução da duplicação de código. De acordo com os Estudos de Caso da JetBrains (2024), equipes que adotaram o KMM reduzem o código duplicado em 60–80% para a camada de rede e em 40–50% para a lógica de negócio em geral. Isso impacta diretamente a velocidade de desenvolvimento e o número de bugs.
A segunda vantagem é o desempenho no nível de aplicações nativas. Ao contrário dos frameworks híbridos, o KMM não adiciona camadas de abstração entre a IU e o sistema. O código da lógica de negócio é executado tão rápido quanto se fosse escrito em Swift ou Kotlin para cada plataforma separadamente.
O principal desafio é a qualificação da equipe. Os desenvolvedores precisam conhecer Kotlin (para o módulo compartilhado), além de Swift e Jetpack Compose (para a IU). Encontrar um especialista universal é difícil, então as equipes geralmente consistem em desenvolvedores Android e iOS que mantêm conjuntamente o módulo compartilhado.
O segundo desafio são as ferramentas. O KMM requer configurar Gradle, CocoaPods ou Swift Package Manager, bem como a integração com o Xcode. Nos estágios iniciais de um projeto, problemas de configuração de build são comuns, especialmente ao trabalhar com bibliotecas C.
O terceiro desafio é a depuração. Quando um bug ocorre na interseção do Kotlin/Native e Swift, determinar sua causa é mais difícil do que em uma aplicação monolítica. A JetBrains melhora continuamente as ferramentas de depuração, mas na prática, as equipes gastam até 20% do tempo em tarefas de infraestrutura.
Perguntas frequentes
Sim, o KMM suporta iOS como única plataforma alvo. O módulo compartilhado é compilado em um framework iOS que é vinculado ao projeto Swift via XCFramework. O módulo Android não precisa ser criado. Isso é útil para equipes que desejam usar Kotlin para a lógica de negócio de uma aplicação iOS.
Kotlin/Native é um compilador que traduz código Kotlin em um binário nativo sem máquina virtual. O KMM usa Kotlin/Native para compilar o módulo compartilhado para iOS. Para Android, o KMM usa o compilador padrão Kotlin/JVM. Kotlin/Native é a base tecnológica do KMM.
Para trabalhar com bancos de dados locais no KMM, usa-se SQLDelight — uma biblioteca multiplataforma que gera código Kotlin a partir de consultas SQL. No Android, funciona através da API Android SQLite; no iOS, através do SQLite nativo (CFNetwork). Uma alternativa é o Realm Kotlin SDK da MongoDB.
O KMM não inclui componentes de IU por padrão — a interface é escrita em SwiftUI e Jetpack Compose separadamente. No entanto, existem bibliotecas como Compose Multiplatform (da JetBrains) que permitem renderizar a IU em Kotlin diretamente no iOS e Android sem frameworks nativos.
O KMM é usado por grandes empresas: Netflix (compartilhando lógica de recomendação), McDonald's (aplicação móvel), VMWare (aplicações empresariais) e Leroy Merlin (aplicação de materiais de construção). A lista está crescendo à medida que a JetBrains investe ativamente no desenvolvimento do ecossistema.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também