Kotlin Multiplatform Mobile (KMM), iOS ve Android uygulamalarında Kotlin paylaşımlı kodunu kullanırken her platformda yerel arayüzleri koruyan bir JetBrains teknolojisidir. Hibrit framework'lerin aksine KMM, WebView kullanmaz ve arayüzleri soyutlamalar yoluyla oluşturmaz — iş mantığı bir kez yazılırken, kullanıcı arayüzü tamamen yerel kalır. JetBrains, 2025'e göre KMM, dünya çapında 40.000'den fazla ekip tarafından kullanılmaktadır. expect/actual, paylaşılan kodda platforma bağımlı API'ler bildirmeye izin veren temel bir Kotlin mekanizmasıdır.
Önemli Noktalar
Kotlin Multiplatform Mobile (KMM), mobil uygulamanın paylaşılan iş mantığını Kotlin ile yazmaya ve kod tekrarı olmadan iOS ve Android'de kullanmaya olanak tanıyan bir teknolojidir. Ionic veya Cordova'nın aksine KMM, arayüzü bir WebView'da oluşturmaz — kullanıcı arayüzü tamamen yerel kalır ve SwiftUI (iOS) ve Jetpack Compose (Android) ile yazılır.
KMM, 2019 yılında JetBrains tarafından Kotlin Multiplatform stratejisinin bir parçası olarak duyuruldu. Diğer platformlar arası çözümlerden temel farkı, framework'ün kullanıcı arayüzünü birleştirmeye çalışmaması, bunun yerine her iki platform için gerçekten aynı olan kodu paylaşmaya odaklanmasıdır: ağ istekleri, veri modelleri, form doğrulama, iş kuralları ve veritabanı işlemleri.
JetBrains Geliştirici Anketi'ne (2025) göre KMM, mobil geliştiricilerin %14'ü tarafından kullanılmaktadır ve bu oran yıllık %5 artmaktadır. Teknoloji, hibrit çözümlerin kabul edilemez olduğu, yüksek performans ve yerel kullanıcı deneyimi gereksinimleri olan şirketler tarafından seçilmektedir.
KMM mimarisi üç modülden oluşur: shared (Kotlin'de ortak kod), iosApp (Swift'te yerel iOS uygulaması) ve androidApp (Kotlin'de yerel Android uygulaması). Paylaşılan modül, Android için JAR ve iOS için evrensel bir framework (Apple Framework) olarak derlenir.
Paylaşılan modül, platformdan bağımsız tüm katmanları içerir: Ktor Client kullanan ağ katmanı, kotlinx.serialization ile serileştirme içeren veri modelleri, veri yönetimi için depolar, form doğrulama ve iş kuralları (örneğin, teslimat maliyeti hesaplama veya erişim izinlerini kontrol etme).
Paylaşılan modül, Gradle Multiplatform Plugin'i kullanır ve üç kaynak kümesi içerir: commonMain (ortak kod), androidMain (Android'e özel uygulamalar) ve iosMain (iOS'e özel uygulamalar). Kotlin/Native derleyicisi, ortak kodu iOS için yerel bir kütüphaneye dönüştürür ve bu kütüphane XCFramework aracılığıyla Swift projesine bağlanır.
Android modülü — Jetpack Compose veya ViewBinding ile Kotlin'de standart bir Android uygulamasıdır. Paylaşılan modül, normal bir Gradle bağımlılığı olarak bağlanır ve commonMain'deki tüm sınıflara doğrudan erişilebilir.
iOS modülü, Swift veya Objective-C ile bir Xcode projesidir. Paylaşılan modül, CocoaPods, Swift Package Manager veya XCFramework aracılığıyla bağlanır. Kotlin/Native, Kotlin türlerini dışa aktarmak için Objective-C başlıkları oluşturur ve bunları Swift'ten erişilebilir hale getirir.
expect/actual, paylaşılan kodda bir API bildirmeye (expect bildirimi) ve her platform için ayrı ayrı uygulamasını sağlamaya (actual bildirimi) olanak tanıyan Kotlin Multiplatform mekanizmasıdır. Derleyici, her hedef platform için bir actual bildirimi olduğundan emin olur.
expect/actual'ın tipik kullanım durumları: saat dilimi ile geçerli saati alma, SharedPreferences (Android) / UserDefaults (iOS) ile çalışma, kriptografik işlevler ve UUID oluşturma. Her platform kendi sistem API'sini kullanır.
expect/actual olmadan, birleşik iş mantığı koduna sahip olmak imkansız olurdu çünkü dosya sistemi, ağ ve depolama ile çalışmak için API'ler, iOS ve Android arasında sistem çağrısı düzeyinde farklılık gösterir. Mekanizma, geliştiricinin platforma özel kısmı uygulamayı unutmamasını sağlar.
Kamera veya biyometri ile çalışma gibi platform çağrıları için KMM, Cordova benzeri eklentilerle birleştirilmiş expect/actual mekanizmasını sunar, ancak Kotlin/Native üzerinde. JetBrains ayrıca, tarih ve saat işlemlerini soyutlayan kotlinx-datetime kütüphanesini de yayınlamıştır.
UUID oluşturma için bir expect işlevi bildirimi ve iOS ile Android için uygulamasını içeren temel bir KMM projesi yapısına bakalım.
// commonMain — ortak bildirim
expect fun generateUUID(): String
// androidMain — Android uygulaması
actual fun generateUUID(): String {
return java.util.UUID.randomUUID().toString()
}
// iosMain — iOS uygulaması
actual fun generateUUID(): String {
return platform.Foundation.NSUUID().UUIDString
}
Paylaşılan kodda, expect fun generateUUID() bildirilir. Android java.util.UUID kullanırken, iOS Foundation framework'ünden NSUUID kullanır. Paylaşılan modülün geri kalan kodunda, bu işlev platformdan bağımsız olarak çağrılır.
Paylaşılan kodda Ktor Client kullanarak bir ağ isteği örneği:
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())
}
}
Bu kod, her iki platformda da değişiklik yapılmadan çalışır. Ktor Client, ek yapılandırma gerektirmeden Android'de OkHttp'yi ve iOS'te NSURLSession'ı otomatik olarak kullanır. kotlinx.serialization aracılığıyla JSON serileştirme de platformlar arasıdır.
KMM, platformlar arası teknolojiler arasında benzersiz bir konuma sahiptir çünkü Flutter ve React Native'in aksine yerel arayüzü değiştirmeye çalışmaz. KMM, arayüzü birleştirmek için değil, mantığı paylaşmak için bir çözümdür.
| Kriter | KMM | Flutter | React Native |
|---|---|---|---|
| UI | Yerel (SwiftUI / Jetpack Compose) | Özel motor (Skia) | JavaScript → Yerel bileşenler |
| Dil | Kotlin (paylaşılan) + Swift / Kotlin (UI) | Dart | JavaScript / TypeScript |
| Performans | Maksimum (yerel UI) | Yüksek (özel oluşturma) | Orta (JS-Yerel köprü) |
| Kod paylaşımı | İş mantığı (%40–70) | UI + mantık (%80–95) | UI + mantık (%70–90) |
| Giriş engeli | Yüksek (iki dil) | Orta (bir dil) | Düşük (web geliştiricileri) |
KMM'nin ana avantajı, kullanıcı arayüzü üzerinde tam kontroldür. Bir uygulamanın her platformda yerel görünmesi ve davranması gerekiyorsa (örneğin, platform animasyonlarıyla iOS TabBar ve Android BottomNavigation kullanmak), KMM, geçici çözümler olmadan bunu sağlayan tek platformlar arası çözümdür.
Dezavantajı, ekibin aynı anda Kotlin, Swift, Jetpack Compose ve SwiftUI bilmesi gerektiğinden işe alımı zorlaştırmasıdır. Flutter ve React Native, tek bir dil ve tek bir framework bilgisi gerektirir.
Kotlin Multiplatform Mobile güçlü bir teknolojidir, ancak benimsenmesi dengeli bir yaklaşım gerektirir. Temel avantajları ve ekiplerin karşılaştığı tipik zorlukları inceleyelim.
İlk ve en önemli avantaj, kod tekrarını azaltmaktır. JetBrains Vaka Çalışmalarına (2024) göre, KMM'yi benimseyen ekipler, ağ katmanı için %60–80 ve genel iş mantığı için %40–50 oranında yinelenen kodu azaltır. Bu, geliştirme hızını ve hata sayısını doğrudan etkiler.
İkinci avantaj, yerel uygulamalar seviyesinde performanstır. Hibrit framework'lerin aksine KMM, kullanıcı arayüzü ile sistem arasına soyutlama katmanları eklemez. İş mantığı kodu, her platform için ayrı ayrı Swift veya Kotlin ile yazılmış kadar hızlı çalışır.
Temel zorluk, ekip niteliğidir. Geliştiricilerin Kotlin (paylaşılan modül için) yanı sıra Swift ve Jetpack Compose'u (kullanıcı arayüzü için) bilmeleri gerekir. Evrensel bir uzman bulmak zordur, bu nedenle ekipler genellikle paylaşılan modülü birlikte yöneten Android ve iOS geliştiricilerinden oluşur.
İkinci zorluk araçlardır. KMM, Gradle, CocoaPods veya Swift Package Manager yapılandırmasının yanı sıra Xcode ile entegrasyon gerektirir. Projenin erken aşamalarında, özellikle C kütüphaneleriyle çalışırken derleme yapılandırma sorunları yaygındır.
Üçüncü zorluk hata ayıklamadır. Kotlin/Native ve Swift'in kesiştiği noktada bir hata oluştuğunda, nedenini belirlemek monolitik bir uygulamaya göre daha zordur. JetBrains hata ayıklama araçlarını sürekli iyileştirmektedir, ancak pratikte ekipler zamanlarının %20'sine kadarını altyapı görevlerine harcar.
Sık sorulan sorular
Evet, KMM iOS'u tek hedef platform olarak destekler. Paylaşılan modül, XCFramework aracılığıyla Swift projesine bağlanan bir iOS framework'ü olarak derlenir. Android modülü oluşturulması gerekmez. Bu, bir iOS uygulamasının iş mantığı için Kotlin kullanmak isteyen ekipler için faydalıdır.
Kotlin/Native, sanal makine olmadan Kotlin kodunu yerel ikili dosyaya dönüştüren bir derleyicidir. KMM, paylaşılan modülü iOS için derlemek üzere Kotlin/Native kullanır. Android için KMM, standart Kotlin/JVM derleyicisini kullanır. Kotlin/Native, KMM'nin teknolojik temelidir.
KMM'de yerel veritabanları ile çalışmak için SQLDelight kullanılır — SQL sorgularından Kotlin kodu oluşturan platformlar arası bir kütüphane. Android'de Android SQLite API aracılığıyla, iOS'te ise yerel SQLite (CFNetwork) aracılığıyla çalışır. Bir alternatif, MongoDB'den Realm Kotlin SDK'dır.
KMM varsayılan olarak kullanıcı arayüzü bileşenleri içermez — arayüz SwiftUI ve Jetpack Compose ile ayrı ayrı yazılır. Ancak, Compose Multiplatform (JetBrains'ten) gibi kütüphaneler, yerel framework'ler olmadan doğrudan iOS ve Android'de Kotlin ile kullanıcı arayüzü oluşturmaya olanak tanır.
KMM büyük şirketler tarafından kullanılmaktadır: Netflix (öneri mantığı paylaşımı), McDonald's (mobil uygulama), VMWare (kurumsal uygulamalar) ve Leroy Merlin (yapı malzemeleri uygulaması). JetBrains ekosistem geliştirmeye aktif olarak yatırım yaptıkça liste büyümektedir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun