Hi,
I’m experiencing an issue where my React Native (Expo) app crashes immediately in TestFlight after launching, but it works fine in Expo Go and the iOS Simulator. This is my first time building an IOS app, so I'm not sure where I'm going wrong.
Are there known issues with JS bundle loading, native module compatibility, or API entitlements that could be causing this? What tools or logs should I use to track the exact source of failure? Any guidance would be greatly appreciated! Thank you.
Steps Taken:
The app runs fine in Expo Go (npx expo start --no-dev --minify) and in the iOS Simulator (npx expo run:ios --clean). I also did (npx expo-doctor) and it passed all 15 checks. After building with EAS (eas build --platform ios --profile production), the TestFlight build crashes on launch.
I checked Xcode logs (Devices & Simulators > View Device Logs) and found this error:
`Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Termination Reason: SIGNAL 6 Abort trap: 6 Terminating Process: LoungeNavigator [4666]
Triggered by Thread: 6 Thread 6 name: Thread 6 Crashed:
Thread 6 crashed with ARM Thread State (64-bit): x0: 0x0000000000000000 x1: 0x0000000000000000 x2: 0x0000000000000000 x3: 0x0000000000000000
My app.json file:
"expo": {
"name": "appname",
"slug": "app",
"owner": "baint",
"version": "0.5.2",
"orientation": "portrait",
"icon": "./assets/images/IOS-App-Icon.png",
"scheme": "myapp",
"userInterfaceStyle": "automatic",
"newArchEnabled": true,
"ios": {
"supportsTablet": true,
"bundleIdentifier": "bundleIdentifier",
"icon": "./assets/images/IOS-App-Icon.png",
"buildNumber": "7",
"infoPlist": {
"NSLocationAlwaysAndWhenInUseUsageDescription": "This app requires access to your location at all times.",
"NSLocationAlwaysUsageDescription": "This app needs your location even when the app is in the background.",
"NSLocationWhenInUseUsageDescription": "We need your location.",
"ITSAppUsesNonExemptEncryption": false
}
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/images/IOS-App-Icon.png",
"backgroundColor": "#ffffff"
},
"package": "identifier"
},
"web": {
"bundler": "metro",
"output": "static",
"favicon": "./assets/images/favicon.png"
},
"plugins": [
"expo-router",
[
"expo-splash-screen",
{
"image": "./assets/images/IOS-App-Icon.png",
"imageWidth": 200,
"resizeMode": "contain",
"backgroundColor": "#ffffff"
}
],
"expo-asset",
[
"@rnmapbox/maps",
{
"RNMapboxMapsImpl": "mapbox",
"ios": {
"RNMapboxMapsDownloadToken": "token",
"RNMapboxMapsAccessToken": "token",
"NSLocationAlwaysAndWhenInUseUsageDescription": "This app requires access to your location at all times.",
"NSLocationAlwaysUsageDescription": "This app needs your location even when the app is in the background.",
"NSLocationWhenInUseUsageDescription": "We need your location."
}
}
],
[
"expo-build-properties",
{
"ios": {
"useFrameworks": "static",
"useModularHeaders": true
}
}
]
],
"experiments": {
"typedRoutes": true
},
"extra": {
"router": {
"origin": false
},
"eas": {
"projectId": "projectid"
}
}
}
}
My eas.json file:
"cli": {
"version": ">= 14.7.1",
"appVersionSource": "remote"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal"
},
"internal": {
"distribution": "store",
"ios": {
"credentialsSource": "remote"
},
"autoIncrement": true,
"env": {
"EXPO_PUBLIC_NODE_ENV": "production"
}
},
"production": {
"autoIncrement": true,
"distribution": "store",
"env": {
"EXPO_PUBLIC_NODE_ENV": "production"
}
}
},
"submit": {
"production": {
"ios": {
"ascAppId": "ascAppId",
"appleId": "appleId",
"ascApiKeyPath": "ascApiKeyPath"
}
}
}
}