EAS Build and Dual Platform Deployment

When you've had fun playing with Expo Go and finished writing all your code, how do you turn this app into a production-ready version for the App Store (Apple) and Google Play (Android)?

In the past, this was a dark journey that could make beginners give up.

  • To build for iOS, you had to own a Mac and understand the complex Certificates and Provisioning Profiles in Xcode.
  • To build for Android, you needed to install the massive Android Studio and configure Gradle keys.

Now, with EAS (Expo Application Services), everything has changed! EAS is a cloud build service provided by Expo. It sends your code to their cloud-based Mac and Linux servers, automatically handling all certificate issues, and finally delivers the packaged .ipa (iOS) and .aab (Android) files directly to you—or even submits them to the stores for review!

1. Prerequisites: Register Developer Accounts

Before deployment, these are unavoidable "tolls" you must pay.

  • Apple Developer Program: ~$99/year. The application process may require identity verification and takes ~3-7 days.
  • Google Play Developer Console: One-time lifetime fee of $25.

Ensure you’ve registered and have access to the respective developer portals.

2. Install and Configure EAS CLI

Install the EAS CLI tool globally:

npm install -g eas-cli

Then log in to your Expo account (register for free at expo.dev if you don’t have one):

eas login

Initialize EAS configuration in your project directory:

eas build:configure

This generates an eas.json file in your project root. It defines build profiles like development (for testing), preview (for internal team testing), and production (for store submission).

3. Configure app.json (Your App’s ID)

Before building, ensure your project’s app.json contains the app’s public information:

{
  "expo": {
    "name": "Vibe Tutor App",
    "slug": "vibe-tutor",
    "version": "1.0.0",
    "orientation": "portrait", // Lock to portrait
    "icon": "./assets/icon.png", // 1024x1024 high-res icon
    "splash": {
      "image": "./assets/splash.png", // Splash screen image
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "ios": {
      "bundleIdentifier": "com.yourcompany.vibetutor", // Globally unique ID (critical)
      "buildNumber": "1.0.0"
    },
    "android": {
      "package": "com.yourcompany.vibetutor", // Globally unique ID (critical)
      "versionCode": 1,
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive-icon.png",
        "backgroundColor": "#ffffff"
      }
    }
  }
}

4. Start Cloud Build (EAS Build)

The magic moment! No need for Xcode or Android Studio.

Build Android (.aab)

Run:

eas build --platform android --profile production

EAS will ask if you want it to generate a Keystore (signing key). Select Yes (let Expo manage it—this is the safest approach). It will upload your project and provide a URL. You can watch the cloud build progress there. In ~10 minutes, you’ll get a .aab file ready for Google Play!

Build iOS (.ipa)

Run:

eas build --platform ios --profile production

EAS will prompt for your Apple ID and password. Don’t worry—it needs these to connect to Apple’s Developer Center and auto-generate certificates for you. Just press Y (Yes) to let it manage certificates.

[!WARNING] The Pain of iOS Physical Device Testing Apple is strict. Unlike Android, you can’t sideload .ipa files directly to a device.
You must register your iPhone’s UDID (device ID) in the developer portal and build a development or preview version for testing. The only way for public distribution is via the App Store.

5. One-Click Submission (EAS Submit)

If even uploading files via a web interface feels tedious, Expo offers a god-tier command: eas submit.

After building, just run:

# Auto-upload the latest Android build to Google Play
eas submit -p android

# Auto-upload the latest iOS build to App Store Connect (TestFlight)
eas submit -p ios

Once uploaded, log in to Apple/Google’s developer portals to fill in marketing materials, screenshots, and privacy policies.

The Review Gauntlet

After submission:

  • Google Play: ~2-7 days. Relatively lenient.
  • App Store: ~1-3 days. Very strict! If your app crashes, has layout issues, or requests permissions without justification in app.json, it will be rejected. If rejected, don’t despair—carefully address the reviewer’s feedback and resubmit.

🎉 Congratulations on this milestone!
From a web developer unfamiliar with native app development to independently deploying products on both major app stores. This is the superpower that cross-platform tech and Expo have given you. Now, go promote your first app!

App Store Deployment Checklist

iOS App Store

| Step | Description | Tools | |------|-------------|-------| | Apple Developer Account | $99/year, enroll at developer.apple.com | Apple Developer Portal | | App Store Connect | Create app listing, set pricing | App Store Connect | | App Icon | 1024×1024 PNG, no transparency | Asset catalog | | Screenshots | 6.7" and 5.5" display sizes | Simulator screenshots | | Privacy Policy | URL to privacy policy | Required for all apps | | App Review | Apple reviews for compliance | 1-2 days typical |

# Build iOS with EAS Build
eas build --platform ios --profile production

# Submit to App Store
eas submit --platform ios

Google Play Store

| Step | Description | Cost | |------|-------------|------| | Google Play Console | Create developer account | $25 one-time | | App Listing | Title, description, category | Free | | APK/AAB Upload | Upload signed binary | Via Play Console | | Store Listing Assets | Icon, screenshots, feature graphic | Required | | Content Rating | Complete questionnaire | Free | | Pricing | Free or paid | Configurable |

# Build Android with EAS Build
eas build --platform android --profile production

# Submit to Google Play
eas submit --platform android

EAS Build Configuration

{
  "cli": {
    "version": ">= 3.0"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "android": {
        "buildType": "apk"
      },
      "ios": {
        "simulator": true
      }
    },
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {
      "ios": {
        "appleId": "your@appleid.com",
        "ascAppId": "123456789"
      },
      "android": {
        "track": "production",
        "releaseStatus": "completed"
      }
    }
  }
}

App Icons and Splash Screens

Icon Requirements

| Platform | Size | Format | |----------|------|--------| | iOS | 1024×1024 | PNG (no alpha) | | Android | 512×512 (adaptive) | PNG | | Google Play | 512×512 | PNG 32-bit | | Feature Graphic | 1024×500 (Android) | JPG or PNG |

Splash Screen (app.json)

{
  "expo": {
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    }
  }
}

Code Signing and Certificates

iOS Certificates

| Certificate | Purpose | |-------------|---------| | Apple Distribution | Distribute to App Store | | Apple Development | Run on test devices | | Push Notification | Enable push notifications |

# EAS handles certificates automatically
eas credentials --platform ios

# Or manage manually
# Generate CSR → Create cert in Apple Developer → Download

Android Signing

# EAS manages keystore
eas credentials --platform android

# Manual keystore generation
keytool -genkey -v -keystore my-release-key.keystore \
  -alias my-alias -keyalg RSA -keysize 2048 -validity 10000

App Store Optimization (ASO)

| Factor | Impact | Tips | |--------|--------|------| | App Title | High | Include key search keywords | | Description | Medium | First 3 lines most important | | Keywords (iOS) | High | 100-character limit | | Ratings | High | Prompt users after positive experience | | Screenshots | Medium | Show key features with captions | | Downloads | High | Initial launch marketing |

Summary

Deploying to app stores involves building signed binaries, configuring store listings, and meeting platform guidelines. EAS Build and EAS Submit automate most of the process.

Key takeaways:

  • iOS: $99/year developer account, App Store Connect for listing |
  • Android: $25 one-time, Google Play Console |
  • EAS Build: eas build --platform ios/android --profile production |
  • EAS Submit: eas submit --platform ios/android |
  • App icon: 1024×1024 for both platforms |
  • Code signing: EAS manages certificates automatically |
  • ASO: title, keywords, ratings, and screenshots drive discovery |
  • Privacy policy is required for both stores |

You've completed this course! From setup to deployment — you can now build and ship cross-platform mobile apps.

Unlock Full Tutorial

This chapter is paid content. Join the project to unlock over 5000 words of deep analysis, including 10+ god-tier Prompts and real Source Code examples!