Skip to main content

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 in app.json:
"ios": {
  "supportsTablet": true,
  "bundleIdentifier": "com.levinbaenninger.questhunter",
  "infoPlist": {
    "ITSAppUsesNonExemptEncryption": false
  }
}

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:
1

Build for simulator

Create a development build for iOS simulator:
eas build --profile development-simulator --platform ios
This creates a build specifically for iOS simulators with development client enabled.
2

Install on simulator

After the build completes, download and install:
# Download the build
eas build:download --platform ios --profile development-simulator

# Install on simulator
xcrun simctl install booted path/to/your-app.app
3

Run the app

Start the development server:
bun dev
Or run directly on iOS:
bun run ios
# or
expo run:ios

Preview Build (Internal Testing)

For internal testing on physical devices without App Store:
eas build --profile preview --platform ios
This creates an internal distribution build that can be installed via TestFlight or direct installation.

Production Build (App Store)

1

Configure credentials

Set up your Apple Developer credentials with EAS:
eas credentials
Select iOS and follow the prompts to:
  • Add your Apple ID
  • Configure push notification certificates
  • Set up provisioning profiles
2

Create production build

Build for production with auto-incrementing build number:
eas build --profile production --platform ios
The production profile has autoIncrement: true, which automatically increments the build number for each build.
3

Monitor build progress

Watch the build progress:
# View build logs
eas build:list --platform ios

# Or visit https://expo.dev/accounts/[your-account]/projects/quest-hunter/builds

Submitting to TestFlight

1

Build for production

First, create a production build:
eas build --profile production --platform ios
2

Submit to App Store Connect

Submit the build to TestFlight:
eas submit --platform ios
EAS will prompt you to:
  • Select the build to submit
  • Enter your Apple ID credentials
  • Configure app-specific password if needed
3

Configure TestFlight

After submission, configure TestFlight in App Store Connect:
  1. Go to App Store Connect
  2. Select your app
  3. Navigate to TestFlight tab
  4. Add internal or external testers
  5. Provide test information and privacy policy
4

Wait for processing

Apple’s review process for TestFlight typically takes 24-48 hours. Internal testing can begin immediately.

Releasing to App Store

1

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
2

Submit for review

Once TestFlight build is ready:
  1. Select the build for release
  2. Choose manual or automatic release
  3. Submit for App Store review
3

App Review

Review times vary from 24 hours to several days. Ensure your app complies with App Store Review Guidelines.
Common review issues:
  • Missing privacy policy for location data
  • Incomplete app metadata
  • App crashes or bugs
  • Missing required app features

Updating the App

Version Management

Update the version in app.json:
{
  "expo": {
    "version": "1.0.1"
  }
}
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

1

Update version

Increment version in app.json:
"version": "1.1.0"
2

Build and submit

# Build new version
eas build --profile production --platform ios

# Submit to App Store
eas submit --platform ios
3

Update App Store listing

Update release notes in App Store Connect and submit for review.

Over-the-Air Updates (OTA)

For non-native code changes (JavaScript, assets), use EAS Update:
# Publish an update
eas update --branch production --message "Bug fixes and improvements"
OTA updates work for JavaScript and asset changes only. Native code changes (dependencies, permissions, etc.) require a new build submission.

Troubleshooting

Code Signing Issues

If you encounter code signing errors:
# Reset credentials
eas credentials --platform ios

# Select "Remove all credentials" and reconfigure

Build Failures

Check build logs:
eas build:view [BUILD_ID]
Common issues:
  • 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:
  1. Incomplete Information: Missing privacy policy for location data
  2. Crashes: Test thoroughly before submission
  3. Misleading Metadata: Ensure screenshots match actual app functionality
  4. 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:
./assets/images/icon.png
Requirements:
  • 1024x1024 pixels
  • PNG format
  • No transparency
  • No rounded corners (iOS adds them automatically)

Environment-Specific Builds

To create builds with different environment variables:
# Production environment
eas build --profile production --platform ios

# Development environment
eas build --profile development --platform ios
Environment variables are read from .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

Build docs developers (and LLMs) love