
- Update outdated Expo packages to latest compatible versions - Remove unmaintained expo-random package - Remove unnecessary @types/react-native package - Configure eas.json with preview and production profiles for iOS - Fix updates URL in app.json with correct project ID - Add /android and /ios to .gitignore to resolve workflow conflict - Create comprehensive iOS TestFlight submission guide - Add production flag in theme constants - Hide development-only Programs tab in production builds - Remove debug UI and console logs from social feed in production - Update CHANGELOG.md with TestFlight preparation changes All checks from expo-doctor now pass (15/15).
3.2 KiB
iOS TestFlight Submission Guide
This guide documents the process for creating and submitting POWR to TestFlight for iOS testing.
Project Configuration Issues
Prebuild/Managed Workflow Conflict
The project currently has a "mixed" state that needs to be addressed:
- Native iOS and Android folders exist (bare workflow)
- Configuration exists in app.json that would normally be used in a managed workflow
When both native folders and app.json configs exist, EAS Build will use the native project settings and ignore certain app.json configurations including:
- orientation
- icon
- scheme
- userInterfaceStyle
- splash
- ios/android configuration
- plugins
- androidStatusBar
TODO: After TestFlight validation, decide on one of these approaches:
- Commit to bare workflow: Keep native folders and move all configuration to them
- Commit to managed workflow: Remove native folders and let Expo handle native code generation
Fixed Issues
The following issues were addressed to prepare for TestFlight:
-
Updated outdated packages:
- expo: ~52.0.41 (was 52.0.35)
- expo-dev-client: ~5.0.15 (was 5.0.12)
- expo-file-system: ~18.0.12 (was 18.0.10)
- expo-router: ~4.0.19 (was 4.0.17)
- expo-sqlite: ~15.1.3 (was 15.1.2)
- jest-expo: ~52.0.6 (was 52.0.4)
-
Removed unmaintained and unnecessary packages:
- expo-random: Removed as it's flagged as unmaintained
- @types/react-native: Removed as types are included with react-native
-
Added proper iOS build configurations in eas.json:
- Added preview build profile for internal testing
- Added production build profile for App Store submission
-
Fixed updates URL in app.json to use the correct project ID
-
Fixed prebuild/managed workflow conflict:
- Added /android and /ios folders to .gitignore as recommended by expo-doctor
- This approach tells Git to ignore native folders while still allowing EAS Build to use them
- Addresses the warning about app.json configuration fields not being synced in non-CNG projects
TestFlight Build Process
To create and submit a build to TestFlight:
-
Update Apple credentials in eas.json:
"submit": { "production": { "ios": { "appleId": "YOUR_APPLE_ID_EMAIL", "ascAppId": "YOUR_APP_STORE_CONNECT_APP_ID", "appleTeamId": "YOUR_APPLE_TEAM_ID" } } }
-
Create a build for internal testing (preview):
eas build --platform ios --profile preview
-
Create a production build for TestFlight:
eas build --platform ios --profile production
-
Submit the build to TestFlight:
eas submit --platform ios --latest
Troubleshooting
- If you encounter issues with the mixed configuration state, consider fully committing to either the bare or managed workflow
- For build errors related to native code, check the iOS logs in the EAS build output
- For App Store Connect submission errors, verify your app metadata and screenshots in App Store Connect