📅 Day 7
💡 tip

Every Way to Build Your Expo App: From Development to Production

Master all build methods for React Native with Expo - from Expo Go for rapid development to EAS Build for production apps, plus native tools and Expo Orbit

ExpoBuild Tools

Welcome to Day 7 of the React Native Advent Calendar!

Today we’re exploring every way to build your React Native app with Expo - from the simplest development workflow with Expo Go to production builds with EAS. Whether you’re just starting out or deploying to production, this guide covers all your options!


The 5 Build Methods Explained

When building with Expo, you have 5 distinct approaches, each suited for different stages of development:

  1. Expo Go - Instant testing without builds
  2. Expo Prebuild - Generate native projects locally
  3. Native Tools - Use Xcode/Android Studio directly
  4. EAS Build - Cloud-based builds for production
  5. Expo Orbit - Simplified build installation

Let’s dive into each method and when to use them.


1. Expo Go: The Fastest Development Experience

What it is: Expo Go is a pre-built native app that runs your JavaScript code instantly - no native build required.

Perfect for:

  • Starting new projects
  • Rapid prototyping
  • Learning React Native
  • Testing UI and logic quickly

Pro Tips for Expo Go

Access the Developer Menu:

  • iOS: Shake device or press Cmd + D in simulator
  • Android: Shake device or press Cmd + M (Mac) / Ctrl + M (Windows)
  • Secret shortcut: Press Cmd + Shift + Z to open the overlay menu

Limitations to know:

  • Can’t use custom native modules outside Expo SDK
  • Limited to packages compatible with Expo Go
  • Not for production apps

When to move on: Once you need custom native code or third-party libraries with native dependencies not in the Expo SDK.


2. Expo Prebuild: Generate Native Projects On-Demand

What it is: Generates ios/ and android/ folders from your app.json config, giving you a full native project while keeping Expo’s workflow.

Perfect for:

  • Adding custom native modules
  • Using libraries that require native configuration
  • Running on physical devices without Expo Go
  • Creating development builds

How to Use Prebuild

terminal
# Generate native folders
npx expo prebuild

# Run on iOS (Mac only!)
npx expo run:ios

# Run on Android
npx expo run:android

Adding the Dev Client

The Expo Dev Client is like a custom version of Expo Go for your app:

terminal
# Install dev client
npx expo install expo-dev-client

# Rebuild your app
npx expo prebuild --clean
npx expo run:ios  # or run:android

Why use it?

  • Keep the Expo Go experience with custom native code
  • Access debugging tools and performance profilers
  • Hot reload for native changes
  • Your own personalized development environment

Important Notes

When to clean rebuild: If you change app.json (app name, bundle ID, permissions, etc.):

terminal
npx expo prebuild --clean

Platform limitations:

  • iOS prebuild requires a Mac (Xcode dependency)
  • Android can be built on any platform

3. Native Tools: Xcode & Android Studio

What it is: Work directly in native IDEs for full control over the build process and configuration.

Perfect for:

  • Debugging native issues
  • Configuring signing certificates
  • Building release variants
  • Advanced native development

Building with Xcode (iOS)

Development build:

terminal
# Open Xcode project
npx expo prebuild
xed ios

# In Xcode: Select target device and hit Run
# Start Metro bundler separately
npx expo start

Release build:

Option 1 - Via Xcode:

  1. Select your scheme
  2. Change build configuration to Release
  3. Build and run

Option 2 - Via command line:

terminal
# Build release version
npx expo run:ios --configuration Release

# Build for specific device
npx expo run:ios --device

Building with Android Studio

Development build:

terminal
# Open Android project
npx expo prebuild
# Open android/ folder in Android Studio

# Run on emulator/device from Android Studio
# Start Metro bundler separately
npx expo start

Release build:

Option 1 - Via Android Studio:

  1. Open Build Variants panel
  2. Change to release
  3. Build and run

Option 2 - Via command line:

terminal
# Build release APK
npx expo run:android --variant release

# Or use Gradle directly
cd android
./gradlew assembleRelease

Finding your APK: After building, find it at: android/app/build/outputs/apk/release/app-release.apk

Important: For production APKs, you need to set up proper signing. See the Android signing guide for keystore setup.


4. EAS Build: Cloud Builds Made Easy

What it is: EAS (Expo Application Services) builds your app in the cloud - no Xcode or Android Studio required!

Perfect for:

  • Production builds
  • Building iOS apps without a Mac
  • Team collaboration
  • Automated CI/CD workflows

Getting Started with EAS

terminal
# Install EAS CLI globally
npm install -g eas-cli

# Login to your Expo account
eas login

# Configure EAS for your project
eas build:configure

This creates an eas.json file with build profiles.

Building for iOS Devices

Step 1: Register your device

terminal
# Start device registration
eas device:create

This shows a QR code. Scan it with your iPhone to register the device automatically.

Step 2: Create development build

terminal
# Build for registered devices
eas build --profile development --platform ios

Step 3: Install

  • Open the Expo dashboard
  • Download the .ipa file
  • Install via Expo Orbit or Apple Configurator

Building for Android

Android is simpler - no device registration needed:

terminal
# Create development APK
eas build --profile development --platform android

# Download APK from dashboard and share it
# Users can install directly on their devices

Local Builds with EAS

Want to test EAS builds locally or need faster iteration?

terminal
# Local iOS build (Mac only!)
eas build --platform ios --local

# Local Android build (any platform)
eas build --platform android --local

Why use local builds?

  • Test your EAS configuration before cloud builds
  • Faster iteration during setup
  • Debug build issues locally
  • Free (no EAS build credits used)

5. Expo Orbit: The Installation Helper

What it is: A macOS/Windows app that simplifies installing builds on simulators and devices.

Perfect for:

  • Quick build installation
  • Managing multiple builds
  • Testing QA builds
  • Non-technical team members

Key features:

  • Drag-and-drop .apk and .ipa files
  • Install directly from EAS dashboard
  • Launch simulators/emulators quickly
  • View build logs and details

Get Orbit: Download from Expo


Choosing the Right Build Method

Here’s a quick decision tree:

Starting a new project? → Use Expo Go

Need custom native modules? → Use Expo Prebuild + Dev Client

Debugging native issues? → Use Native Tools (Xcode/Android Studio)

Building for production or testing on real devices? → Use EAS Build

Need to install builds easily? → Use Expo Orbit


Wrapping Up

Expo gives you flexibility at every stage of development. Start fast with Expo Go, grow into custom native code with Prebuild, and deploy anywhere with EAS Build.

Quick recap:

  1. Expo Go - Zero-setup instant testing
  2. Expo Prebuild - Generate native projects on-demand
  3. Native Tools - Full IDE control with Xcode/Android Studio
  4. EAS Build - Cloud builds for any platform
  5. Expo Orbit - Simplified build installation

Ready to dive deeper?

Questions about Expo builds? Drop them in the YouTube comments!

Tomorrow we’ll explore Day 8’s topic - see you then! 🎄