Overview
This guide covers deploying Quest Hunter to iOS using Expo Application Services (EAS). You’ll learn how to create builds, submit to TestFlight, and release to the App Store.Prerequisites
- Apple Developer Program membership ($99/year)
- EAS CLI installed and configured
- Project environment variables configured
- Apple ID with 2FA enabled
Quest Hunter’s iOS bundle identifier is
com.levinbaenninger.questhunter. You’ll need to register this identifier in your Apple Developer account or change it in app.json.iOS Configuration
App Configuration
Quest Hunter is configured with the following iOS settings inapp.json:
Key Features
- Tablet Support: Enabled for iPad
- Encryption Compliance: Declared as not using encryption (required for App Store submission)
- Location Permissions: “Allow Quest Hunter to use your location”
- New Architecture: Enabled (
newArchEnabled: true) - React Compiler: Enabled for optimized performance
Building for iOS
Development Build (Local Testing)
For local development with Expo Go or physical devices:Build for simulator
Create a development build for iOS simulator:This creates a build specifically for iOS simulators with development client enabled.
Preview Build (Internal Testing)
For internal testing on physical devices without App Store:Production Build (App Store)
Configure credentials
Set up your Apple Developer credentials with EAS:Select iOS and follow the prompts to:
- Add your Apple ID
- Configure push notification certificates
- Set up provisioning profiles
Create production build
Build for production with auto-incrementing build number:
The production profile has
autoIncrement: true, which automatically increments the build number for each build.Submitting to TestFlight
Submit to App Store Connect
Submit the build to TestFlight:EAS will prompt you to:
- Select the build to submit
- Enter your Apple ID credentials
- Configure app-specific password if needed
Configure TestFlight
After submission, configure TestFlight in App Store Connect:
- Go to App Store Connect
- Select your app
- Navigate to TestFlight tab
- Add internal or external testers
- Provide test information and privacy policy
Releasing to App Store
Prepare app metadata
In App Store Connect, configure:
- App name and subtitle
- Screenshots (iPhone and iPad)
- App description and keywords
- Privacy policy URL
- Support URL
- Age rating
- App category
Submit for review
Once TestFlight build is ready:
- Select the build for release
- Choose manual or automatic release
- Submit for App Store review
Updating the App
Version Management
Update the version inapp.json:
The build number is automatically incremented by EAS when using the production profile. You only need to update the version number for new releases.
Release Update
Over-the-Air Updates (OTA)
For non-native code changes (JavaScript, assets), use EAS Update:Troubleshooting
Code Signing Issues
If you encounter code signing errors:Build Failures
Check build logs:- Missing environment variables
- Invalid bundle identifier
- Expired certificates
- Insufficient memory during build
TestFlight Compliance
Quest Hunter uses location services. Ensure you provide:
- Clear explanation of location usage in App Store metadata
- Privacy policy URL
- Proper NSLocationWhenInUseUsageDescription in Info.plist (already configured)
App Store Rejection
Common rejection reasons:- Incomplete Information: Missing privacy policy for location data
- Crashes: Test thoroughly before submission
- Misleading Metadata: Ensure screenshots match actual app functionality
- Minimum Functionality: Ensure all features work without server issues
App Store Assets Requirements
Screenshots Required
- iPhone 6.7” (1290 x 2796 pixels) - Required
- iPhone 6.5” (1242 x 2688 pixels) - Required
- iPad Pro 12.9” (2048 x 2732 pixels) - Required if supporting iPad
App Icon
Quest Hunter’s icon is configured at:- 1024x1024 pixels
- PNG format
- No transparency
- No rounded corners (iOS adds them automatically)
Environment-Specific Builds
To create builds with different environment variables:.env and bundled at build time for variables prefixed with EXPO_PUBLIC_.
Next Steps
Android Deployment
Deploy to Google Play Store
Web Deployment
Deploy web version