Kotlin Multiplatform (KMP) — JetBrains texnologiyası, ümumi Kotlin kodunu birbaşa iOS, Android, Web və Desktop üçün kompilyasiya edir. Flutter və React Native-dən fərqli olaraq, KMP yerli UI-ləri əvəz etmir — ümumi məntiq shared module-ə çıxarılır və hər tətbiqin interfeysi yerli olaraq qalır. Kotlin Multiplatform documentation — modulların qurulması və expect/actual mexanizmi üzrə əsas məlumat mənbəyidir.
Əsas məqamlar
Kotlin Multiplatform — ümumi kodu Kotlin-də yazmağa və müxtəlif platformalar üçün kompilyasiya etməyə imkan verən çarpaz kompilyasiya texnologiyası: JVM (Android), LLVM (iOS, macOS, watchOS), JavaScript (Web) və yerli binary fayllar (Linux, Windows). KMP UI freymvorku deyil — o, interfeysləri deyil, biznes məntiqinin təkrar istifadəsi problemini həll edir.
KMP arxitekturası shared module — platformadan asılı olmayan kodu olan commonMain və hər hədəf üçün source sets (androidMain, iosMain, desktopMain) ehtiva edən Gradle modulu ətrafında qurulur. JetBrains-in 2025-ci il məlumatlarına görə, yeni Kotlin layihələrinin 40%-dən çoxu platformalar arasında kod paylaşmaq üçün KMP-dən istifadə edir.
Kotlin Multiplatform Mobile (KMM) — iOS+Android mobil ssenarisi üçün əvvəlki ad. Kotlin 2.1+-dan etibarən KMM termini ümumi Kotlin Multiplatform ilə əvəz olunub, çünki texnologiya mobil inkişaf hüdudlarından çıxıb. Netflix, McDonald's və VMware mobil tətbiqlər arasında kod paylaşmaq üçün KMP-dən istehsalatda istifadə edir.
Expect/actual — platforma kodu ilə iş üçün KMP-nin əsas mexanizmi. commonMain-də expect-bəyannamə (funksiya, sinif, property) elan edilir, hər platform-specific source set-də (androidMain, iosMain) isə actual-tətbiq. Kompilyator hər expect üçün hər hədəf platformada actual-ın mövcud olduğunu yoxlayır.
// commonMain — platforma API-nin bəyannaməsi
expect fun getPlatformName(): String
expect class PlatformContext(val appVersion: String)
// androidMain — Android üçün actual
actual fun getPlatformName(): String = "Android \${Build.VERSION.SDK_INT}"
// iosMain — iOS üçün actual
actual fun getPlatformName(): String =
UIDevice.currentDevice.systemNameSource sets iyerarxiyası KMP-də aralıq səviyyələr yaratmağa imkan verir: məsələn, iosArm64Main (fiziki iOS cihazları) və iosSimulatorArm64Main (simulyator) ümumi iosMain ilə. commonMain-dən gələn kod bütün platformalar üçün əlçatandır, iosMain-dən gələn kod isə yalnız iOS hədəfləri üçün. Bu, tətbiq hər platforma üçün deyil, platformalar qrupu üçün fərqli olduqda təkrarlanmanı azaldır.
Təcrübədə expect/actual aşağıdakılar üçün istifadə olunur: yerli yaddaş əldə etmək (SharedPreferences vs NSUserDefaults), şəbəkə ilə iş (hər platforma üçün HttpEngine), fayl sisteminə giriş, kriptoqrafiya və analitika. JetBrains expect/actual sayını minimuma endirməyi və mümkün qədər çox kodu commonMain-ə çıxarmağı tövsiyə edir.
Shared module — `org.jetbrains.kotlin.multiplatform` plugin-i ilə standart Gradle modulu. O, ümumi kodu `src/commonMain/kotlin/`-də və platforma tətbiqlərini `src/androidMain/kotlin/` və `src/iosMain/kotlin/`-də ehtiva edir. KMP layihəsi həmçinin shared modulundan asılı olan `androidApp` və `iosApp`-i birləşdirir.
// build.gradle.kts — shared module
plugins {
kotlin("multiplatform")
id("com.android.library")
}
kotlin {
androidTarget()
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach {
it.binaries.framework {
baseName = "shared"
isStatic = true
}
}
sourceSets {
val commonMain by getting {
dependencies {
implementation("io.ktor:ktor-client-core:3.1.0")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
}
}
val androidMain by getting {
dependencies {
implementation("io.ktor:ktor-client-okhttp:3.1.0")
}
}
val iosMain by creating {
dependencies {
implementation("io.ktor:ktor-client-darwin:3.1.0")
}
}
}
}KMP üçün Gradle konfiqurasiyası iOS hədəflərinin — x64 (Intel simulyatoru), arm64 (fiziki cihazlar) və simulatorArm64 (Apple Silicon simulyatoru) açıq şəkildə göstərilməsini tələb edir. Hər hədəf üçün ayrıca Apple framework yaradılır. `kotlin("multiplatform")` plugin-i elan edilmiş hədəflərdən asılı olaraq avtomatik olaraq JVM və LLVM altında kompilyasiyanı konfiqurasiya edir.
Ktor və kotlinx.serialization — ümumi kodu dəstəkləyən standart KMP kitabxanaları. Ktor hər platforma üçün mühərriklərlə (Android üçün OkHttp, iOS üçün Darwin) HTTP klienti təmin edir. kotlinx.serialization commonMain-də çoxplatformalı tətbiq sayəsində expect/actual olmadan istənilən platformada işləyir.
Kotlin/Native — LLVM vasitəsilə Kotlin-i yerli koda kompilyasiya edən kompilyator. iOS üçün shared module Apple framework (.framework) şəklində kompilyasiya olunur və Xcode vasitəsilə birləşdirilir. Swift/Objective-C-dən ümumi kodun çağırılması yaradılmış Objective-C başlıqları vasitəsilə baş verir, buna görə də shared module API-si Objective-C ilə uyğun olmalıdır.
iOS inteqrasiyasının məhdudiyyətləri: Kotlin kolleksiyaları (List, Map) NSArray/NSDictionary-ə çevrilir. Standart parametrləri olan funksiyalar ixrac olunmur — overloads lazımdır. Suspend-funksiyalar üçün `@ObjCName` ilə callback-əsaslı metodlar və Kotlin 2.0+-dan async/await dəstəyi yaradılır.
// iOS tətbiqi: shared module-un Swift-dən çağırılması
import shared
class ViewModel: ObservableObject {
let repository = UserRepository()
func loadUsers() {
repository.fetchUsers(completionHandler: { result, error in
if let users = result as? [User] {
print("Users: \(users.count)")
}
})
}
}Shared module-un Xcode-da inteqrasiyası embed-and-framework vasitəsilə baş verir — yaradılmış `.xcframework` Xcode layihəsinə əlavə olunur. Gradle plugin-i embedAndSignAppleFrameworkForXcode vasitəsilə yığma zamanı framework-u avtomatik yeniləyə bilər. Simulyatorda sınamaq üçün iosSimulatorArm64 və ya iosX64 binary faylı kifayətdir.
KMP, Flutter və React Native arasında seçim prioritetdən asılıdır: məntiqin təkrar istifadəsi və ya tam çoxplatformalılıq. KMP hər platformada yerli UI təmin edir, lakin interfeys üçün iki kod bazası tələb edir. Flutter və React Native vahid UI-dən istifadə edir, lakin yerlilikdən itirir.
| Xüsusiyyət | KMP | Flutter | React Native |
|---|---|---|---|
| UI freymvorku | Yerli (Android XML/Jetpack Compose + SwiftUI) | Dart + öz Skia rendereri | React + yerli komponentlər |
| Ümumi kod | Biznes məntiqi, şəbəkə, verilənlər bazası, validasiya | Yerli pluginlər istisna olmaqla 100% | Yerli modullar istisna olmaqla 100% |
| Performans | Yerli (aralıq təbəqə yoxdur) | Yüksək (Skia Engine) | Orta (JSI Bridge) |
| iOS dəstəyi | Kotlin/Native (əla) | Əla | Yaxşı |
| Giriş həddi | Orta (Kotlin + yerli platformalar) | Aşağı (bir dil + bir UI) | Aşağı (JS/TS + React) |
KMP nə vaxt seçilməlidir: layihə yüksək performanslı UI tələb edir (oyunlar, xəritələr, animasiyalar), mövcud yerli kodu təkrar istifadə etmək lazımdır, komanda artıq Kotlin və yerli platformaları bilir. Flutter/RN nə vaxt seçilməlidir: məhdud büdcəli MVP və ya startup, bir profilli komanda, UI dərin yerli fərdiləşdirmə tələb etmir.
KMP alətləri ekosisteminə tətbiqin bütün təbəqələri üçün kitabxanalar daxildir: şəbəkə (Ktor), serializasiya (kotlinx.serialization), verilənlər bazası (SQLDelight), naviqasiya (Decompose), DI (Koin) və məlumat saxlanması (multiplatform-settings). JetBrains bütün platformalarda işləyən Kotlin-də UI freymvorku olan Compose Multiplatform-u dəstəkləyir.
// SQLDelight + Ktor ilə KMP-də Repository
class UserRepository(
private val httpClient: HttpClient,
private val db: AppDatabase
) {
suspend fun syncUsers(): List<User> {
val remote = httpClient.get("https://api.example.com/users")
.body<List<UserDto>>()
db.userQueries.replaceAll(remote.map { it.toDomain() })
return db.userQueries.selectAll().executeAsList()
}
}Compose Multiplatform — Jetpack Compose-ə əsaslanan KMP üçün UI freymvorku. Android, iOS, Desktop və Web üçün Kotlin-də interfeys yazmağa imkan verir. 2025-ci ildə Compose Multiplatform Android və Desktop üçün stabilliyə çatdı; iOS hədəfi beta mərhələsindədir. Yerli UI ilə istehsalat layihələri üçün KMP-nin üstünlüyü Flutter-dan əsas fərq olaraq qalır.
Tez-tez verilən suallar
KMM — iOS və Android üçün KMP-nin mobil ssenarisidir. Kotlin 2.1+ versiyasından etibarən JetBrains hər iki termini Kotlin Multiplatform-da birləşdirdi, çünki texnologiya təkcə mobil platformaları deyil, həm də Desktop və Web-i dəstəkləyir. KMM layihələri işləməyə davam edir, lakin indi bu ümumi KMP-nin bir hissəsidir.
Bəli. KMP Objective-C başlıqları ilə Kotlin/Native vasitəsilə Apple framework-ə kompilyasiya olunur. SwiftUI bu framework-u adi kitabxana kimi idxal edir. Shared module Swift-dən müəyyən məhdudiyyətlərlə çağırılan Kotlin siniflərini və funksiyalarını ixrac edir (məsələn, Kotlin kolleksiyaları Foundation tiplərinə çevrilir).
iOS-da shared module iosTest source set-də Kotlin/Native testləri vasitəsilə test edilir. UI testləri üçün idxal edilmiş framework ilə Xcode-da XCTest istifadə olunur. Kotlin testləri commonTest-də kotlin.test ilə yazılır və iosSimulatorArm64Test Gradle tapşırığı vasitəsilə iOS simulyatorunda icra olunur.
Əsas KMP kitabxanaları: Ktor (şəbəkə), kotlinx.serialization (JSON), SQLDelight (verilənlər bazası), Koin (DI), Decompose (naviqasiya), multiplatform-settings (SharedPreferences/NSUserDefaults), Apollo GraphQL, Firebase (KMP-NativeCoroutines vasitəsilə). Compose Multiplatform bütün platformalar üçün UI təmin edir.
Bəli. KMP Gradle 8.5+ ilə tam uyğundur. Kotlin 2.1-dən başlayaraq rəsmi pluginlər Gradle 8-i dəstəkləyir. build.gradle.kts vasitəsilə kotlin("multiplatform") ilə konfiqurasiya Gradle 7.6+ tələb edir, lakin optimal yığma performansı üçün 8.5 versiyası tövsiyə olunur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun