Kotlin Multiplatform Mobile — o que é, conceitos-chave e arquitetura do KMM

Autor: IT Sectr Publicado: 2026-05-02 Tempo de leitura: 9 min

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

  • KMM — tecnologia JetBrains para compartilhar lógica de negócio entre iOS e Android em Kotlin
  • expect/actual — mecanismo para declarar APIs de plataforma no módulo compartilhado com implementações específicas
  • UI nativa — a interface é escrita separadamente em SwiftUI e Jetpack Compose, sem WebView
  • Módulo compartilhado — contém modelos de dados, requisições de rede, validação e regras de negócio
  • Ktor e Kotlinx — bibliotecas JetBrains para redes e serialização em código compartilhado

O que é Kotlin Multiplatform Mobile?

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.

Arquitetura do KMM: módulo compartilhado e implementações de plataforma

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.

Módulo compartilhado: o que vai no código comum

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ódulos de plataforma

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.

O mecanismo expect/actual no KMM

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.

Exemplos de código no KMM

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.

kotlin
// 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:

kotlin
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.

Comparação do KMM com Flutter e React Native

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érioKMMFlutterReact Native
IUNativa (SwiftUI / Jetpack Compose)Mecanismo próprio (Skia)JavaScript → Componentes nativos
LinguagemKotlin (compartilhado) + Swift / Kotlin (IU)DartJavaScript / TypeScript
DesempenhoMáximo (IU nativa)Alto (renderização própria)Médio (ponte JS-Nativo)
Compartilhamento de códigoLógica de negócio (40–70%)IU + lógica (80–95%)IU + lógica (70–90%)
Barreira de entradaAlta (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.

Vantagens e desafios da adoção do KMM

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.

Vantagens do KMM

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.

Desafios da adoção

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

Pode-se usar KMM para iOS sem Android?

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.

Como o KMM difere do Kotlin/Native?

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.

Como o KMM trabalha com bancos de dados?

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 suporta componentes de IU?

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.

Quais empresas usam KMM em produção?

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

  • KMM — tecnologia JetBrains para compartilhar lógica de negócio entre iOS e Android em Kotlin com IU nativa
  • Arquitetura inclui um módulo compartilhado e implementações de plataforma via expect/actual
  • Módulo compartilhado contém redes (Ktor), modelos (kotlinx.serialization) e regras de negócio
  • expect/actual — mecanismo-chave para implementações dependentes de plataforma em código compartilhado
  • Desempenho no nível de aplicações nativas pois a IU não usa abstrações
  • Desafios incluem altos requisitos de qualificação da equipe e configuração de infraestrutura de compilação
  • Escolher KMM é justificado para projetos onde a UX nativa e um alto percentual de compartilhamento de lógica são críticos

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.

Discutir o projeto

Leia também