POWR/docs/deployment/ios_testflight_guide.md
DocNR 89504f48e8 feat(deployment): prepare app for iOS TestFlight submission
- 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).
2025-03-28 21:22:20 -07:00

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:

  1. Commit to bare workflow: Keep native folders and move all configuration to them
  2. 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:

  1. 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)
  2. 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
  3. Added proper iOS build configurations in eas.json:

    • Added preview build profile for internal testing
    • Added production build profile for App Store submission
  4. Fixed updates URL in app.json to use the correct project ID

  5. 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:

  1. 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"
        }
      }
    }
    
  2. Create a build for internal testing (preview):

    eas build --platform ios --profile preview
    
  3. Create a production build for TestFlight:

    eas build --platform ios --profile production
    
  4. 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

References