Kotlin Multiplatform (KMP), iş mantığınızı bir kez yazıp hem Android hem de iOS tarafında paylaşmanızı sağlayan bir yaklaşım. Bu yazıda, sıfırdan bir KMP projesi kurmanın temel adımlarını ve nelere dikkat etmeniz gerektiğini anlatıyoruz.

KMP neden tercih edilir?

Tam bir cross-platform çözümün aksine (örneğin Flutter gibi), KMP arayüzü değil, iş mantığını paylaşır. Bu da her platformun kendi doğal arayüz kütüphanesini (Jetpack Compose, SwiftUI) kullanmaya devam etmesine olanak tanır — kullanıcı deneyiminden ödün vermeden kod tekrarını azaltır.

Proje yapısı

Tipik bir KMP projesi üç ana modülden oluşur: platformdan bağımsız ortak mantığın yaşadığı shared modülü, Android uygulaması ve iOS uygulaması. Ortak modül; ağ istekleri, veri modelleri ve iş kuralları gibi platformdan bağımsız kodu barındırır.

// shared/src/commonMain/kotlin/Greeting.kt
class Greeting {
    fun merhaba(): String {
        return "Merhaba, Kotlin Multiplatform!"
    }
}

Platforma özgü kod nasıl yazılır?

Bazı işlemler (örneğin dosya sistemi erişimi) platforma özgüdür. KMP bunun için expect/actual mekanizmasını sunar: ortak modülde bir fonksiyonun imzasını expect ile tanımlar, her platformda actual ile gerçek uygulamasını yazarsınız.

// commonMain
expect fun platformAdi(): String

// androidMain
actual fun platformAdi(): String = "Android"

// iosMain
actual fun platformAdi(): String = "iOS"

Sık karşılaşılan tuzaklar

En sık yapılan hatalardan biri, ortak modülde platforma özgü bir kütüphaneyi doğrudan kullanmaya çalışmak. Bir diğeri ise iOS tarafında Kotlin/Native’in bellek yönetimi modelini göz ardı ederek, yönetilen nesnelerde beklenmedik çökmelere yol açmak — bu konuda dikkatli olmak, özellikle veritabanı katmanı (örneğin Realm) kullanan projelerde kritik.

Nereden başlamalı?

JetBrains’in resmi KMP şablonuyla başlamak, gereksiz yapılandırma karmaşasından kaçınmanın en hızlı yolu. İlk projenizde tek bir basit özelliği (örneğin bir API çağrısı) ortak modüle taşıyarak başlamanızı öneririz.

Sonuç

Kotlin Multiplatform, iki ayrı kod tabanı yönetmenin getirdiği yükü azaltmak isteyen ekipler için olgunlaşmış bir seçenek hâline geldi. Bir sonraki yazıda, KMP projesinde durum yönetimini nasıl kurguladığımızı ele alacağız.