Kotlin Multiplatform Mobile — nedir, temel kavramlar ve KMM mimarisi

Yazar: IT Sectr Yayınlanma: 2026-05-02 Okuma süresi: 9 dk

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

  • KMM — iOS ve Android arasında iş mantığını Kotlin ile paylaşmak için JetBrains teknolojisi
  • expect/actual — platforma özel uygulamalarla paylaşılan modülde platform API'lerini bildirme mekanizması
  • Yerel UI — arayüz SwiftUI ve Jetpack Compose ile ayrı ayrı yazılır, WebView olmadan
  • Paylaşılan modül — veri modelleri, ağ istekleri, doğrulama ve iş kurallarını içerir
  • Ktor ve Kotlinx — paylaşılan kodda ağ iletişimi ve serileştirme için JetBrains kütüphaneleri

Kotlin Multiplatform Mobile nedir?

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: paylaşılan modül ve platform uygulamaları

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: ortak koda neler dahil edilir

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.

Platform modülleri

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.

KMM'de expect/actual mekanizması

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.

KMM kod örnekleri

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.

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

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())
    }
}

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'nin Flutter ve React Native ile karşılaştırması

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.

KriterKMMFlutterReact Native
UIYerel (SwiftUI / Jetpack Compose)Özel motor (Skia)JavaScript → Yerel bileşenler
DilKotlin (paylaşılan) + Swift / Kotlin (UI)DartJavaScript / TypeScript
PerformansMaksimum (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ş engeliYü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.

KMM'yi benimsemenin avantajları ve zorlukları

Kotlin Multiplatform Mobile güçlü bir teknolojidir, ancak benimsenmesi dengeli bir yaklaşım gerektirir. Temel avantajları ve ekiplerin karşılaştığı tipik zorlukları inceleyelim.

KMM'nin avantajları

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

Benimseme zorlukları

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

KMM, Android olmadan yalnızca iOS için kullanılabilir mi?

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.

KMM, Kotlin/Native'den nasıl farklı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 veritabanlarıyla nasıl çalışır?

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, kullanıcı arayüzü bileşenlerini destekler mi?

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.

Hangi şirketler KMM'yi üretimde kullanıyor?

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

  • KMM — yerel UI ile Kotlin'de iOS ve Android arasında iş mantığını paylaşmak için JetBrains teknolojisi
  • Mimari, expect/actual aracılığıyla paylaşılan modül ve platform uygulamalarını içerir
  • Paylaşılan modül ağ iletişimi (Ktor), modeller (kotlinx.serialization) ve iş kurallarını içerir
  • expect/actual — paylaşılan kodda platforma bağımlı uygulamalar için temel mekanizma
  • Performans, UI soyutlama kullanmadığı için yerel uygulama seviyesindedir
  • Zorluklar yüksek ekip niteliği gereksinimleri ve derleme altyapısı kurulumunu içerir
  • KMM seçimi, yerel kullanıcı deneyimi ve yüksek mantık paylaşım yüzdesinin kritik olduğu projeler için uygundur

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.

Projeyi tartış

Ayrıca okuyun