2026'da KMP: Kotlin Multiplatform'un Mimarisi, Kuruluşu ve Ekosistemi
Kotlin Multiplatform (KMP) yıllardır "ilginç ama henüz kullanıma hazır değil" olarak etiketlendi. üretim". 2026 yılında bu anlatı tamamen değişti: KMP olgunluğa ulaştı istikrarlı iOS API'ye sahip kurumsal, Compose Multiplatform tüm önemli platformlarda kararlı, e Hızlı Dışa Aktarma bu da sonunda Objective-C köprüleme ihtiyacını ortadan kaldırır yerel Swift koduyla birlikte çalışabilirlik.
Bu kılavuz, 2026'daki KMP ekosistemine kapsamlı bir genel bakış sunuyor: o zamandan bu yana neler değişti Önceki yıllara göre Flutter ve React Native ile karşılaştırıldığında nasıl, doğru mimari nedir platformlar arası bir proje için ve KMP'nin kullanım durumunuz için doğru seçim olup olmadığını nasıl değerlendireceğiniz.
Ne Öğreneceksiniz
- KMP mimarisi: paylaşılan modüller, kaynak seti ve platforma özel kod
- KMP vs Flutter vs React Native: teknik karşılaştırma 2026'ya güncellendi
- Swift Export ve iOS ile yerel birlikte çalışma
- Multiplatform Oluşturma: Mevcut durum ve sınırlamalar
- KMP 2026 kütüphane ekosistemi: Ktor, SQLDelight, Koin
- KMP ne zaman seçilmeli ve ne zaman seçilmemeli
2025-2026'da Kalite Atılımı
KMP 1.0, iş mantığını paylaşmak için zaten stabildi ancak önemli sınırlamalara sahipti: iOS entegrasyonu, otomatik olarak oluşturulan Objective-C başlıklarını gerektiriyordu (bu durum için pek de deyimsel değil) Swift geliştiricileri) ve Compose Multiplatform'un hâlâ iOS ve masaüstünde alfa sürümünde birçok API'si vardı.
2024 ile 2026 arasında meydana gelen ana değişiklikler:
- Hızlı Dışa Aktarma (KMP 1.9+'da kararlı): Adlandırmayla yerel Swift API'si oluşturun deyimsel, protokoller, varsayılan argümanlar ve ara Amaç-C yok. Geliştiriciler iOS artık Kotlin kodunu sanki saf Swiftmiş gibi kullanıyor.
- Multiplatform 1.7+ oluşturun (iOS'ta kararlı): Tamamen paylaşılan kullanıcı arayüzü Android, iOS, Masaüstü (JVM) ve Web'de (Wasm) Kotlin/Compose. Platforma özel işleme motorları artık olgunlaştılar ve karmaşık uygulamalar için bile performans kabul edilebilir düzeyde.
- Amper derleme sistemi (beta): KMP projeleri için Gradle'a basitleştirilmiş bir alternatif, Karmaşık Kotlin DSL yerine YAML kurulumuyla.
- Geliştirilmiş Aletler: Android Studio Ladybug ve sonraki sürümleri KMP desteğine sahiptir Platformlar arası yeniden düzenleme, yerleşik iOS simülatöründe hata ayıklama ve profil oluşturma özellikleriyle birinci sınıf.
KMP Projesinin Mimarisi
KMP'nin temel mimarisi, paylaşılan kodun (commonMain) ayrılmasına dayanmaktadır. ve platforma özgü kod. React Native'in söz verdiği gibi "her şeyi bir kez yazmak" ile ilgili değil, ancak olanı paylaşmak ve platforma devretmek mantıklı olan mantığı paylaşmaktır. özünde yerli.
// Struttura tipica di un progetto KMP nel 2026
shared/
├── src/
│ ├── commonMain/kotlin/
│ │ ├── data/
│ │ │ ├── repository/ # Repository patterns condivisi
│ │ │ ├── network/ # Ktor client (HTTP multiplatform)
│ │ │ └── local/ # SQLDelight (DB multiplatform)
│ │ ├── domain/
│ │ │ ├── model/ # Data classes pure Kotlin
│ │ │ ├── usecase/ # Logica business
│ │ │ └── repository/ # Interfacce repository
│ │ └── presentation/ # ViewModels (Compose o altri)
│ │
│ ├── androidMain/kotlin/
│ │ └── actual/ # Implementazioni Android-specific
│ │ ├── DatabaseDriver.kt
│ │ └── HttpEngine.kt
│ │
│ ├── iosMain/kotlin/
│ │ └── actual/ # Implementazioni iOS-specific
│ │ ├── DatabaseDriver.kt
│ │ └── HttpEngine.kt
│ │
│ └── desktopMain/kotlin/ # (opzionale, per desktop JVM)
│
androidApp/ # App Android con UI nativa
iosApp/ # App iOS con UI nativa (Swift/SwiftUI)
desktopApp/ # App desktop (opzionale)
composeApp/ # (alternativa: UI condivisa con Compose MP)
Yol gösterici prensip: Mümkün olduğu kadar paylaşın, gerektiğinde yerel API'leri kullanın. Genellikle olgun bir KMP uygulaması şunları paylaşır:
- İş mantığının %90-95'i (etki alanı katmanı)
- Veri katmanının %80-85'i (ağ, kalıcılık, önbelleğe alma)
- Sunum katmanının %40-80'i (Compose Multiplatform'un kullanılıp kullanılmadığına bağlıdır)
- Kullanıcı arayüzü katmanının %0-20'si (platforma özgü yerel kullanıcı arayüzü kullanılıyorsa)
KMP, Flutter ve React Native: 2026 Karşılaştırması
"Hangi platformlar arası çerçeveyi kullanmalı?" 2026'da 2022'den farklı yanıtları var. İşte dürüst bir karşılaştırma:
// Matrice decisionale semplificata
| KMP | Flutter | React Native
--------------------|--------------|-------------|-------------
Linguaggio | Kotlin | Dart | TypeScript/JS
UI Engine | Nativa o CMP | Custom (Skia)| Nativa (bridge)
Performance | Ottima | Buona | Buona
Look nativo | Perfetto | Non nativo | Parziale
Team Android-first | Eccellente | Buono | Buono
Condivisione codice | ~70-80% | ~95% | ~80-90%
Ecosistema librerie | Crescente | Maturo | Maturo
Enterprise adoption | Alta (2026) | Alta | Diminuzione
Temel fark: Flutter çizim yapmak için özel bir işleme motoru (Pervane) kullanır tüm kullanıcı arayüzü, platformlar arası görsel tutarlılık sağlar, ancak bu, uygulamanın "yerel" görünümünün pahasına olur platformu. Yerel kullanıcı arayüzüne sahip KMP tam olarak yerel bir uygulamaya benziyor çünkü Amerika bileşenler platformun yerlisi.
KMP'yi Ne Zaman Seçmelisiniz?
KMP şu durumlarda en uygun seçimdir:
- Ekibin güçlü Android/Kotlin uzmanlığı var ve bu mantığı iOS'a getirmek istiyor
- Kullanıcı arayüzünün "yerel" yönü tartışılamaz bir gerekliliktir (bankacılık uygulamaları, kurumsal)
- Platforma özgü kullanıcı arayüzü üzerinde tam kontrolü korurken iş mantığını paylaşmak istiyorsunuz
- Uygulamanın karmaşık iş mantığı var (kullanıcı arayüzü sorunlarından izole edilmesi tercih edilir)
- Her şeyi yeniden yazmadan iOS'u mevcut bir Android uygulamasına ekliyorsunuz
Flutter veya React Native şu durumlarda tercih edilebilir:
- Ekibin web/React becerileri var ve bunları yeniden kullanmak istiyor
- Kullanıcı arayüzü paylaşımını en üst düzeye çıkarmak istiyorsunuz (yalnızca mantık değil)
- Pazara çıkış süresi kritik ve ekip Kotlin'i bilmiyor
Swift Export: 2026'da iOS Birlikte Çalışabilirliği
Swift Export'tan önce, paylaşılan Kotlin kodu başlıklar aracılığıyla iOS'a sunuldu Otomatik olarak oluşturulan Objective-C. Sonuç şu şekilde API oldu:
// PRIMA (Objective-C headers generati da KMP):
// Swift deve usare classi con nomi generati automaticamente
let viewModel = SharedUserViewModel()
let users = viewModel.users as! [SharedUser]
viewModel.loadUsers(completionHandler: { users, error in
// Gestione callback non-idiomatica
})
// DOPO (Swift Export in KMP 1.9+):
// Swift idiomatico, direttamente da codice Kotlin
let viewModel = UserViewModel()
let users: [User] = viewModel.users
await viewModel.loadUsers() // async/await nativo Swift
Swift Export, Kotlin eşyordamlarını otomatik olarak şu dile çevirir: async/await Hızlı,
Swift yapısındaki veri sınıfları (otomatik eşitlenebilir), Swift numaralandırmalarındaki mühürlü sınıflar,
ve AsyncSequence'deki Akışlar. Sonuç olarak iOS geliştiricileri Kotlin API'sini kullanıyor
sanki Swift'te yazılmış gibi.
Multiplatform Oluştur: Mevcut Durum
Compose Multiplatform (CMP), Compose Kotlin'de yazılan kullanıcı arayüzünün tamamını paylaşmanıza olanak tanır Android, iOS, Masaüstü JVM ve Web'de (Kotlin/Wasm aracılığıyla). 2026 yılında iOS üzerinde kurulan ve İlk betalara kıyasla önemli ölçüde iyileştirildi:
// commonMain: UI condivisa con Compose Multiplatform
@Composable
fun UserListScreen(
users: List<User>,
onUserClick: (User) -> Unit
) {
LazyColumn {
items(users) { user ->
UserCard(user = user, onClick = { onUserClick(user) })
}
}
}
@Composable
fun UserCard(user: User, onClick: () -> Unit) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 8.dp)
.clickable(onClick = onClick)
) {
Column(modifier = Modifier.padding(16.dp)) {
Text(user.name, style = MaterialTheme.typography.titleMedium)
Text(user.email, style = MaterialTheme.typography.bodySmall)
}
}
}
Oluşturma kullanıcı arayüzü Android ve iOS'ta aynıdır. Oluşturmada Skiko (Skia'nın Kotlin bağlaması) kullanılır yerel UIKit bileşenleri yerine iOS'ta; bu, uygulamanın tutarlı bir görünüme sahip olduğu anlamına gelir platformlar arasıdır ancak yerel bir SwiftUI uygulamasıyla aynı değildir.
2026'da KMP Kütüphane Ekosistemi
Olgun kütüphanelerden oluşan bir ekosistem üretkenlik için gereklidir. 2026 yılında bunlar Bir KMP projesi için temel kütüphaneler:
// build.gradle.kts (shared module)
kotlin {
sourceSets {
commonMain.dependencies {
// Network: client HTTP multiplatform
implementation("io.ktor:ktor-client-core:2.3.10")
implementation("io.ktor:ktor-client-content-negotiation:2.3.10")
implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.10")
// Database: SQL multiplatform
implementation("app.cash.sqldelight:runtime:2.0.2")
// Serialization
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0")
// Coroutines multiplatform
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
// Dependency Injection
implementation("io.insert-koin:koin-core:3.5.6")
// DateTime multiplatform
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.0")
// Logging multiplatform
implementation("co.touchlab:kermit:2.0.3")
}
androidMain.dependencies {
implementation("io.ktor:ktor-client-okhttp:2.3.10")
implementation("app.cash.sqldelight:android-driver:2.0.2")
}
iosMain.dependencies {
implementation("io.ktor:ktor-client-darwin:2.3.10")
implementation("app.cash.sqldelight:native-driver:2.0.2")
}
}
}
Tam Bir Örnek: KMP'deki Desen Havuzu
KMP'de kullanıcı yönetimi için basit bir havuzun nasıl uygulanacağını görelim, ortak kod ile platforma özgü kod arasındaki ayrımı gösteren:
// commonMain: Interfaccia repository e modello
data class User(
val id: Long,
val name: String,
val email: String,
val createdAt: Instant
)
interface UserRepository {
suspend fun getUsers(): List<User>
suspend fun getUserById(id: Long): User?
suspend fun saveUser(user: User): User
}
// commonMain: Implementazione con Ktor + SQLDelight
class UserRepositoryImpl(
private val httpClient: HttpClient,
private val database: AppDatabase
) : UserRepository {
override suspend fun getUsers(): List<User> {
return try {
// Prima controlla il database locale
val cached = database.userQueries.selectAll().executeAsList()
if (cached.isNotEmpty()) {
cached.map { it.toDomain() }
} else {
// Poi scarica dalla rete e salva
val remote = httpClient.get("$BASE_URL/users").body<List<UserDto>>()
remote.forEach { database.userQueries.insert(it.toEntity()) }
remote.map { it.toDomain() }
}
} catch (e: Exception) {
// Fallback al cache anche se la rete fallisce
database.userQueries.selectAll().executeAsList().map { it.toDomain() }
}
}
}
Kurumsal Benimseme İstatistikleri (2026)
2026 yılının ilk çeyreğine güncellenen Kotlin ekosistem verilerine göre:
- Fortune 500 Şirketlerinde KMP'nin Benimsenmesi: %18 (2023’te %7 idi), çoğunluk fintech, e-ticaret ve B2B kurumsal uygulamalarda.
- Ana kullanım durumları: Android ve iOS arasında iş mantığını paylaşma (%82), JVM/Android arka uç senkronizasyonu (%45), masaüstü uygulamaları (%12).
- Önemli şirketler: Cash App (Block), VMware, Philips, Touchlab ve birçok KOBİ Avrupalı teknoloji şirketleri üretimde KMP kullanıyor.
- Değer kazanma zamanı: Ekipler sürenin %30-40 oranında azaldığını bildirdi özelliklerin benimsenmesinin ilk 3 ayından sonra uygulanması.
Bir Takıma Kabul Edilmeyle İlgili Hususlar
KMP'yi benimsemeden önce şu pratik faktörleri göz önünde bulundurun:
- Takım becerileri: KMP, Kotlin'i bilen geliştiricilere ihtiyaç duyar. İdeal durumda, Android ekibi KMP'yi iOS'a getiriyor, tam tersi değil.
- Gradle öğrenme eğrisi: Kotlin Multiplatform ile KMP derleme sistemi Gradle Plugin'in dik bir öğrenme eğrisi vardır. Anlamaya zaman ayırın Başlamadan önce kaynak ayarları.
- Kütüphane uyumluluğu: tüm Java/Android kitaplıkları uyumlu değildir Kotlin/Native (iOS) ile. Bir bağımlılık eklemeden önce daima KMP uyumluluğunu kontrol edin.
- Yapım süresi: KMP projelerinin oluşturulma süreleri uygulamalara göre daha uzundur tek platform, özellikle iOS için (Kotlin/Native derleme). İyi yapılandırılmış bir CI/CD önbelleğe alma ve gerekli.
Sonuçlar ve Sonraki Adımlar
2026'daki Kotlin Multiplatform, kütüphane ekosistemine sahip olgun ve istikrarlı bir platformdur kurumsal kalite. Bu herkes için doğru çözüm değil; eğer ekibiniz React-first ise, React Native veya Expo daha mantıklı - ancak kodu taşımak isteyen Android öncelikli ekipler için iOS'ta deyimsel olarak KMP, profesyonellerin tercihi haline geldi.
Sonraki makale nasıl yapılacağını gösteriyor İlk KMP projenizi sıfırdan oluşturun: kaynak kümesi yapısı, Gradle sürüm kataloğu, ilk beklenen/gerçek işlevler ve entegrasyon Verimli bir geliştirme iş akışı için Android Studio ile.
Seri: Kotlin Multiplatform — Tek Kod Tabanı, Tüm Platformlar
- Madde 1 (bu): 2026'da KMP - Mimarlık, Kuruluş ve Ekosistem
- 2. Makale: İlk KMP Projenizi Yapılandırın - Android, iOS ve Masaüstü
- Madde 3: Paylaşılan Modül Mimarisi - beklenen/gerçek, Arayüzler ve DI
- Madde 4: Ktor İstemcisi ile Çoklu Platform Ağ İletişimi
- Makale 5: SQLDelight ile Çoklu Platform Kalıcılığı
- Madde 6: Çoklu Platform Oluşturma — Android ve iOS'ta Paylaşılan Kullanıcı Arayüzü
- Madde 7: Durum Yönetimi KMP — ViewModel ve Kotlin Flows
- Madde 8: KMP Testi - Birim Testi, Entegrasyon Testi ve UI Testi
- Madde 9: Swift Export — iOS ile Deyimsel Birlikte Çalışma
- Madde 10: KMP Projeleri için CI/CD — GitHub Eylemleri ve Fastlane
- Madde 11: Örnek Olay İncelemesi - Üretimde KMP'li Fintech Uygulaması







