Flutter vs React Native
Wir vergleichen Googles Dart-basiertes Flutter mit Metas JavaScript-/TypeScript-basiertem React Native aus jeder Perspektive. Welches Cross-Platform-Framework setzt sich 2025 durch?
Mit Node.js LTS eingerichtetes, dank CNG umkehrbares Managed-RN-Framework
Kernkonfiguration von React Native mit voller Kontrolle über die native Toolchain
2026 lautet die Standardantwort Expo + CNG: `expo prebuild` erzeugt die nativen Ordner neu, wodurch "Eject" keine Einbahnstraße mehr ist, das Config-Plugin-System deckt den Großteil der nativen Konfiguration ab, und der kostenlose Tarif von EAS Build reicht für kleine bis mittlere Projekte. Die Gründe, die Bare React Native rechtfertigen, sind eng, aber real: eine von EAS nicht unterstützte spezielle Toolchain, eine On-Prem-CI-Pflicht oder ein sehr seltenes natives SDK. Fehlen diese drei, starte mit Expo.
| Kategorie | Expo | Bare React Native |
|---|---|---|
| Performance | 8/10 | 8/10 |
| Erlernbarkeit | 9/10 | 6/10 |
| Ökosystem | 8/10 | 8/10 |
| Community | 8/10 | 8/10 |
| Arbeitsmarkt | 7/10 | 8/10 |
| Zukunftssicherheit | 8/10 | 7/10 |
// Expo — natives Recht per app.config.ts + lokalem Config-Plugin hinzufügen (TypeScript)
// plugins/withCameraUsage.ts — Config-Plugin, das die Kameraberechtigung in die Info.plist einfügt
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 — das Plugin wird per Dateipfad referenziert (npm i -D tsx erforderlich)
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 Ordner erzeugen (CNG) und anwenden
// npx expo prebuild --clean
// EAS Build ausführen und OTA-Update veröffentlichen
// eas build --platform all --profile production
// eas update --branch production --message "Bug fix: login crash"// Bare React Native — Paketinstallation + manuelle native Konfiguration (TypeScript)
// 1) Paket installieren: Autolinking bindet es ein, Pods werden geladen, neu kompiliert
// $ 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) Berechtigungen MANUELL hinzufügen — dieser Schritt ist nicht Teil des Autolinking
// 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) Verwendung auf JS-Seite (gemeinsamer Code)
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) Versions-Upgrade (0.86 -> 0.87): dafür gibt es KEINEN CLI-Befehl
// Upgrade Helper (Web): https://react-native-community.github.io/upgrade-helper/
// -> den Diff manuell auf Podfile.lock, build.gradle, AppDelegate.swift anwenden
// 5) Eigene CI-Pipeline (GitHub Actions, zusammengefasst)
// - run: npx pod-install
// - run: xcodebuild -workspace ios/MyApp.xcworkspace -scheme MyApp -configuration Release2026 lautet die Standardantwort Expo + CNG: `expo prebuild` erzeugt die nativen Ordner neu, wodurch "Eject" keine Einbahnstraße mehr ist, das Config-Plugin-System deckt den Großteil der nativen Konfiguration ab, und der kostenlose Tarif von EAS Build reicht für kleine bis mittlere Projekte. Die Gründe, die Bare React Native rechtfertigen, sind eng, aber real: eine von EAS nicht unterstützte spezielle Toolchain, eine On-Prem-CI-Pflicht oder ein sehr seltenes natives SDK. Fehlen diese drei, starte mit Expo.
Kostenlose Beratung erhalten2026 lautet die Standardantwort Expo + CNG: Das Config-Plugin-System deckt die meisten nativen Module ab, der kostenlose Tarif von EAS Build (15+15 Builds/Monat) reicht für kleine bis mittlere Projekte, und dank `expo prebuild` ist der Zugriff auf nativen Code keine unumkehrbare Entscheidung mehr. Echte Gründe für Bare RN: eine von EAS nicht unterstützte spezielle Toolchain, eine unternehmensinterne On-Prem-CI-Pflicht oder ein sehr seltenes natives SDK, das kein Config-Plugin abdeckt.