Compose Multiplatform vs SwiftUI Karşılaştırması

Kotlin'den tek UI kod tabanıyla Android + iOS + Desktop + Web

VS
SwiftUI

Apple'ın native, deklaratif UI çatısı — tüm platform ailesinin ortak dili

21 dk okumaCross-Platform

Hızlı Karar

Güçlü bir Android/Kotlin ekibin varsa ve iOS'a en düşük maliyetle açılmak istiyorsan Compose Multiplatform mantıklı: iOS hedefi Mayıs 2025'ten beri Stable. Ama iOS'un vitrin olduğu, Liquid Glass gibi yenilikleri (iOS 26+) gün-0 kullanman gereken üründe SwiftUI'ı geçmek zor — resmî doküman bile bu dil için native SwiftUI kabuğu öneriyor. Boyutta resmî ~9 MB'a karşılık bağımsız tek vakada 12 kat fark bildirildi; prototipini gerçek cihazda ölç.

Compose MultiplatformSwiftUI
Tam sonucu oku

Puan Karşılaştırması

Grafik yükleniyor...

Detaylı Puanlama

Detaylı Puanlama: Compose Multiplatform ve SwiftUI — kategori bazında 10 üzerinden puanlar
KategoriCompose MultiplatformSwiftUI
Performans
7/10
9/10
Öğrenme Kolaylığı
6/10
7/10
Ekosistem
6/10
9/10
Topluluk
6/10
9/10
İş Pazarı
5/10
9/10
Gelecek
7/10
9/10

Artıları & Eksileri

Compose Multiplatform

Artıları

  • Android ve iOS arasında UI kodunun büyük kısmını paylaşabiliyorsun — Respawn app'i %96 paylaşım oranıyla üretimde
  • Tek Kotlin ekibiyle iki platformu aynı anda geliştirebiliyorsun, ayrı bir iOS ekibi kurmadan
  • iOS hedefi Mayıs 2025'ten (1.8.0) beri resmî olarak Stable ve production-ready
  • VoiceOver, AssistiveTouch ve Full Keyboard Access resmî birinci sınıf destekle geliyor
  • Scroll fiziği, metin seçimi ve navigasyon jestleri native iOS davranışına yaklaştırılmış
  • UIKit ve SwiftUI ile interop var — mevcut native ekranları kademeli olarak Compose'a bağlayabiliyorsun
  • klibs.io kataloğu ve Jetpack kütüphanelerinin multiplatform desteği hızla büyüyor
  • Desktop (Stable) ve Web (Kotlin/Wasm, Beta) hedeflerini de aynı kod tabanından açabiliyorsun

Eksileri

  • Bağımsız bir geliştirici vakasında uygulama boyutu JetBrains'in ~9 MB iddiasının çok üzerine çıktı (iki ayrı uygulama arasında 12 kata varan fark bildirildi)
  • Sistem seviyesi görsel diller (iOS 26'dan beri Liquid Glass) için resmî dokümantasyon native SwiftUI kabuğuna dönmeyi öneriyor
  • Erişilebilirlik, Compose semantics'ten iOS nesnelerine bir eşleme katmanından geçiyor — SwiftUI'daki gibi sistemle aynı katmanda değil
  • Xcode Previews'a denk bir canlı-önizleme deneyimi yok — Compose Preview Android hedefi gerektiriyor, iOS tarafında hot reload yalnızca desktop JVM'de resmî
  • Ekip Kotlin bilmiyorsa öğrenme eğrisi + platform köprüleri (expect/actual) ek karmaşıklık getiriyor

En Uygun

Zaten güçlü bir Android/Compose ekibi olup iOS'a en düşük ek maliyetle açılmak isteyen şirketlerİş mantığının büyük kısmı zaten Kotlin'de olan, UI'ı da paylaşmak isteyen orta ölçekli ürünlerAndroid + iOS + Desktop'ı aynı anda hedefleyen iç araçlar ve B2B uygulamalarTasarım sisteminin platformlar arası birebir tutarlı olması gereken ürünlerHızlı MVP / doğrulama fazında tek ekiple iki mağazaya aynı anda çıkmak isteyenler

SwiftUI

Artıları

  • iOS'un o gün çıkan her yeni sistem bileşenine (ör. iOS 26/27 Liquid Glass) gün-0'da native erişim sağlıyor
  • Xcode Previews ile canlı, saniyeler içinde geri bildirim veren önizleme deneyimi sunuyor
  • VoiceOver ve erişilebilirlik API yüzeyi derin ve resmî olarak eksiksiz dokümante
  • Apple'ın kendi frameworkü olduğu için App Store inceleme ve HIG uyumu sürtünmesiz
  • iPhone, iPad, Mac, Apple Watch, Apple TV ve Vision Pro'ya tek dilde (Swift) yayılabiliyor
  • Scroll fiziği, klavye davranışı ve geri jesti sistemle birebir aynı — çünkü sistemin kendisi
  • Derin platform API'lerine (Core Animation, AVFoundation, Metal) doğrudan, köprüsüz erişim
  • Apple'ın uzun vadeli, birinci öncelikli yatırım alanı — WWDC her yıl büyük genişleme getiriyor

Eksileri

  • Yalnızca Apple platformlarında çalışıyor — Android tarafı için ayrı bir ekip/kod tabanı gerekiyor
  • İki platformlu (Android+iOS) bir ürün için UI kodu paylaşılamıyor, iş mantığı ayrı katmanda tutulmalı
  • Bazı karmaşık özel layout ve çizim senaryolarında hâlâ UIKit'e/Core Graphics'e düşmek gerekebiliyor
  • Uygulama App Store'da dağıtılacaksa Apple Developer Program'a (99 USD/yıl) kayıt zorunlu

En Uygun

iOS'un ürünün ana vitrini olduğu, HIG uyumunun ve yeni OS özelliklerinin gün-0 kullanılması gereken şirketlerVision Pro / visionOS, watchOS gibi UIKit'in hiç bulunmadığı Apple platformlarına çıkan uygulamalarApple ekosistemine derin şekilde bağımlı (widget, Live Activities, App Intents) ürünlerKüçük-orta ekiplerin hızlı iterasyonla tek platforma (iOS) odaklandığı projelerVar olan büyük bir SwiftUI/UIKit kod tabanını olduğu gibi büyütmeye devam eden ekipler

Kod Karşılaştırması

Compose Multiplatform
// Compose Multiplatform - commonMain: paylaşılan profil kartı
// (build.gradle.kts: kotlin { androidTarget(); iosArm64(); iosSimulatorArm64() })
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.*
import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.dp
import coil3.compose.AsyncImage

@Composable
fun ProfileCard(user: User, modifier: Modifier = Modifier) {
    var isFollowing by remember { mutableStateOf(false) }

    Row(
        modifier = modifier.fillMaxWidth().padding(16.dp),
        verticalAlignment = Alignment.CenterVertically
    ) {
        AsyncImage(
            model = user.avatarUrl,
            contentDescription = user.name,
            modifier = Modifier.size(64.dp).clip(CircleShape)
        )
        Spacer(Modifier.width(12.dp))
        Column(modifier = Modifier.weight(1f)) {
            Text(user.name, style = MaterialTheme.typography.titleMedium)
            Text(user.title, style = MaterialTheme.typography.bodySmall)
        }
        OutlinedButton(onClick = { isFollowing = !isFollowing }) {
            Text(if (isFollowing) "Takipten Çık" else "Takip Et")
        }
    }
}

// iosMain: CMP view'ını UIViewController olarak dışa aç
fun MainViewController() = ComposeUIViewController { ProfileCard(user = sampleUser) }
SwiftUI
// SwiftUI - profil kartı
import SwiftUI

struct ProfileCard: View {
    let user: User
    @State private var isFollowing = false

    var body: some View {
        HStack(spacing: 12) {
            AsyncImage(url: user.avatarURL) { image in
                image.resizable().scaledToFill()
            } placeholder: {
                ProgressView()
            }
            .frame(width: 64, height: 64)
            .clipShape(Circle())

            VStack(alignment: .leading) {
                Text(user.name)
                    .font(.headline)
                Text(user.title)
                    .font(.subheadline)
                    .foregroundStyle(.secondary)
            }

            Spacer()

            Button(isFollowing ? "Takipten Çık" : "Takip Et") {
                withAnimation(.spring(response: 0.3)) {
                    isFollowing.toggle()
                }
            }
            .buttonStyle(.bordered)
        }
        .padding()
    }
}

#Preview {
    ProfileCard(user: .sample)
}

Sonuç

Güçlü bir Android/Kotlin ekibin varsa ve iOS'a en düşük maliyetle açılmak istiyorsan Compose Multiplatform mantıklı: iOS hedefi Mayıs 2025'ten beri Stable. Ama iOS'un vitrin olduğu, Liquid Glass gibi yenilikleri (iOS 26+) gün-0 kullanman gereken üründe SwiftUI'ı geçmek zor — resmî doküman bile bu dil için native SwiftUI kabuğu öneriyor. Boyutta resmî ~9 MB'a karşılık bağımsız tek vakada 12 kat fark bildirildi; prototipini gerçek cihazda ölç.

Ücretsiz Danışmanlık Al
SSS

Sıkça Sorulan Sorular

Evet — JetBrains, Mayıs 2025'te CMP 1.8.0 ile iOS hedefini resmî olarak Stable ve production-ready ilan etti; tip-güvenli navigasyon, first-class VoiceOver desteği ve SwiftUI/UIKit interop tamamlandı. Ama 'hazır' her projede doğru seçim demek değil: 2 Ağustos 2026'da yayımlanan bağımsız bir geliştirici vakası, üretime çıkmış bir CMP uygulamasında boyut ve native his konusunda ciddi ödünler bildiriyor (tek geliştiricinin deneyimi). Kendi ölçümünü yapmadan karar verme.

Giriş

Mayıs 2025'e kadar "Compose Multiplatform iOS'ta olgun mu?" sorusu tartışmalıydı. JetBrains'in 1.8.0 sürümüyle iOS hedefini resmen Stable ilan etmesinden sonra soru değişti: artık "olgun mu" değil, "native his ne kadar önemli, ne kadarını paylaşılan UI için feda edebilirsin" sorusu gündemde. Bu sayfa iki stratejiyi karşılaştırıyor: Compose Multiplatform ile Android ve iOS arasında UI kodunun büyük kısmını paylaşmak, ya da SwiftUI ile iOS'a özgü native bir deneyim kurmak. Bu bir "hangi dil daha iyi" tartışması değil, bir mimari karar. Kotlin'in kendisi Temmuz 2026'da 2.4.10'a ulaştı ama bu CMP'nin sürüm numarasıyla karıştırılmamalı; CMP kendi bağımsız takvimini izliyor ve son kararlı sürümü 1.12.1 (22 Eylül 2026; bir önceki 1.12.0, 25 Ağustos 2026). Apple tarafında Liquid Glass görsel dili iOS 26 ile tanıtıldı; Xcode 27 ve iOS 27 ise 14 Eylül 2026'da genel kullanıma çıktı — ve CMP'nin resmî dokümantasyonu bu görsel dile uyum için native SwiftUI kabuğuna dönmeyi öneriyor.

Karşılaştırma Matrisi

Karşılaştırma Matrisi: Compose Multiplatform / SwiftUI
ÖzellikCompose MultiplatformSwiftUI
İlk kararlı sürüm (iOS hedefi)Mayıs 2025 (CMP 1.8.0, Stable)Eylül 2019 (iOS 13, Xcode 11) (Öne çıkan)
Platformlar arası kod paylaşımıUI + iş mantığı paylaşılabilir (Öne çıkan)Yalnızca iş mantığı (ayrı UI katmanı gerekir)
Android desteğiVar (birinci sınıf hedef) (Öne çıkan)Yok
visionOS / watchOS desteğiYok (CMP bu platformları hedeflemiyor)Var (watchOS SwiftUI zorunlu, visionOS tek framework) (Öne çıkan)
Canlı önizleme (Xcode/IDE)Compose Preview — Android hedefi gerekliXcode Previews — doğrudan iOS canvas'ında (Öne çıkan)
Hot reloadStable ama yalnız desktop JVM'de (1.10.0)Yok (build-run döngüsü)
VoiceOver desteğiFirst-class (1.8.0), eşleme katmanı üzerindenSistemin kendisiyle bütünleşik, tam (Öne çıkan)
Uygulama boyutu eklentisi (iOS)Resmî ~9 MB; bağımsız tek vakada çok daha yüksekReferans (native baseline) (Öne çıkan)
Yeni iOS sistem özelliklerine erişim (ör. Liquid Glass, iOS 26+)Gecikmeli / native kabuk gerekebilirGün-0, doğrudan (Öne çıkan)
GitHub yıldızı (framework repo)19.381 (JetBrains/compose-multiplatform)Kapalı kaynak (repo yok)
Lisans / maliyet modeliApache 2.0, ücretsiz (Öne çıkan)Ücretsiz (Xcode ile), App Store için 99 USD/yıl geliştirici üyeliği
Öğrenme eğrisi (mevcut Android ekibi için)Düşük — aynı Kotlin/Compose bilgisi (Öne çıkan)Yüksek — yeni dil (Swift) + yeni framework
Öğrenme eğrisi (mevcut iOS ekibi için)Yüksek — yeni dil (Kotlin) + yeni mental modelDüşük — zaten bildiği ekosistem (Öne çıkan)
Desktop + Web hedefiVar (JVM Desktop Stable, Web/Wasm Beta) (Öne çıkan)Yok (yalnız Apple platformları)
Apple'ın resmî yatırım önceliğiBağımsız (JetBrains 3. parti)Birinci öncelik (Apple'ın kendi frameworkü) (Öne çıkan)

Derinlemesine İnceleme

Compose Multiplatform

Genel Bakış

Compose Multiplatform, JetBrains'in Jetpack Compose'u Android sınırlarının dışına taşıyan UI çatısı — Apache 2.0 lisanslı, GitHub'da 19.381 yıldız (Eylül 2026; repo Eylül 2020'de açıldı). Dönüm noktası Mayıs 2025'te CMP 1.8.0 ile iOS hedefinin resmen Stable ilanıydı: tip-güvenli navigasyon, first-class VoiceOver/AssistiveTouch/Full Keyboard Access ve SwiftUI/UIKit ile çift yönlü interop o sürümde tamamlandı. JetBrains kendi ölçümünde CMP'nin tam-native bir SwiftUI uygulamasına kıyasla iOS'a yalnızca ~9 MB eklediğini ve scroll performansının SwiftUI ile eş olduğunu söylüyor; bağımsız bir geliştirici vakası (Ağustos 2026) ise gerçek uygulamalarda bu farkın çok daha büyük olabildiğini bildiriyor. Kotlin 14 Temmuz 2026'da 2.4.10'a ulaştı, ama bu CMP'nin sürüm numarası DEĞİL — CMP kendi takvimini izliyor: 1.10.0 (Ocak 2026), 1.11.0 (13 Mayıs 2026), 1.12.0 (25 Ağustos 2026), 1.12.1 (22 Eylül 2026).

Ekosistem

Paket yöneticisi
Gradle (Kotlin Multiplatform plugin)
Geliştirme ortamı
Android StudioIntelliJ IDEA (Kotlin Multiplatform eklentisi)
Popüler kütüphaneler
Ktor (ağ)Koin (DI)SQLDelight (yerel DB)Voyager (navigasyon)Coil 3 (görsel yükleme)
GitHub yıldızı
19,381

Üretimde Kullanım

  • Feres

    Feres

    Taksi uygulaması; tüm iş mantığını KMP ile, UI'ının %90'ını Compose Multiplatform ile paylaşıyor.

    1M+ indirme

  • Markaz

    Markaz

    Pakistan'ın e-ticaret platformu; 100'den fazla ekranı tamamen Compose Multiplatform ile kurulu.

    5M+ indirme

  • Physics Wallah

    Physics Wallah

    Eğitim platformu; iOS ve Android arasında hem UI'ı hem iş mantığını birleştirdi.

    17M aktif kullanıcı

  • Respawn

    Respawn

    Alışkanlık koçu uygulaması; Compose Multiplatform ile kodunun %96'sını paylaşıyor.

    %96 paylaşılan kod

  • Wrike

    Wrike

    Üretimdeki uygulamalarında Takvim, Board, Dashboard, Grafik ve Timesheet onayları gibi özellikler tamamen Compose Multiplatform ile yazılı.

SwiftUI

Genel Bakış

SwiftUI, Apple'ın Haziran 2019 WWDC'sinde tanıttığı declarative UI çatısıdır; Xcode 11 ve iOS 13 ile kullanılabilir oldu. 2026 itibarıyla iPhone, iPad, Mac, Apple Watch, Apple TV ve Vision Pro için tek dilde geliştirme imkânı sunan, Apple'ın 'birinci öncelikli' UI teknolojisi konumunda. Avantajı platformun kendisiyle bire bir örtüşmesi: scroll fiziği, klavye davranışı, sistem jestleri ve erişilebilirlik altyapısı doğrudan işletim sisteminden geliyor, araya bir cross-platform katman girmiyor. Temel fark burada: SwiftUI Android'e açılmayı hiç vaat etmiyor, ama karşılığında Apple'ın iOS 26 ile tanıttığı Liquid Glass gibi sistem görsel dillerini gün-0'da, köprüsüz kullanabiliyor (Xcode 27 ve iOS 27, 14 Eylül 2026'da genel kullanıma çıktı). App Store'da yayın için Apple Developer Program'a yıllık 99 USD ödenir; Small Business Program küçük işletmelerde komisyonu %15'e indiriyor.

Ekosistem

Paket yöneticisi
Swift Package Manager (SPM)
Geliştirme ortamı
Xcode 27
Popüler kütüphaneler
CombineSwiftDataKingfisher (görsel yükleme)swift-composable-architecture

Teknik Analiz

Native His: Scroll, Klavye, Geri Jesti

Karar çoğunlukla bu tek soruya iniyor: kullanıcı farkı hissedecek mi? JetBrains'in resmî iddiası net — CMP 1.8.0 ile scroll fiziği native iOS'a yaklaştırıldı, metin seçimi ve sağdan-sola yazı desteği eklendi, navigasyon jestleri "doğal" hissettiriliyor ve yüksek yenileme hızlı ekranlarda scroll performansı SwiftUI ile eş seviyede. Ama bağımsız bir geliştiricinin Ağustos 2026'da yayınladığı vaka anlatımı bunun tam tersini rapor ediyor: tam-CMP-UI ile yazılmış bir uygulamada "sluggish UI" ve "hiç iOS uygulaması gibi hissettirmedi" tespitleri var — aynı geliştirici bir sonraki uygulamasında UI'ı native SwiftUI'de yazıp yalnızca iş mantığını (repo/DB/network) Kotlin'de paylaştığında sonucun beklentisini aştığını yazıyor. Sonuç: JetBrains'in mühendislik çabası gerçek ve son iki yılda ölçülebilir ilerleme var, ama "native his" garantisi uygulamanın karmaşıklığına, ekranın animasyon yoğunluğuna ve ekibin CMP performans ince ayarına ne kadar zaman ayırabildiğine göre değişiyor. SwiftUI'da bu soru zaten sormaya gerek yok — sistemin kendisi bu.

Uygulama Boyutu: Resmî Rakam vs Üretim Gerçeği

Bu karşılaştırmanın en somut maddesi uygulama boyutu — ve burada iki kaynak farklı şeyler söylüyor. JetBrains'in resmî 1.8.0 duyurusu, CMP'nin tam-native bir SwiftUI uygulamasına kıyasla iOS'a yalnızca "~9 MB" eklediğini söylüyor; bu rakam minimal, kontrollü bir senaryoya dayanıyor. Bağımsız bir geliştiricinin 2 Ağustos 2026'da yayımladığı vaka anlatımı ise şunu bildiriyor: tamamı CMP UI ile yazdığı abonelik yöneticisi SubFox 113 MB universal / 131 MB install boyutundayken, yalnızca iş mantığını (repository/DB/network) KMP'de paylaşıp UI'ı native SwiftUI yazdığı yeni uygulaması Hourly Journal 8,43 MB / 9,84 MB. Dikkat et: bu ikisi aynı uygulamanın öncesi ve sonrası DEĞİL — kapsamları birebir aynı olmayan iki ayrı uygulama. Dolayısıyla "12 kat" bir laboratuvar ölçümü değil, yön gösteren tek bir geliştirici vakası; yazarın kendisi de "bu tek bir uygulama ve tek bir geliştiricinin deneyimi" diye yazıyor. Yine de sinyal açık: gerçek üretim uygulamalarında Compose Runtime'ın, Skia render motorunun ve bağımlılık grafiğinin toplam etkisi "9 MB"ın belirgin biçimde üstüne çıkabiliyor. Karar vermeden önce kendi prototipinin App Store build boyutunu kendin ölç.

Erişilebilirlik: VoiceOver'da "First-Class" ile "Tam Parite" Arasındaki Fark

CMP 1.8.0'dan (Mayıs 2025) itibaren VoiceOver, AssistiveTouch ve Full Keyboard Access resmî olarak "first-class" destek statüsünde — JetBrains bunu iOS Stable duyurusunun ilk maddelerinden biri yaptı. Resmî dokümantasyon davranışı da netleştiriyor: 1.8.0 ile erişilebilirlik ağacı lazy (tembel) senkronize ediliyor ve "artık ek yapılandırma gerektirmiyor"; varsayılanda ağaç yalnızca Accessibility Services çalışırken UI ile senkronlanıyor. AccessibilitySyncOptions.Always ise üretim için değil, hata ayıklama ve test için sunulmuş bir seçenek — doküman açıkça "her UI olayından sonra ağacı senkronize etmek hata ayıklama ve testte yararlı olabilir ama uygulamanın performansını düşürebilir" diyor. Pratik sonuç: VoiceOver kullanan gerçek kullanıcıların olduğu bir ürün yapıyorsan Always'i açıp gerçek VoiceOver oturumuyla ve XCUIApplication.performAccessibilityAudit() ile TEST et, sonra üretimde varsayılana dön. Yine de "first-class destek" ile "tam parite" aynı şey değil: CMP'de erişilebilirlik bir eşleme katmanından (Compose semantics → iOS erişilebilirlik nesneleri) geçiyor; SwiftUI'da böyle bir katman yok, çünkü erişilebilirlik API'si sistemin kendisiyle aynı katmanda.

Yeni iOS Bileşenlerine Yetişme Hızı: Liquid Glass Örneği

Apple'ın sistem geneli görsel dili Liquid Glass, iOS 26 ile tanıtıldı; Xcode 27 ve iOS 27 ise 14 Eylül 2026'da genel kullanıma çıktı. SwiftUI'da bu tür yenilikler gün-0'da kullanılabilir — çünkü SwiftUI sistemin kendisiyle aynı ekipte, aynı takvimde gelişiyor. CMP tarafında durum farklı: JetBrains'in kendi resmî dokümantasyonu, Liquid Glass efektlerinin sistem tarafından native TabView, NavigationStack ve toolbar API'leri üzerinden çizildiğini, bu yüzden bir CMP uygulamasında bu dili benimsemek için "native bir SwiftUI kabuğuna ihtiyacın olduğunu" yazıyor ve KotlinConf uygulaması üzerinden tam-Compose navigasyondan native SwiftUI navigasyonuna geçişi adım adım anlatıyor: tab bar ve navigasyon yığını native tarafa geçiyor, Compose her ekranın içeriğini çizmeye devam ediyor. Bu, "tam paylaşımlı UI" vaadinin sistem seviyesindeki yeni görsel dille kendi kendini sınırladığının açık göstergesi — en dıştaki kabuğu native tutup içeriği Compose'da paylaşmak, yeni OS özelliklerinden gün-0 yararlanmanın pratik yolu hâline geliyor. CMP'de yeni bir sistem bileşeni istediğinde ya JetBrains'in onu implemente etmesini beklersin ya da native köprü kurarsın; SwiftUI'da bu adım hiç yok.

Tooling: Xcode Previews vs Compose Preview + Hot Reload

Xcode Previews SwiftUI geliştirme akışının temel parçası — canvas üzerinde saniyeler içinde canlı geri bildirim, çoklu cihaz/tema önizlemesi. CMP tarafında 1.10.0'dan (Ocak 2026) itibaren birleşik @Preview desteği geldi ve gerçek AndroidX @Preview API'siyle çalışıyor — ama bu önizleme yolu Android hedefini şart koşuyor, yani iOS'a özgü bir görsel sorunu doğrudan iOS canvas'ında göremiyorsun, Android görünümünden tahmin ediyorsun. Hot Reload tarafında CMP 1.10.0 ile Compose Hot Reload Stable oldu, ama bu resmî olarak yalnızca desktop JVM hedefinde çalışıyor — iOS geliştirirken hâlâ build-run döngüsüne daha yakınsın. Pratik etki: SwiftUI ile iOS'a özgü UI iterasyonu hâlâ daha hızlı; CMP ile paylaşılan mantığı test etmek hızlı (Android canvas + hot reload sayesinde) ama iOS'a özgü görsel ince ayar için gerçek cihaz/simülatörde çalıştırıp bakman gerekiyor.

Ekip Yapısı: Tek Kotlin Ekibi mi, Ayrı iOS Ekibi mi?

Bu karar teknik olduğu kadar organizasyonel. Zaten güçlü bir Android/Kotlin ekibi olan, iOS'u "ek platform" olarak görmek isteyen bir şirket için CMP maliyeti düşürüyor — Respawn uygulamasının kodunun %96'sını Android ile paylaşması bunun somut kanıtı. Ama iOS'un ürünün ana vitrini olduğu, ayrı ve deneyimli bir iOS ekibinin bulunduğu şirketlerde tablo tersine dönüyor: o ekip zaten SwiftUI/UIKit'te derin uzmanlığa sahip, ve CMP'ye geçmek onlara yeni bir dil (Kotlin) ve yeni bir mental model (expect/actual, Compose Runtime) öğretmek anlamına geliyor — kazanç (Android ile paylaşım) o ekip için doğrudan bir öncelik olmayabilir. Kural olarak: CMP kararını "kaç platform hedefliyoruz" sorusundan çok "hangi ekip elimizde var, o ekip hangi dilde en hızlı" sorusuyla ver. iOS-first, iOS'un ürün kimliğinin merkezinde olduğu bir şirkette CMP'ye geçmek nadiren organizasyonel olarak kazançlı çıkıyor.

Hangi Senaryoda Hangisi

Güçlü Android/Kotlin ekibi var, iOS'a en düşük ek maliyetle açılmak istiyoruz

Öneri: Compose Multiplatform

Mevcut ekip aynı dilde (Kotlin) çalışmaya devam eder, UI'ın büyük kısmı paylaşılır. Respawn gibi vakalar %96 paylaşım oranıyla bunun mümkün olduğunu gösteriyor.

iOS ürünün ana vitrini, HIG uyumu ve marka algısı kritik

Öneri: SwiftUI

Yeni iOS sistem özelliklerine (ör. Liquid Glass) gün-0 erişim, sistemle birebir örtüşen native his ve App Store inceleme sürtünmesizliği yalnızca native ile garanti edilir.

Vision Pro (visionOS) veya Apple Watch (watchOS) uygulaması

Öneri: SwiftUI

CMP bu platformları hedeflemiyor. watchOS ve visionOS'ta SwiftUI zorunlu — burada alternatif yok.

İki platformlu (Android+iOS) yeni bir MVP'yi hızlıca doğrulamak istiyoruz

Öneri: Compose Multiplatform

Tek ekip, tek kod tabanı, tek geliştirme döngüsü ile iki mağazaya aynı anda çıkmak MVP fazında zaman kazandırır — boyut/native-his ödünleri bu fazda ikincil öncelik.

Mevcut, olgun bir SwiftUI/UIKit kod tabanımız var, Android'e de açılmak istiyoruz

Öneri: Kotlin Multiplatform (yalnız iş mantığı) + native SwiftUI

Aynı geliştiricinin native SwiftUI + KMP ile yazdığı Hourly Journal vakasının işaret ettiği gibi — tek geliştirici deneyimi — UI'ı native tutup yalnızca repository/DB/network katmanını paylaşmak, hem boyut hem native-his açısından CMP UI'a göre daha güvenli bir orta yol.

Erişilebilirlik (VoiceOver) kullanıcı tabanının önemli bir parçası

Öneri: SwiftUI (veya CMP + sıkı test disiplini)

SwiftUI'da erişilebilirlik sistemin kendisiyle bütünleşik ve garantili. CMP kullanılacaksa erişilebilirlik ağacı varsayılan (lazy) modda bırakılmalı; AccessibilitySyncOptions.Always yalnız test için açılıp gerçek VoiceOver oturumu ve performAccessibilityAudit() ile doğrulanmalı.

Ekip Kotlin bilmiyor, kısa vadede tek platforma (yalnız iOS) odaklanıyoruz

Öneri: SwiftUI

CMP'nin kod paylaşım avantajı yalnız çok-platformlu senaryoda ortaya çıkar. Tek platform + yeni dil öğrenme maliyeti, kazancı olmayan bir yatırım olur.

Yaygın Tuzaklar

  • CMP'de yüksek yenileme hızını (120Hz ProMotion) etkinleştirmeyi unutmak — Info.plist'e CADisableMinimumFrameDurationOnPhone eklenmezse runtime'da çökme riski

    Compose Multiplatform

    Çözüm

    ComposeUIViewController kullanan her iOS projesinde Info.plist'e CADisableMinimumFrameDurationOnPhone anahtarını ekle; resmî compose-swiftui-integration dokümantasyonunu adım adım takip et.

  • CMP'de JetBrains'in resmî '~9 MB' boyut rakamına güvenip kendi build'ini ölçmemek

    Compose Multiplatform

    Çözüm

    Prototip aşamasında gerçek App Store build boyutunu (universal + install) ölç; rakam beklenenin çok üzerindeyse SwiftUI kabuk + paylaşılan iş mantığı hibrit modelini değerlendir.

  • SwiftUI ile Android'e açılma ihtiyacını göz ardı edip sonradan CMP'ye geçmeyi 'kolay' sanmak

    SwiftUI

    Çözüm

    İki platformu baştan hedefleyip hedeflemeyeceğini erken karar ver; iOS-first büyümüş bir SwiftUI kod tabanını CMP'ye taşımak nadiren kazançlı — bunun yerine yalnızca iş mantığını paylaşan hibrit model daha güvenli.

  • CMP'de VoiceOver'ı hiç test etmemek — ya da tersine, AccessibilitySyncOptions.Always'i üretimde açık bırakmak

    Compose Multiplatform

    Çözüm

    Erişilebilirlik ağacı 1.8.0'dan beri lazy senkronize ediliyor ve resmî dokümana göre ek yapılandırma gerektirmiyor; Always'i yalnızca hata ayıklama/test için aç (doküman performansı düşürebileceğini söylüyor), gerçek VoiceOver oturumu ve XCUIApplication.performAccessibilityAudit() ile doğrula, üretimde varsayılana dön.

Geçiş Kılavuzu

Native SwiftUI (iOS-only) → Compose Multiplatform (Android+iOS paylaşılan UI)

Tahmini süre: Yalnız iş mantığı paylaşımı (UI native kalır): 4-8 hafta. Seçici ekran bazlı CMP UI geçişi (5-10 ekran): 2-4 ay. Kapsamlı UI paylaşımı (20+ ekran, iki platform): 6-12 ay.
  1. 11. Mevcut SwiftUI ekranlarını audit et — hangileri gerçekten platformlar arası paylaşılabilir (form, liste, detay) hangileri iOS'a özgü kalmalı (Liquid Glass, sistem bileşenleri)
  2. 22. İş mantığı katmanını (repository, network, DB) önce Kotlin Multiplatform'a taşı — UI'a hiç dokunmadan bu adım tek başına değer üretir (Hourly Journal modeli)
  3. 33. Yeni, düşük riskli bir ekranı (ör. ayarlar) Compose Multiplatform ile yaz ve ComposeUIViewController üzerinden mevcut UIKit/SwiftUI navigasyonuna göm
  4. 44. Info.plist'e CADisableMinimumFrameDurationOnPhone ekle ve yüksek yenileme hızını doğrula
  5. 55. VoiceOver, Dynamic Type ve klavye davranışını yeni ekranda gerçek cihazda test et — erişilebilirlik ağacını varsayılan (lazy) modda bırak, AccessibilitySyncOptions.Always'i yalnız test için aç
  6. 66. App Store build boyutunu (universal + install) her adımda ölç, JetBrains'in resmî rakamına değil kendi ölçümüne güven
  7. 77. iOS'a özgü yeni sistem özellikleri (Liquid Glass gibi) gerektiren ekranları native SwiftUI kabuğunda bırak — CMP'nin kendi dokümantasyonu da bunu öneriyor
  8. 88. Android hedefini aynı Compose kod tabanından aç, platform farklarını expect/actual ile yönet

Gelecek Öngörüsü

Compose Multiplatform

Compose Multiplatform, kotlinlang.org'a taşınan ürün sayfasıyla Kotlin'in birinci sınıf ürünü hâline geldi ve JetBrains sürüm kadansını koruyor: 1.9.0 (Eylül 2025, Web Beta), 1.10.0 (Ocak 2026, birleşik @Preview + Navigation 3 + Hot Reload Stable), 1.11.0 (13 Mayıs 2026, native text input), 1.11.1 (2 Haziran 2026), 1.12.0 (25 Ağustos 2026) ve 1.12.1 (22 Eylül 2026) — GitHub Releases'ten doğrulanan bu istikrarlı kadans, erişilebilirlik ve native-his iyileştirmelerinin devam edeceğine işaret ediyor. Resmî dokümantasyonun iOS'un görsel dili (Liquid Glass) için native SwiftUI kabuğu önermesi ise JetBrains'in kısa vadede tam-paylaşımlı UI yerine 'seçici paylaşım' stratejisine ağırlık verebileceğini gösteriyor.

SwiftUI

SwiftUI, Apple'ın WWDC takviminde birinci öncelikli konumunu koruyor. Apple'ın sistem geneli görsel dili Liquid Glass iOS 26 ile tanıtıldı ve SwiftUI'da gün-0 kullanılabildi; Xcode 27 ile iOS 27 ise 14 Eylül 2026'da genel kullanıma çıkarak bu dili taşımayı sürdürdü. Apple'ın platform ailesini (iPhone, iPad, Mac, Watch, TV, Vision Pro) tek dilde büyütme stratejisi sürdükçe SwiftUI'ın kapsam ve olgunluk yatırımı da artmaya devam edecek; bu, CMP'nin 'gün-0 erişim' açığını kapatmayı zorlaştıran temel yapısal fark.

Altın Bilgi

En değerli çıkarım şu: JetBrains'in resmî "~9 MB" rakamı ile bağımsız bir geliştiricinin bildirdiği "12 kat" farkı aynı şeyi ölçmüyor. İlki minimal, kontrollü bir senaryo; ikincisi ise aynı geliştiricinin tamamı CMP UI ile yazdığı SubFox (113 MB) ile kapsamı farklı, native SwiftUI + KMP ile yazdığı yeni uygulaması Hourly Journal'ın (8,43 MB) yan yana konması — aynı uygulamanın öncesi/sonrası değil; yazarın kendisi de "bu tek bir uygulama ve tek bir geliştiricinin deneyimi" diyor. Ders: bir framework'ün resmî boyut iddiasını da, viral olmuş tek vakayı da tek başına alma. Cevap bloglarda değil; prototipini gerçek cihazda, gerçek VoiceOver oturumuyla ölçtüğünde çıkıyor.

İlgili Blog Yazıları

Tüm Yazıları Gör

İlgili Projeler

Tüm Projeleri Gör

İlgili İçerik