React Native mit Expo und Claude Code: Mobile Apps 2026
Expo macht React Native produktiv — Expo Router, EAS Build, OTA-Updates, natürliche APIs out-of-the-box. Claude Code kennt alle Expo-Patterns: von der App-Struktur bis zu nativen Modulen, Push-Notifications und Production-Deployments.
Expo Setup und Projektstruktur
SetupNeues Expo-Projekt erstellen
# Prompt: "Erstelle Expo TypeScript App mit Expo Router und NativeWind"
npx create-expo-app@latest MyApp --template tabs
cd MyApp && npx expo install nativewind tailwindcss
// app.json — Expo-Konfiguration
{
"expo": {
"name": "MyApp",
"slug": "my-app",
"version": "1.0.0",
"platforms": ["ios", "android"],
"icon": "./assets/icon.png",
"splash": { "image": "./assets/splash.png" },
"plugins": [
"expo-router",
"expo-camera",
["expo-notifications", { "color": "#6366f1" }]
]
}
}
// Projektstruktur mit Expo Router
app/
_layout.tsx // Root Layout (Stack/Tabs)
(tabs)/
_layout.tsx // Tab-Navigation
index.tsx // Home Tab (/)
profile.tsx // Profil Tab (/profile)
[id].tsx // Dynamische Route
+not-found.tsx // 404
Expo Router: File-based Navigation
RouterStack, Tabs und Modal-Navigation
# Prompt: "Tab-Navigation mit Stack-Screens und Modal für Einstellungen"
// app/(tabs)/_layout.tsx
import { Tabs } from 'expo-router'
import { Ionicons } from '@expo/vector-icons'
export default function TabLayout() {
return (
<Tabs screenOptions={{ tabBarActiveTintColor: '#6366f1' }}>
<Tabs.Screen
name="index"
options={{
title: 'Home',
tabBarIcon: ({ color }) => <Ionicons name="home" size={24} color={color} />
}}
/>
<Tabs.Screen
name="profile"
options={{ title: 'Profil', tabBarIcon: ({ color }) => <Ionicons name="person" size={24} color={color} /> }}
/>
</Tabs>
)
}
// Navigation zwischen Screens
import { useRouter, useLocalSearchParams } from 'expo-router'
const router = useRouter()
router.push('/profile')
router.push({ pathname: '/user/[id]', params: { id: '123' } })
router.replace('/login') // Kein Zurück
router.back()
// Parameter empfangen
const { id } = useLocalSearchParams()
Expo Router = Next.js für Mobile: Gleiche file-based Routing-Konventionen, gleiche TypeScript-Integration. Claude Code überträgt Next.js-Wissen direkt auf Expo Router.
Native APIs: Kamera, Location, Notifications
NativeGerätezugriff mit Expo SDK
# Prompt: "Foto aufnehmen mit Expo Camera, Location abfragen, Push-Notification senden"
// Kamera — Foto aufnehmen
import { CameraView, useCameraPermissions } from 'expo-camera'
export function CameraScreen() {
const [permission, requestPermission] = useCameraPermissions()
const cameraRef = useRef<CameraView>(null)
if (!permission?.granted) return <Button onPress={requestPermission} title="Kamera erlauben" />
const takePhoto = async () => {
const photo = await cameraRef.current?.takePictureAsync({ quality: 0.8 })
if (photo) uploadPhoto(photo.uri)
}
return <CameraView ref={cameraRef} style={{ flex: 1 }}>
<TouchableOpacity onPress={takePhoto}><Text>📸</Text></TouchableOpacity>
</CameraView>
}
// Push-Notifications
import * as Notifications from 'expo-notifications'
async function registerForPushNotifications() {
const { status } = await Notifications.requestPermissionsAsync()
if (status !== 'granted') return
const token = await Notifications.getExpoPushTokenAsync({
projectId: process.env.EXPO_PUBLIC_PROJECT_ID
})
return token.data // ExponentPushToken[xxx] — zum Server senden!
}
// SecureStore für sensible Daten
import * as SecureStore from 'expo-secure-store'
await SecureStore.setItemAsync('auth-token', token) // Verschlüsselt im Keychain
const token = await SecureStore.getItemAsync('auth-token')
// Niemals AsyncStorage für Secrets!
EAS Build und OTA-Updates
DeploymentEAS Build und Over-the-Air Updates
# Prompt: "EAS Build Setup für iOS + Android, OTA-Updates konfigurieren"
npm install -g eas-cli
eas login && eas build:configure
// eas.json — Build-Profile
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal",
"android": { "buildType": "apk" }
},
"production": {
"autoIncrement": true
}
}
}
# Build starten
eas build --platform android --profile production
eas build --platform ios --profile production
# OTA-Update: JS-Bundle ohne App-Store-Review pushen
eas update --branch production --message "Fix Login-Bug"
# → Users sehen Update beim nächsten App-Start
# Gilt NUR für JS-Code — native Module = neuer Build nötig
# App Store Submit
eas submit --platform ios // TestFlight → App Store
eas submit --platform android // Google Play Internal → Production
OTA-Update Grenzen: EAS Update kann nur JavaScript/TypeScript und Assets aktualisieren. Neue native Bibliotheken, Permissions oder App-Icons erfordern immer einen neuen Build + App-Store-Review. Claude Code erklärt diesen Unterschied automatisch.
Mobile-Modul im Kurs
Im Claude Code Mastery Kurs: vollständiges React Native / Expo-Modul mit Expo Router, nativen APIs, EAS Build, OTA-Updates und App-Store-Deployment — für professionelle iOS- und Android-Apps.
14 Tage kostenlos testen →