Platformlar arası geliştirme, mobil mühendisliğin en dinamik gelişen alanlarından biridir. Statista (2025)'ya göre, mobil geliştiricilerin %42'si projelerinde Flutter veya React Native kullanıyor. Platform kanalları, köprüler ve yerel modüller platformlar arası mimarinin temelidir.
Önemli noktalar
Flutter, tek bir Dart kod tabanından yerel uygulamalar oluşturmak için Google'ın framework'üdür. Platform koduyla (Kotlin, Swift) etkileşim kurmak için Flutter, Platform Channel kullanır. Bu, Dart kodunun yerel fonksiyonları çağırdığı ve sonucu aldığı bir köprüdür. Flutter ile platformlar arası mobil uygulama geliştirme, 2025–2026'da mobil geliştirmenin en hızlı büyüyen segmentidir.
Method Channel, Flutter <-> Yerel arasındaki ana iletişim kanalıdır. Dart tarafında: MethodChannel('com.example/channel').invokeMethod('getBatteryLevel'). Mesaj StandardMethodCodec (ikili) ile kodlanır. Yerel tarafta bir MethodChannel kaydedilir ve çağrıyı işler. MethodChannel asenkrondur — sonuç Future aracılığıyla döndürülür. Alternatif: EventChannel olay akışları için.
BasicMessageChannel, "yöntem-argüman" yapısı olmadan dize/byte göndermek için daha düşük seviyeli bir kanaldır. Özel protokoller için kullanılır. Tüm Platform Channel API'si, mesajları serileştiren/seri durumdan çıkaran Flutter Engine'dan geçer.
dart:ffi (Foreign Function Interface) — platform kanalları olmadan Dart'tan C fonksiyonlarının doğrudan çağrılması. FFI, Method Channel'dan daha hızlıdır (0 serileştirme yükü). Performans yoğun işlemler için kullanılır: ses işleme, şifreleme, grafik motorları. Skia, Flutter'ın render motorudur (2D grafik). Impeller, Skia'nın yerini alan Flutter'ın yeni render motorudur. Impeller, gölgelendiricileri önceden derleyerek ilk başlatmalarda jank (kare takılması) sorununu ortadan kaldırır. IT Sectr'de 2025'te Impeller'a geçtik — animasyon pürüzsüzlüğündeki fark hemen fark edilir.
React Native, JavaScript/TypeScript ile platformlar arası mobil uygulama geliştirme için Meta'nın framework'üdür. React Native, bileşenleri yerel UI öğelerine dönüştürür. Mimari evrim geçirdi: eski Bridge → JSI ile yeni Fabric.
Bridge, eski React Native mimarisidir. JS iş parçacığı mesajları JSON'a serileştirir ve asenkron kuyruk aracılığıyla yerel iş parçacığına gönderir. Bu gecikmelere neden olur (köprü gidiş-dönüş ~1 ms). Fabric, JS ve yerel UI iş parçacıklarının JSI (JavaScript Interface) aracılığıyla senkron iletişim kurduğu yeni mimaridir. Fabric, köprü olmadan doğrudan yerel görünümleri enjekte eder. Fabric, platformlar arası geliştirmede önemli bir kilometre taşıdır ve render hızını 2 kata kadar artırır.
JSI (JavaScript Interface), JavaScript'in doğrudan yerel fonksiyonları çağırmasına ve belleği paylaşmasına izin veren bir C++ API'sidir. JSI, Bridge'in JSON serileştirmesinin yerini aldı. JSI tabanlı yeni mimari, platformlar arası geliştirmede çok önemli bir başarıdır ve mobil uygulama performansını belirler. Turbo Module, React Native için yerel modüller yazmanın yeni bir yoludur. Eski Native Modules'ün aksine, Turbo Module tembel yüklenir ve JSI kullanır.
Hermes, React Native için optimize edilmiş Meta'dan bir JavaScript motorudur. Hermes, JS kodunu derleme zamanında bayt koduna derleyerek mobil uygulama başlatmayı hızlandırır ve platformlar arası geliştirmede bellek tüketimini azaltır. Codegen, TypeScript türlerine dayalı yerel kod üretecidir. Codegen otomatik olarak yerel modüller ve JSI bağlantıları oluşturarak manuel işi azaltır.
| Parametre | Flutter | React Native | KMP |
|---|---|---|---|
| Dil | Dart | JavaScript/TypeScript | Kotlin |
| Mimari | Skia/Impeller (özel render) | Fabric + JSI (yerel UI) | Yerel SDK (her modül) |
| Yerel köprü | MethodChannel (Dart ↔ Yerel) | JSI (JS ↔ C++ ↔ Yerel) | expect/actual (Kotlin ↔ Yerel) |
| UI | Özel (Skia/Impeller) | Yerel bileşenler (UIKit/Android Views) | Yerel UI (Jetpack Compose, SwiftUI) |
| Render motoru | Skia veya Impeller | Yerel (UIView/View) | Yerel |
Flutter, Skia/Impeller aracılığıyla her şeyi kendisi render eder — bu her iki platformda da birleşik bir UI sağlar. React Native yerel UI bileşenleri kullanır — yerel bir uygulama gibi görünür. KMP UI ile ilgilenmez — yalnızca iş mantığını paylaşır, UI yerel kalır. Seçim önceliğe bağlıdır: birleşik UI (Flutter) veya maksimum yerlilik (React Native/KMP).
Kotlin Multiplatform (KMP), Android ve iOS arasında paylaşılan kod için JetBrains teknolojisidir. Flutter ve React Native'in aksine KMP, platformlar arası geliştirmeye alternatif bir yaklaşımdır: UI'yı değiştirmez, iş mantığını, ağ isteklerini, veri modellerini ve depoları paylaşır. UI yerel kalır: Android için Jetpack Compose, iOS için SwiftUI.
expect — platform uygulaması olan ortak modüldeki (commonMain) bir işlev veya sınıf bildirimi. KMP ile platformlar arası geliştirme expect/actual kullanır: actual her platform (androidMain, iosMain) için somut uygulamadır. Örnek: expect fun getDeviceId(): String — Android'de actual Settings.Secure kullanır, iOS'ta — UIDevice.current.identifierForVendor.
Kotlin/Native — Kotlin'i yerel ikili dosyaya (iOS framework) derleyen bir derleyici. JVM olmadan iOS'ta Kotlin kodu çalıştırmaya izin verir. Kotlin/Native derleme için LLVM kullanır ve Swift'e yakın performans sağlar. Kotlin/JS — web ve React Native projeleri için Kotlin'in JavaScript'e derlenmesi.
Platformlar arası mobil uygulama geliştirmenin derleme araçları — kod ile nihai ikili dosya arasındaki köprüdür. Gradle KTS Android kısmını yönetir, CocoaPods Plugin KMP iOS bağımlılıklarını yönetir, XCFramework yerel kütüphane dağıtımını yönetir.
Gradle KTS — Groovy yerine Kotlin DSL kullanarak Gradle yapılandırması. KTS, Android Studio'da otomatik tamamlama, tür denetimi ve yeniden düzenleme güvenliğini destekler. Örnek: apply plugin: 'com.android.application' yerine plugins { id("com.android.application") }. Tüm yeni projeler için önerilir.
CocoaPods Plugin — paylaşılan modülü CocoaPods pod'u olarak yayınlayan KMP için Gradle eklentisidir. Bir iOS geliştiricisi bunu Podfile aracılığıyla ekler. XCFramework — Apple'ın ikili kütüphane dağıtım biçimidir. XCFramework, birden çok mimari (arm64, x86_64) ve platform (iOS, macOS, watchOS) için ikili dosyalar içerir. KMP'de paylaşılan modül, iOS için XCFramework olarak dışa aktarılır.
Sıkça sorulan sorular
Flutter daha iyi performans (Skia/Impeller), tek bir UI kod tabanı ve platformlar arası geliştirmede yüksek kararlılık sunar. React Native — büyük topluluk, web geliştirmeden kolay geçiş ve JSI aracılığıyla esneklik. IT Sectr, UI odaklı projeler için Flutter'ı, sık yerel kod gerektiren projeler için React Native'i önerir.
Flutter, Dart tarafında MethodChannel aracılığıyla bir mesaj gönderir. Mesaj ikili formata kodlanır ve yerel tarafa (Kotlin/Swift) iletilir, burada işlenir ve sonucu döndürür. Mobil uygulama geliştirmede tüm iletişim asenkrondur.
expect, platform uygulaması olan ortak koddaki bir işlev veya sınıf bildirimidir. actual, her platform (Android/iOS) için somut uygulamadır. Bu, ön işlemci olmadan koşullu derleme için KMP'nin mekanizmasıdır.
Bridge, mesajların JSON'a serileştirildiği ve bir kuyruk aracılığıyla asenkron olarak iletildiği eski mimaridir. Fabric, JSI aracılığıyla senkron yerel fonksiyon çağrılarına sahip yeni mimaridir, gecikmeleri ortadan kaldırır ve mobil uygulama performansını artırır.
Hermes, React Native için optimize edilmiş Meta'dan bir JavaScript motorudur. JS'yi derleme zamanında bayt koduna derleyerek uygulama başlatmayı 2–3 kat hızlandırır ve bellek tüketimini azaltır.
Ö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.