Mobil

Kotlin Multiplatform: Kod Paylaşımı

31 Oct 2025
5 dakika okuma
İninia Teknoloji

Kotlin Multiplatform (KMP), JetBrains tarafından geliştirilen ve farklı platformlar arasında kod paylaşımını mümkün kılan bir teknolojidir. Android, iOS, web ve backend arasında iş mantığını paylaşırken, UI'ı native tutabilirsiniz.

Kotlin Multiplatform Nedir?

KMP, Kotlin kodunun farklı hedeflere (Android, iOS, JVM, JS, Native) derlenmesini sağlar. "Write once, run anywhere" yerine "Write once, adapt everywhere" felsefesini benimser.

KMP vs Flutter vs React Native

ÖzellikKMPFlutterReact Native
UI PaylaşımıOpsiyonel (Compose)EvetEvet
Logic PaylaşımıEvetEvetEvet
Native UIEvet (varsayılan)Custom renderBridge
DilKotlinDartJS/TS

Proje Yapısı

my-app/
├── androidApp/        # Android uygulaması
│   └── src/
├── iosApp/           # iOS uygulaması (Swift/SwiftUI)
│   └── iosApp/
├── shared/           # Paylaşılan kod
│   └── src/
│       ├── commonMain/    # Tüm platformlar
│       ├── androidMain/   # Android spesifik
│       └── iosMain/       # iOS spesifik
└── build.gradle.kts

Shared Kod Örneği

// shared/src/commonMain/kotlin/Platform.kt
expect class Platform {
    val name: String
}

expect fun getPlatform(): Platform

// shared/src/androidMain/kotlin/Platform.android.kt
actual class Platform {
    actual val name: String = "Android ${android.os.Build.VERSION.SDK_INT}"
}

// shared/src/iosMain/kotlin/Platform.ios.kt
actual class Platform {
    actual val name: String = UIDevice.currentDevice.systemName()
}

Ktor ile Network

// shared/src/commonMain/kotlin/ApiClient.kt
class ApiClient {
    private val client = HttpClient {
        install(ContentNegotiation) {
            json(Json { ignoreUnknownKeys = true })
        }
    }
    
    suspend fun getUsers(): List<User> {
        return client.get("https://api.example.com/users").body()
    }
}

SQLDelight ile Veritabanı

// shared/src/commonMain/sqldelight/com/example/User.sq
CREATE TABLE User (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT NOT NULL
);

selectAll:
SELECT * FROM User;

insertUser:
INSERT INTO User(name, email) VALUES (?, ?);

Compose Multiplatform (UI Paylaşımı)

// shared/src/commonMain/kotlin/App.kt
@Composable
fun App() {
    MaterialTheme {
        var count by remember { mutableStateOf(0) }
        
        Column(
            modifier = Modifier.fillMaxSize(),
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            Text("Count: $count")
            Button(onClick = { count++ }) {
                Text("Increment")
            }
        }
    }
}

iOS Entegrasyonu

// iosApp/iosApp/ContentView.swift
import SwiftUI
import shared

struct ContentView: View {
    let greet = Greeting().greet()
    
    var body: some View {
        Text(greet)
    }
}

Avantajlar

  • İş mantığını bir kez yaz, her yerde kullan
  • Native UI performansı
  • Platform API'larına tam erişim
  • Kademeli adoption (mevcut projelere eklenebilir)
  • JetBrains ve Google desteği

Dezavantajlar

  • iOS için Kotlin öğrenme eğrisi
  • Compose Multiplatform henüz olgunlaşıyor
  • iOS debugging daha zor
  • CocoaPods/SPM entegrasyonu

Kullanım Senaryoları

  • Mevcut native ekiplerin kod paylaşımı
  • Complex business logic uygulamaları
  • Backend + mobile kod paylaşımı
  • Kademeli cross-platform geçişi

Kotlin Multiplatform, native uygulamaların avantajlarını korurken kod paylaşımı sağlayan pragmatik bir çözümdür. Özellikle mevcut Kotlin/Android ekipleri için ideal bir seçenektir.

İninia Teknoloji

İstanbul Teknik Üniversitesi ARI Teknokent'te kurulu Ininia Teknoloji, 12+ yıllık deneyimle AR/VR, yapay zeka ve mobil uygulama alanlarında yenilikçi çözümler sunmaktadır.

Projeniz için profesyonel destek mi arıyorsunuz?

12+ yıllık deneyimimizle dijital dönüşümünüzü hızlandıralım.

Ücretsiz Görüşme Talep Et