Skip to content

Mobil Geliştirme Genel Bakış (Mobile Development Overview)

Mobil uygulama geliştirme için cross-platform framework karşılaştırmaları, öğrenme yol haritası ve terim sözlüğü. Bu kategori React Native, Flutter, uygulama yayınlama, mimari ve araç rehberlerini kapsar.

React Native vs Flutter Karşılaştırma Tablosu (Comparison Table)

Özellik (Feature)React NativeFlutter
Geliştirici (Developer)Meta (Facebook)Google
Programlama Dili (Language)JavaScript / TypeScriptDart
İlk Sürüm (First Release)20152018
UI Yaklaşımı (UI Approach)Native bileşenler üzerine köprü (Bridge to native components)Kendi render motoru, Skia (Own rendering engine, Skia)
Performans (Performance)İyi — New Architecture (JSI/Fabric) ile native'e yakınÇok iyi — AOT derleme, doğrudan native koda dönüşüm
Hot ReloadDestekler (Fast Refresh)Destekler (Stateful Hot Reload)
Öğrenme Eğrisi (Learning Curve)Düşük-Orta — JavaScript/React bilenler hızlı başlarOrta — Dart öğrenilmeli, ancak tutarlı API
Topluluk (Community)Çok geniş, npm ekosistemiHızla büyüyen, pub.dev ekosistemi
İş İlanları (Job Market)Daha fazla (özellikle TR pazarında)Hızla artıyor, startup'larda popüler
Platform Desteği (Platform Support)iOS, Android, Web (kısıtlı), Windows, macOSiOS, Android, Web, Windows, macOS, Linux
Native Modül Erişimi (Native Access)Bridge / Turbo ModulesPlatform Channels / FFI
Durum Yönetimi (State Management)Redux, Zustand, MobX, Jotai, Context APIRiverpod, Bloc, Provider, GetX
Navigasyon (Navigation)React Navigation, Expo RouterNavigator 2.0, GoRouter, AutoRoute
Test Araçları (Testing)Jest, Detox, AppiumWidget test, Integration test, Patrol
Bundle Boyutu (Bundle Size)~7-15 MB (minimum APK)~8-15 MB (minimum APK)
Kurumsal Kullanım (Enterprise)Instagram, Facebook, Shopify, DiscordGoogle Pay, BMW, Alibaba, eBay Motors

Ne Zaman Hangisi? Karar Ağacı (Decision Tree)

Proje gereksinimlerine göre doğru framework seçimi için aşağıdaki yol haritasını kullanın:

JavaScript/React Bilgisi Var --> React Native

  • Mevcut JavaScript/TypeScript bilgisi ile hızlı başlangıç
  • npm ekosistemindeki binlerce pakete erişim
  • Web geliştiriciler için düşük geçiş maliyeti
  • React bilgisi olan ekiplerde verimlilik artışı

Pixel-Perfect UI & Çoklu Platform --> Flutter

  • iOS, Android, Web, Desktop tek codebase ile
  • Özel animasyonlar ve karmaşık UI tasarımları
  • Platform bağımsız tutarlı görünüm
  • Performans kritik uygulamalar (oyun benzeri UI)

Hızlı Prototip & MVP --> React Native (Expo)

  • Expo ile sıfır konfigürasyon başlangıç
  • EAS Build ile bulut tabanlı derleme
  • OTA (Over-the-Air) güncellemeler ile hızlı yayınlama
  • App Store/Play Store onayı beklemeden güncelleme

Startup + Küçük Ekip --> Flutter

  • Tek dil (Dart) ile frontend ve backend (Dart Frog / Shelf)
  • Widget tabanlı tutarlı mimari
  • Resmi paketler ve iyi dokümantasyon
  • Daha az üçüncü parti bağımlılık ihtiyacı

Mevcut Native Uygulama + Kademeli Geçiş --> React Native

  • Brownfield entegrasyonu ile mevcut native projeye ekleme
  • Belirli ekranları React Native ile geliştirme
  • Native modüllerle mevcut kodu yeniden kullanma

Yüksek Performanslı Animasyon & Grafik --> Flutter

  • Skia render motoru ile 60/120 FPS animasyonlar
  • CustomPainter ile özel çizimler
  • Platform farkı olmadan aynı piksel çıktısı

Mevcut Web Bilgisi + Hızlı Mobil --> React Native (Expo)

  • Web geliştirici ekibi olan şirketler için düşük eğitim maliyeti
  • React bilgisi doğrudan taşınır — component, hooks, state aynı mantık
  • Expo ile managed workflow: native build gerektirmeden geliştirme

Tek Codebase ile Tüm Platformlar --> Flutter

  • iOS, Android, Web, Windows, macOS, Linux — tek proje
  • Embedded cihazlar için de Flutter desteği (Flutter Embedded)
  • Google'ın uzun vadeli yatırımı (Fuchsia OS)

Karar Özeti Tablosu (Decision Summary)

Senaryo (Scenario)Öneri (Recommendation)
JavaScript/React bilen ekipReact Native
Pixel-perfect özel UI gerekliFlutter
Hızlı MVP / PrototipReact Native (Expo)
6+ platform desteği gerekliFlutter
Mevcut native uygulamaya eklemeReact Native
Yüksek performans + animasyonFlutter
TR iş piyasasında avantajReact Native (daha fazla ilan)
Startup + küçük ekipFlutter
E-ticaret / Sosyal medya klonuHer ikisi de uygun

Öğrenme Sırası Önerisi (Learning Order)

React Native Yolu (React Native Path)

1. JavaScript Temelleri (ES6+)

2. React Temelleri (Component, State, Props, Hooks)

3. TypeScript

4. React Native CLI + Expo

5. Navigasyon (React Navigation / Expo Router)

6. State Management (Zustand / Redux Toolkit)

7. API Entegrasyonu (Axios, React Query)

8. Native Modüller & Turbo Modules

9. Test (Jest, Detox)

10. Yayınlama (App Store, Play Store, EAS)

React Native Yolu İçin Ön Koşul (Prerequisite for RN Path)

React Native'e başlamadan önce JavaScript ES6+ ve React temelleri (component, state, props, hooks) sağlam olmalıdır. Bu bilgiler yoksa önce JavaScript/TypeScript Rehberi ve React Rehberi ile başlayın.

Flutter Yolu (Flutter Path)

1. Dart Temelleri (Değişkenler, Fonksiyonlar, OOP, Async)

2. Flutter Widget Ağacı (Stateless, Stateful, Layout)

3. Navigasyon (GoRouter / Navigator 2.0)

4. State Management (Riverpod / Bloc)

5. API Entegrasyonu (Dio, Retrofit)

6. Yerel Veritabanı (Hive, Isar, Drift)

7. Platform Channels & Native Entegrasyon

8. Test (Unit, Widget, Integration)

9. Animasyonlar & Özel UI

10. Yayınlama (App Store, Play Store, Web Deploy)

Flutter Yolu İçin Ön Koşul (Prerequisite for Flutter Path)

Flutter'a başlamadan önce OOP (Nesne Yönelimli Programlama) kavramlarına hakim olmak gerekir. Dart, Java/C# benzeri bir söz dizimine sahiptir — bu dillerden birini biliyorsanız hızlı adapte olursunuz.

Tahmini Öğrenme Süreleri (Estimated Learning Time)

Aşama (Phase)React NativeFlutter
Temel kavramlar (Basics)2-3 hafta3-4 hafta (Dart dahil)
İlk uygulama (First app)1-2 hafta1-2 hafta
Orta seviye (Intermediate)2-3 ay2-3 ay
Production-ready4-6 ay4-6 ay
İleri seviye (Advanced)8-12 ay8-12 ay

Not: Süreler tam zamanlı öğrenme baz alınarak hesaplanmıştır. Yarı zamanlı öğrenmede 1.5-2x ile çarpın.


Geliştirme Ortamı Gereksinimleri (Development Environment)

React Native İçin (For React Native)

Araç (Tool)Gereklilik (Requirement)Açıklama (Description)
Node.jsZorunluv18+ önerilir (LTS)
npm / yarn / pnpmZorunluPaket yöneticisi
WatchmanÖnerilen (macOS)Dosya değişiklik izleme
XcodeiOS geliştirme (macOS)iOS simülatör ve build
Android StudioAndroid geliştirmeAndroid emülatör ve SDK
Expo CLIOpsiyonelManaged workflow için
VS CodeÖnerilenReact Native Tools eklentisi

Flutter İçin (For Flutter)

Araç (Tool)Gereklilik (Requirement)Açıklama (Description)
Flutter SDKZorunluflutter doctor ile kontrol
Dart SDKFlutter ile gelirAyrı kurulum gerekmez
XcodeiOS geliştirme (macOS)iOS simülatör ve build
Android StudioAndroid geliştirmeAndroid emülatör, SDK, Flutter eklentisi
VS CodeÖnerilenDart + Flutter eklentileri
CocoaPodsiOS bağımlılıklarıgem install cocoapods
ChromeWeb geliştirmeFlutter web debug

Rehber Haritası (Guide Map)

Bu kategorideki tüm rehberlere aşağıdan ulaşabilirsiniz:

Rehber (Guide)Açıklama (Description)Bağlantı (Link)
React Native RehberiKurulum, bileşenler, navigasyon, native modüller, ExpoReact Native Rehberi
Flutter RehberiDart, widget ağacı, state management, platform channelsFlutter Rehberi
Uygulama Yayınlama RehberiApp Store, Play Store, sertifikalar, CI/CD, OTAUygulama Yayınlama
Mobil Mimari RehberiMVVM, Clean Architecture, offline-first, güvenlikMobil Mimari
Mobil Araçlar RehberiIDE, emülatör, debug, profiling, analiz araçlarıMobil Araçlar

Terim Sözlüğü (Glossary)

Terim (Term)Açıklama (Description)
BridgeReact Native'de JavaScript ile native kod arasındaki iletişim köprüsü. New Architecture ile JSI tarafından değiştiriliyor (Communication bridge between JS and native code in RN)
WidgetFlutter'da her şey bir widget'tır — UI bileşenlerinin temel yapı taşı (Fundamental building block of Flutter UI)
Hot ReloadUygulamayı yeniden başlatmadan kod değişikliklerini anında yansıtma — state korunur (Instantly reflect code changes without restart, state preserved)
Hot RestartUygulamayı yeniden başlatarak kod değişikliklerini yansıtma — state sıfırlanır (Restart app to reflect changes, state is reset)
AOT (Ahead-of-Time)Derleme zamanında native koda çevrilme — production build'lerde kullanılır, yüksek performans (Compiled to native code at build time)
JIT (Just-in-Time)Çalışma zamanında derleme — geliştirme sırasında Hot Reload'u mümkün kılar (Compiled at runtime, enables Hot Reload during development)
APK (Android Package Kit)Android uygulamalarının dağıtım formatı — tek dosyada tüm mimariler (Android app distribution format)
AAB (Android App Bundle)Google Play'in optimize edilmiş dağıtım formatı — cihaza özel APK üretir (Optimized Android distribution format, generates device-specific APKs)
IPA (iOS App Store Package)iOS uygulamalarının dağıtım formatı (iOS app distribution format)
Provisioning ProfileiOS'ta uygulamanın hangi cihazlarda çalışabileceğini ve hangi servisleri kullanabileceğini tanımlayan sertifika dosyası (iOS certificate that defines app capabilities and allowed devices)
KeystoreAndroid uygulamalarını imzalamak için kullanılan şifrelenmiş anahtar deposu (Encrypted key storage for signing Android apps)
Deep LinkUygulamanın belirli bir ekranına doğrudan yönlendirme yapan URL (URL that navigates directly to a specific screen in the app)
Universal LinkApple'ın deep link implementasyonu — web URL'si ile uygulama ekranını eşleştirir (Apple's deep link implementation, maps web URL to app screen)
OTA (Over-the-Air)App Store/Play Store güncellemesi olmadan uygulama kodunu güncelleme (Update app code without store submission)
Headless JSReact Native'de arka planda JavaScript görevi çalıştırma — UI olmadan (Running JS tasks in background without UI in React Native)
Native ModuleJavaScript'ten erişilebilen platforma özgü native kod parçası (Platform-specific native code accessible from JavaScript)
ExpoReact Native için yönetilen geliştirme platformu — kolay kurulum, EAS Build, OTA desteği (Managed development platform for React Native)
DartGoogle tarafından geliştirilen, Flutter'ın programlama dili — AOT ve JIT derleme destekler (Google's programming language for Flutter)
JSXJavaScript içinde HTML benzeri sözdizimi — React ve React Native'de UI tanımlama (HTML-like syntax in JavaScript for defining UI)
Metro BundlerReact Native'in varsayılan JavaScript paketleyicisi — modül çözümleme ve dönüştürme (Default JS bundler for React Native)
GradleAndroid projelerinde kullanılan derleme ve bağımlılık yönetim aracı (Build and dependency management tool for Android)
CocoaPodsiOS projelerinde kullanılan bağımlılık yöneticisi (Dependency manager for iOS projects)
PodCocoaPods ile yönetilen tek bir iOS kütüphanesi/bağımlılığı (Single iOS library/dependency managed by CocoaPods)
Turbo ModuleReact Native New Architecture'da Bridge yerine kullanılan hızlı native modül sistemi (Fast native module system replacing Bridge in RN New Architecture)
JSI (JavaScript Interface)React Native'de JS ve native arasında doğrudan iletişim — Bridge'i atlayarak yüksek performans (Direct JS-native communication bypassing Bridge)
FabricReact Native'in yeni UI render sistemi — senkron native view erişimi (RN's new UI rendering system with synchronous native view access)
Platform ChannelFlutter'da Dart ile native (Swift/Kotlin) kod arasında iletişim kanalı (Communication channel between Dart and native code in Flutter)
RiverpodFlutter için derleme zamanı güvenli, test edilebilir state management çözümü (Compile-safe, testable state management for Flutter)
EAS (Expo Application Services)Expo'nun bulut tabanlı build, submit ve update servisleri (Expo's cloud-based build, submit and update services)
SkiaFlutter'ın kullandığı 2D grafik motoru — GPU hızlandırmalı render (2D graphics engine used by Flutter for GPU-accelerated rendering)
Tree ShakingKullanılmayan kodun son bundle'dan otomatik kaldırılması (Automatic removal of unused code from final bundle)

Sık Yapılan Hatalar (Common Mistakes)

Hata (Mistake)Açıklama (Description)Çözüm (Solution)
Her iki framework'ü aynı anda öğrenmeye çalışmakOdak dağılır, hiçbirinde derinleşilemezBirini seçip 3-6 ay odaklanın, sonra diğerine geçin
Native geliştirmeyi tamamen atlamakPlatform özgü sorunlarda çaresiz kalmakTemel iOS/Android bilgisi edinin (build, signing, permissions)
Aşırı paket bağımlılığıBundle şişer, güncelleme zorluklarıİhtiyaç olmadan paket eklemeyin, native çözümleri değerlendirin
State management'ı erken seçmekProje ihtiyacı anlaşılmadan karmaşık çözümÖnce Context/setState ile başlayın, ihtiyaç arttıkça geçiş yapın
Test yazmamakRegresyon hataları, güvensiz refactoringEn azından kritik iş mantığı için unit test yazın
Platform farklarını göz ardı etmekiOS ve Android'de farklı davranış, UX tutarsızlığıHer iki platformda düzenli test edin

Native vs Cross-Platform (Doğal Dil vs Çapraz Platform)

Mobil geliştirmede iki temel yaklaşım vardır: platformun kendi dilini kullanmak (native) veya tek kod tabanıyla her iki platformu hedeflemek (cross-platform).

Platform Dilleri (Native Languages)

ÖzellikKotlin (Android)Swift (iOS)
GeliştiriciJetBrains / GoogleApple
IDEAndroid StudioXcode
UI FrameworkJetpack ComposeSwiftUI
Eski UIXML LayoutsUIKit (Storyboard)
Dil tipiStatik, JVM tabanlıStatik, derlenmiş
Null safety? operatörü✅ Optionals
Coroutines/AsyncKotlin CoroutinesSwift Concurrency (async/await)
Öğrenme eğrisiOrta (Java biliyorsan kolay)Orta (Apple ekosistemi gerekli)
Paket yöneticisiGradle (Maven Central)SPM (Swift Package Manager), CocoaPods
Minimum gereksinimWindows/Linux/MacSadece macOS + Xcode

Native vs Cross-Platform Karşılaştırma

KriterNative (Kotlin/Swift)React NativeFlutter
PerformansEn yüksek (%100 native)İyi (%90-95, JSI/Fabric ile)Çok iyi (%95-98, Skia ile)
UI/UX kalitesiPlatform native, mükemmelNative bileşenler kullanırKendi render engine, pixel-perfect
Platform API erişimiDirekt, sınırsızBridge/JSI ile (bazen native modül gerekir)MethodChannel ile (bazen plugin gerekir)
Kod paylaşımı❌ Ayrı codebase (2x iş)✅ %85-95 paylaşım✅ %90-98 paylaşım
Ekip gereksinimiAndroid + iOS ayrı ekipTek JavaScript/React ekibiTek Dart/Flutter ekibi
Geliştirme hızıYavaş (2 platform = 2x)Hızlı (Hot Reload + tek kod)Hızlı (Hot Reload + tek kod)
Uygulama boyutuEn küçük (~5-15 MB)Orta (~15-30 MB)Orta (~15-25 MB)
Hot ReloadSınırlı (Compose Preview)✅ Hızlı✅ Çok hızlı
ToplulukBüyük (resmi platform)Çok büyük (JS ekosistemi)Büyüyen (Google destekli)
İş ilanları (TR)OrtaYüksekBüyüyen
Bakım maliyetiYüksek (2 codebase)Düşük (tek codebase)Düşük (tek codebase)
Mağaza onayıSorunsuzSorunsuzSorunsuz

Ne Zaman Native Tercih Edilir? (When to Choose Native?)

Native seç:

  • ✅ Performans kritik: oyunlar, AR/VR, video işleme, yoğun animasyon
  • ✅ Platform-specific özellikler: WidgetKit (iOS), App Widget (Android), Wear OS, CarPlay
  • ✅ Donanım erişimi yoğun: Bluetooth LE, NFC, sensörler, kamera pipeline
  • ✅ Büyük şirket, ayrı iOS/Android ekibi var
  • ✅ Uzun vadeli, tek platform odaklı proje

Cross-platform seç:

  • ✅ Hızlı MVP, startup, küçük-orta ekip
  • ✅ Her iki platformda aynı UI/UX isteniyor
  • ✅ Web geliştiriciler mobil geçiyor (React → React Native)
  • ✅ Bütçe sınırlı — tek ekip, tek codebase
  • ✅ İçerik ağırlıklı uygulama (e-ticaret, sosyal medya, haber, CRM)

Kotlin vs Java (Android)

KriterKotlinJava
Google desteğiResmi birinci dil (2019+)Eski varsayılan, hâlâ desteklenir
Null safety✅ Dil seviyesinde❌ NullPointerException riski
SyntaxKısa, modern, okunabilirVerbose, boilerplate fazla
Coroutines✅ Built-in asyncThread, AsyncTask (eski)
Data classdata class User(val name: String)Getter/Setter/toString/equals/hashCode elle yaz
Extension functions✅ Mevcut sınıflara fonksiyon ekle❌ Yok
Interoperability%100 Java ile uyumlu
Yeni proje✅ Kotlin kullan❌ Artık önerilmiyor

Özet: Yeni Android projelerinde Kotlin kullan. Java sadece eski (legacy) projelerde karşına çıkar.

Swift vs Objective-C (iOS)

KriterSwiftObjective-C
Apple desteğiResmi birinci dil (2014+)Eski varsayılan, bakım modunda
Null safety✅ Optionals❌ Nil mesaj gönderme (sessiz hata)
SyntaxModern, temiz, okunabilirC tabanlı, [object message] syntax
PerformansÇok yüksek (LLVM derleyici)Yüksek
SwiftUI✅ Deklaratif UI❌ Sadece UIKit
Memory managementARC (otomatik)ARC (otomatik, ama manual de mümkün)
Protocol-oriented✅ Güçlü protocol/extension sistemiSınırlı
Yeni proje✅ Swift kullan❌ Artık önerilmiyor

Özet: Yeni iOS projelerinde Swift + SwiftUI kullan. Objective-C sadece eski kütüphanelerde karşına çıkar.

Proje Senaryosuna Göre Tavsiyeler (Recommendations by Project Type)

SenaryoTavsiyeNeden
MVP / Startup (hızlı çıkış)React Native (Expo)En hızlı geliştirme, JS bilen ekip kolay bulunur, Expo ile build/deploy kolay
E-ticaret uygulamasıReact Native veya FlutterÇapraz platform, hızlı iteration, UI yoğun ama performans kritik değil
Fintech / BankacılıkNative (Kotlin + Swift)Güvenlik kritik, platform API'lerine tam erişim, regülasyon uyumu
Sosyal medya uygulamasıReact NativeHızlı geliştirme, real-time özellikler (Firebase/Socket.io), geniş ekosistem
Oyun (2D basit)FlutterSkia render engine, animasyon gücü, tek codebase
Oyun (3D / performans)Native veya UnityGPU erişimi, performans kritik, cross-platform engine
İçerik uygulaması (haber, blog)React Native (Expo)Basit UI, hızlı geliştirme, OTA güncelleme (CodePush/EAS)
IoT / Bluetooth cihaz kontrolüNative (Kotlin + Swift)Donanım erişimi kritik, platform-specific API'ler
Kurumsal / EnterpriseFlutter veya NativePixel-perfect UI, uzun vadeli bakım, performans garantisi
Freelance / Ajans işiReact NativeTek codebase = daha ucuz, JS ekosistemi geniş, hızlı teslim
Mevcut web uygulamasına mobilReact NativeReact bilgisi transfer edilir, kod paylaşımı (web + mobil)
Çok platformlu (iOS+Android+Web+Desktop)FlutterTek codebase ile 4 platform, en geniş platform desteği
AR / Kamera yoğunNative (ARCore + ARKit)Platform SDK'larına direkt erişim şart
Widget / Watch / CarPlayNativePlatform-specific özellikler, cross-platform desteklemiyor
Prototip / HackathonReact Native (Expo)1 günde çalışan uygulama, cloud build, anında test

Bütçe ve Ekip Bazlı Tavsiyeler (Budget & Team Based)

DurumTavsiyeAçıklama
Tek geliştirici, sınırlı bütçeReact Native (Expo) veya FlutterTek codebase, ücretsiz araçlar, community desteği
Küçük ekip (2-4 kişi)React Native veya FlutterPaylaşımlı kod, hızlı iteration
Orta ekip (5-10 kişi)Flutter veya NativeFlutter: tek ekip, Native: ayrı iOS/Android ekipleri
Büyük ekip (10+ kişi)Native (Kotlin + Swift)Ayrı ekipler, platform-specific optimizasyon, uzun vadeli
Web ekibi mobilize oluyorReact NativeReact/JS bilgisi direkt transfer edilir
Sıfırdan öğrenecekFlutterDart kolay, dokümantasyon mükemmel, widget sistemi tutarlı
macOS'un yok (sadece Windows/Linux)React Native veya Flutter (Android only)iOS build için macOS veya EAS Build (cloud) gerekir

Karar Özeti (Decision Summary)

Mobil uygulama yapacağım:

├── Tek platform mu?
│   ├── Sadece Android → Kotlin + Jetpack Compose
│   └── Sadece iOS → Swift + SwiftUI

├── Her iki platform mu?
│   ├── JS/React biliyorum → React Native
│   ├── Yeni öğrenmeye açığım, UI önemli → Flutter
│   └── Performans çok kritik → Native (her ikisi ayrı)

└── Web + Mobil + Desktop mu?
    ├── React Native + Expo (Web desteği var)
    └── Flutter (iOS + Android + Web + Desktop)

Developer Guides & Technical References