Flutter vs React Native
Google'ın Dart tabanlı Flutter'ı ile Meta'nın JavaScript/TypeScript tabanlı React Native'ini her açıdan karşılaştırıyoruz. Hangi cross-platform framework 2025'te öne çıkıyor?
Node.js LTS ile kurulan, CNG sayesinde geri dönülebilir yönetilen RN framework'ü
Native toolchain üzerinde tam kontrol veren çekirdek React Native kurulumu
2026'da varsayılan cevap Expo + CNG: `expo prebuild` native klasörleri yeniden ürettiği için "eject" tek yönlü bir kapı olmaktan çıktı, config plugin sistemi native yapılandırmanın çoğunu karşılıyor ve EAS Build'in ücretsiz katmanı küçük-orta projeye yetiyor. Bare React Native'i haklı çıkaran nedenler dar ama gerçek: EAS'ın desteklemediği özel toolchain, on-prem CI zorunluluğu ya da çok nadir bir native SDK. Bu üçü yoksa Expo ile başla.
| Kategori | Expo | Bare React Native |
|---|---|---|
| Performans | 8/10 | 8/10 |
| Öğrenme Kolaylığı | 9/10 | 6/10 |
| Ekosistem | 8/10 | 8/10 |
| Topluluk | 8/10 | 8/10 |
| İş Pazarı | 7/10 | 8/10 |
| Gelecek | 8/10 | 7/10 |
// Expo — app.config.ts + yerel config plugin ile native izin ekleme (TypeScript)
// plugins/withCameraUsage.ts — Info.plist'e kamera izni ekleyen config plugin
import { ConfigPlugin, withInfoPlist } from "expo/config-plugins";
const withCameraUsage: ConfigPlugin = (config) =>
withInfoPlist(config, (config) => {
config.modResults.NSCameraUsageDescription =
"Profil fotoğrafı çekmek için kameraya erişim gerekiyor";
return config;
});
export default withCameraUsage;
// app.config.ts — plugin dosya YOLUYLA referanslanır (npm i -D tsx gerekir)
import "tsx/cjs";
import { ExpoConfig, ConfigContext } from "expo/config";
export default ({ config }: ConfigContext): ExpoConfig => ({
...config,
name: "MyApp",
slug: "my-app",
version: "1.0.0",
plugins: [["./plugins/withCameraUsage.ts"], "expo-router", "expo-updates"],
updates: { url: "https://u.expo.dev/your-project-id" },
runtimeVersion: { policy: "appVersion" },
});
// Terminal: native klasörleri üret (CNG) ve uygula
// npx expo prebuild --clean
// EAS Build çalıştır ve OTA update yayınla
// eas build --platform all --profile production
// eas update --branch production --message "Bug fix: login crash"// Bare React Native — paket kurulumu + elle native yapılandırma (TypeScript)
// 1) Paketi kur: autolinking bağlar, pod'ları çek, yeniden derle
// $ npm install react-native-vision-camera react-native-nitro-modules react-native-nitro-image
// $ npx pod-install
// $ npm run ios # Android: npm run android
// 2) İzinleri ELLE ekle — bu adım autolinking'e dahil değildir
// ios/MyApp/Info.plist:
// <key>NSCameraUsageDescription</key>
// <string>Profil fotoğrafı çekmek için kameraya erişim gerekiyor</string>
// android/app/src/main/AndroidManifest.xml:
// <uses-permission android:name="android.permission.CAMERA" />
// 3) JS tarafında kullanım (paylaşılan kod)
import React, { useEffect } from "react";
import { Camera, useCameraPermission } from "react-native-vision-camera";
function ProfileCamera() {
const { hasPermission, requestPermission } = useCameraPermission();
useEffect(() => {
if (!hasPermission) requestPermission();
}, [hasPermission, requestPermission]);
return <Camera style={{ flex: 1 }} isActive={true} device="back" />;
}
export default ProfileCamera;
// 4) Sürüm yükseltme (0.86 -> 0.87): bunun bir CLI komutu YOKTUR
// Upgrade Helper (web): https://react-native-community.github.io/upgrade-helper/
// -> diff'i Podfile.lock, build.gradle, AppDelegate.swift üzerinde elle uygula
// 5) Kendi CI pipeline'ın (GitHub Actions, özet)
// - run: npx pod-install
// - run: xcodebuild -workspace ios/MyApp.xcworkspace -scheme MyApp -configuration Release2026'da varsayılan cevap Expo + CNG: `expo prebuild` native klasörleri yeniden ürettiği için "eject" tek yönlü bir kapı olmaktan çıktı, config plugin sistemi native yapılandırmanın çoğunu karşılıyor ve EAS Build'in ücretsiz katmanı küçük-orta projeye yetiyor. Bare React Native'i haklı çıkaran nedenler dar ama gerçek: EAS'ın desteklemediği özel toolchain, on-prem CI zorunluluğu ya da çok nadir bir native SDK. Bu üçü yoksa Expo ile başla.
Ücretsiz Danışmanlık Al2026'da varsayılan cevap Expo + CNG'dir: config plugin sistemi çoğu native modülü kapsar, EAS Build'in ücretsiz katmanı (15+15 build/ay) küçük-orta projeye yeter ve `expo prebuild` sayesinde native koda inmek artık geri dönüşü olmayan bir karar değil. Bare RN'yi haklı çıkaran gerçek nedenler: EAS'ın desteklemediği özel toolchain, kurumsal on-prem CI zorunluluğu veya config plugin ile kapsanamayan çok nadir bir native SDK.