Kotlin Multiplatform Mobile (KMM) — este o tehnologie de la JetBrains pentru utilizarea codului comun în Kotlin în aplicații pentru iOS și Android, păstrând interfețele native pe fiecare platformă. Spre deosebire de framework-urile hibride, KMM nu folosește WebView și nu redă interfața prin abstracții — logica de business se scrie o singură dată, iar interfața utilizatorului rămâne complet nativă. Conform datelor JetBrains, 2025, KMM este folosit de peste 40 de mii de echipe din întreaga lume. expect/actual — mecanismul cheie Kotlin care permite declararea API-urilor dependente de platformă în codul comun.
Principalele
Kotlin Multiplatform Mobile (KMM) — este o tehnologie care permite scrierea logicii de business comune a unei aplicații mobile în Kotlin și utilizarea acesteia pe iOS și Android fără duplicarea codului. Spre deosebire de Ionic sau Cordova, KMM nu redă interfața în WebView — UI rămâne complet nativ și este scris în SwiftUI (iOS) și Jetpack Compose (Android).
KMM a fost anunțat de JetBrains în 2019 ca parte a strategiei Kotlin Multiplatform. Diferența cheie față de alte soluții cross-platform — framework-ul nu încearcă să unifice UI, ci se concentrează pe partajarea exact a acelui cod care este cu adevărat același pentru ambele platforme: cereri de rețea, modele de date, validarea formularelor, reguli de business și lucrul cu bazele de date.
Conform JetBrains Developer Survey (2025), KMM este folosit de 14% dintre dezvoltatorii mobili, iar acest indicator crește cu 5% anual. Tehnologia este aleasă de companii cu cerințe ridicate de performanță și experiență utilizator nativă, pentru care soluțiile hibride sunt inacceptabile.
Arhitectura KMM constă din trei module: shared (cod comun în Kotlin), iosApp (aplicație nativă iOS în Swift) și androidApp (aplicație nativă Android în Kotlin). Modulul shared este compilat în JAR pentru Android și într-un framework universal (Apple Framework) pentru iOS.
În modulul shared intră toate straturile independente de platformă: stratul de rețea pe Ktor Client, modele de date cu serializare prin kotlinx.serialization, depozite pentru gestionarea datelor, validarea formularelor și reguli de business (de exemplu, calculul costului de livrare sau verificarea drepturilor de acces).
Modulul shared folosește Gradle Multiplatform Plugin și conține trei seturi de surse: commonMain (cod comun), androidMain (implementări specifice Android) și iosMain (implementări specifice iOS). Compilatorul Kotlin/Native transformă codul comun într-o bibliotecă nativă pentru iOS, care se conectează la proiectul Swift prin XCFramework.
Modulul Android — este o aplicație Android standard în Kotlin cu Jetpack Compose sau ViewBinding. Modulul shared se conectează ca o dependență obișnuită Gradle, iar toate clasele din commonMain sunt accesibile direct.
Modulul iOS — este un proiect Xcode în Swift sau Objective-C. Modulul shared se conectează prin CocoaPods, Swift Package Manager sau XCFramework. Kotlin/Native generează antete Objective-C pentru exportul tipurilor Kotlin, făcându-le accesibile din Swift.
expect/actual — este un mecanism Kotlin Multiplatform care permite declararea unui API în codul comun (expect declaration) și furnizarea implementării sale separat pentru fiecare platformă (actual declaration). Compilatorul se asigură că actual există pentru fiecare platformă țintă.
Scenarii tipice de utilizare a expect/actual: obținerea orei curente cu luarea în considerare a fusului orar, lucrul cu SharedPreferences (Android) / UserDefaults (iOS), funcții criptografice și generarea UUID. Pe fiecare platformă se folosește propriul API de sistem.
Fără expect/actual ar fi imposibil să ai un cod unitar al logicii de business, deoarece API-urile pentru lucrul cu sistemul de fișiere, rețeaua și stocarea diferă între iOS și Android la nivel de apeluri de sistem. Mecanismul garantează că dezvoltatorul nu va uita să implementeze partea de platformă.
Pentru apelurile de platformă, cum ar fi lucrul cu camera sau biometria, KMM oferă biblioteca expect/actual în combinație cu pluginuri similare Cordova, dar în Kotlin/Native. JetBrains a lansat și biblioteca kotlinx-datetime, care abstractizează lucrul cu datele.
Să examinăm structura de bază a unui proiect KMM cu declararea funcției expect pentru generarea UUID și implementarea sa pentru iOS și Android.
// commonMain — declarație comună
expect fun generateUUID(): String
// androidMain — implementare pentru Android
actual fun generateUUID(): String {
return java.util.UUID.randomUUID().toString()
}
// iosMain — implementare pentru iOS
actual fun generateUUID(): String {
return platform.Foundation.NSUUID().UUIDString
}
În codul comun se declară expect fun generateUUID(). Pentru Android se folosește java.util.UUID, pentru iOS — NSUUID din framework-ul Foundation. În restul codului modulului shared, această funcție este apelată fără a lua în considerare platforma.
Exemplu de cerere de rețea folosind Ktor Client în codul comun:
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())
}
}
Acest cod funcționează pe ambele platforme fără modificări. Ktor Client folosește OkHttp pe Android și NSURLSession pe iOS automat, fără configurare suplimentară. Serializarea JSON prin kotlinx.serialization este, de asemenea, cross-platform.
KMM ocupă o poziție unică printre tehnologiile cross-platform, deoarece nu încearcă să înlocuiască UI-ul nativ, spre deosebire de Flutter și React Native. KMM — este o soluție pentru partajarea logicii, nu pentru unificarea interfeței.
| Criteriu | KMM | Flutter | React Native |
|---|---|---|---|
| UI | Nativ (SwiftUI / Jetpack Compose) | Motor propriu (Skia) | JavaScript → componente native |
| Limbaj | Kotlin (shared) + Swift / Kotlin (UI) | Dart | JavaScript / TypeScript |
| Performanță | Maximă (UI nativ) | Ridicată (render propriu) | Medie (punte JS-Nativ) |
| Partajare cod | Logică de business (40–70%) | UI + logică (80–95%) | UI + logică (70–90%) |
| Prag de intrare | Ridicat (două limbaje) | Mediu (un limbaj) | Scăzut (dezvoltatori web) |
Principalul avantaj al KMM — controlul complet asupra UI-ului. Dacă aplicația trebuie să arate și să se comporte ca una nativă pe fiecare platformă (de exemplu, să folosească iOS TabBar și Android BottomNavigation cu animații de platformă), KMM este singura soluție cross-platform care asigură acest lucru fără soluții de compromis.
Dezavantajul — echipa trebuie să cunoască simultan Kotlin, Swift, Jetpack Compose și SwiftUI, ceea ce complică angajarea. Flutter și React Native necesită cunoașterea unui singur limbaj și a unui singur framework.
Kotlin Multiplatform Mobile — este o tehnologie puternică, dar implementarea sa necesită o abordare echilibrată. Să examinăm avantajele cheie și dificultățile tipice cu care se confruntă echipele.
Primul și cel mai important avantaj — reducerea duplicării codului. Conform JetBrains Case Studies (2024), echipele care au implementat KMM reduc volumul de cod duplicat cu 60–80% pentru stratul de rețea și cu 40–50% pentru logica de business în ansamblu. Acest lucru afectează direct viteza de dezvoltare și numărul de bug-uri.
Al doilea avantaj — performanța la nivelul aplicațiilor native. Spre deosebire de framework-urile hibride, KMM nu adaugă straturi de abstracție între UI și sistem. Codul logicii de business se execută la fel de rapid ca și cum ar fi fost scris în Swift sau Kotlin pentru fiecare platformă separat.
Principala dificultate — calificarea echipei. Dezvoltatorii trebuie să cunoască Kotlin (pentru modulul shared), precum și Swift și Jetpack Compose (pentru UI). Găsirea unui specialist universal este dificilă, de aceea de obicei se formează o echipă din dezvoltatori Android și iOS care gestionează împreună modulul shared.
A doua dificultate — instrumentarul. KMM necesită configurarea Gradle, CocoaPods sau Swift Package Manager, precum și integrarea cu Xcode. În fazele incipiente ale proiectului, sunt frecvente problemele cu configurarea build-ului, în special la lucrul cu biblioteci C.
A treia dificultate — depanarea. Când o eroare apare la intersecția dintre Kotlin/Native și Swift, determinarea cauzei sale este mai dificilă decât într-o aplicație monolitică. JetBrains îmbunătățește constant instrumentele de depanare, dar în practică echipele trebuie să aloce până la 20% din timp sarcinilor de infrastructură.
Întrebări frecvente
Da, KMM suportă iOS ca unică platformă țintă. Modulul shared este compilat într-un framework iOS care se conectează la proiectul Swift prin XCFramework. Modulul Android poate fi omis. Acest lucru este util pentru echipele care doresc să folosească Kotlin pentru logica de business a aplicației iOS.
Kotlin/Native — este un compilator care transpune codul Kotlin într-un binar nativ fără mașină virtuală. KMM folosește Kotlin/Native pentru compilarea modulului shared pentru iOS. Pentru Android, KMM folosește compilatorul standard Kotlin/JVM. Kotlin/Native — este fundamentul tehnologic al KMM.
Pentru lucrul cu bazele de date locale în KMM se folosește SQLDelight — o bibliotecă cross-platform care generează cod Kotlin din interogări SQL. Pe Android funcționează prin Android SQLite API, pe iOS prin Native SQLite (CFNetwork). Alternativa — Realm Kotlin SDK de la MongoDB.
KMM nu include componente UI în mod implicit — UI se scrie separat în SwiftUI și Jetpack Compose. Cu toate acestea, există biblioteci precum Compose Multiplatform (de la JetBrains) care permit redarea UI în Kotlin direct pe iOS și Android fără framework-uri native.
KMM este folosit de companii mari: Netflix (partajarea logicii de recomandări), McDonald’s (aplicația mobilă), VMWare (aplicații corporative) și Leroy Merlin (aplicația pentru materiale de construcții). Lista crește, deoarece JetBrains investește activ în dezvoltarea ecosistemului.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și