Dev Build Guide

Development Build & Testing Guide

Quick Start

1. Build Development Client

Development client allows testing native features (AdMob, RevenueCat) that don't work in Expo Go.

# iOS Development Build
eas build --profile development --platform ios

# Android Development Build
eas build --profile development --platform android

# Both platforms
eas build --profile development --platform all

2. Install on Device

iOS (Simulator)

# Download and install on simulator
eas build:run --platform ios

iOS (Physical Device)

  1. Download the build from EAS dashboard
  2. Install via Xcode or Apple Configurator 2

Android

# Download APK and install
eas build:run --platform android

Build Profiles (eas.json)

Your eas.json should have these profiles:

{
  "cli": {
    "version": ">= 5.0.0"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "simulator": true
      }
    },
    "development-device": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal",
      "android": {
        "buildType": "apk"
      }
    },
    "production": {
      "autoIncrement": true,
      "android": {
        "buildType": "app-bundle"
      }
    }
  },
  "submit": {
    "production": {
      "ios": {
        "appleId": "your@email.com",
        "ascAppId": "YOUR_APP_ID",
        "appleTeamId": "YOUR_TEAM_ID"
      },
      "android": {
        "serviceAccountKeyPath": "./pc-api-key.json",
        "track": "internal"
      }
    }
  }
}

Testing Checklist

Before Building

  • All TypeScript errors fixed
  • No console errors in Metro
  • npx expo-doctor passes
  • All dependencies up to date

Test on Development Build

Run these tests on the development build:

Core Functionality

  • App launches without crash
  • Home screen loads
  • Quiz works end-to-end
  • Practice works end-to-end
  • Progress saves correctly
  • Language switching works

Monetization

  • Paywall displays correctly
  • All 3 pricing tiers show
  • "Restore Purchases" button visible
  • Purchase flow starts (sandbox)
  • Purchase completes successfully
  • Premium features unlock after purchase

Ads (Free Users)

  • Banner ad shows on home screen
  • Interstitial ad shows after quiz
  • Ads hidden for premium users

Edge Cases

  • App works offline (cached data)
  • No crash when IAP unavailable
  • No crash when ads fail to load
  • No crash on slow network

RevenueCat Sandbox Testing

iOS Sandbox

  1. Create Sandbox Tester account:

    • App Store Connect → Users and Access → Sandbox Testers
    • Add new tester with unique email
  2. On device:

    • Settings → App Store → Sandbox Account
    • Sign in with sandbox account
  3. Test purchases:

    • Sandbox purchases don't charge real money
    • Subscriptions renew every few minutes (for testing)

Android Test Purchases

  1. Add license testers:

    • Google Play Console → Setup → License Testing
    • Add tester email addresses
  2. Test purchases:

    • Test users see "TEST PURCHASE" badge
    • No real charges

Production Build

iOS Production

# Build for App Store
eas build --profile production --platform ios

# Submit to App Store Connect
eas submit --platform ios --latest

Android Production

# Build AAB for Google Play
eas build --profile production --platform android

# Submit to Google Play (internal track)
eas submit --platform android --latest

Pre-Submit Final Checks

iOS

  • App icon displays correctly
  • Splash screen works
  • All screenshots uploaded
  • Privacy Policy URL valid
  • Age rating completed
  • Export compliance answered
  • All metadata filled

Android

  • App icon displays correctly
  • Feature graphic uploaded
  • All screenshots uploaded
  • Privacy Policy URL valid
  • Data safety form complete
  • Content rating completed
  • Release notes written

Common Issues & Fixes

Build Fails

# Clear caches and rebuild
rm -rf node_modules
rm -rf ios/Pods
npm install
npx pod-install
eas build --profile development --platform ios --clear-cache

Credentials Issues

# Reset credentials
eas credentials --platform ios
eas credentials --platform android

Metro Bundler Issues

# Clear Metro cache
npx expo start --clear

Useful Commands

# Check EAS CLI version
eas --version

# Check build status
eas build:list

# View build logs
eas build:view [BUILD_ID]

# Cancel build
eas build:cancel [BUILD_ID]

# Open dashboard
eas open

# Doctor check
npx expo-doctor

# Update dependencies
npx expo install --check

Timeline

StepDuration
Development build15-30 min
Testing on device1-2 hours
Production build20-40 min
iOS review24-48 hours
Android review1-3 days

Support