> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revyl.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Expo Builds

> Build Expo apps using EAS Build

Create simulator builds for your Expo React Native app.

## Prerequisites

```bash theme={null}
# Install required tools
npm install -g @expo/cli eas-cli
```

## Setup

Initialize EAS Build in your project:

```bash theme={null}
cd /path/to/your-expo-project
eas build:configure
```

This creates `eas.json` in your project root.

## iOS Simulator Build

### 1. Configure Profile

Add iOS simulator profile to `eas.json`:

```json theme={null}
{
  "build": {
    // For dev-loop add this line to enable the developmentClient
    // "developmentClient": true,
    "ios-simulator": {
      "ios": {
        "simulator": true
      }
    }
  }
}
```

### 2. Build

```bash theme={null}
eas build -p ios --profile ios-simulator
```

### 3. Download

EAS outputs a download link:

```
✔ Build finished
🍎 https://expo.dev/artifacts/eas/abc123.tar.gz
```

Download and extract the `.tar.gz` file to get your `.app`.

### 4. Verify

Test before uploading:

1. Open iOS Simulator
2. Drag `.app` file onto simulator
3. App should install and launch

## Android Emulator Build

### 1. Configure Profile

Add Android profile to `eas.json`:

```json theme={null}
{
  "build": {

    // For dev-loop add this line to enable the developmentClient
    // "developmentClient": true,
    "android-emulator": {
      "android": {
        "buildType": "apk"
      }
    }
  }
}
```

### 2. Build

```bash theme={null}
eas build -p android --profile android-emulator
```

### 3. Download

```
✔ Build finished
🤖 https://expo.dev/artifacts/eas/xyz789.apk
```

Download the `.apk` file directly.

### 4. Verify

Test before uploading:

```bash theme={null}
# Start emulator, then install
adb install your-app.apk
```

## Build Both Platforms

Create a combined profile:

```json theme={null}
{
  "build": {
    // For dev-loop add this line to enable the developmentClient
    // "developmentClient": true,
    "simulator-builds": {
      "ios": { "simulator": true },
      "android": { "buildType": "apk" }
    }
  }
}
```

Build both:

```bash theme={null}
eas build --platform all --profile simulator-builds
```

## Upload to Revyl

1. Go to **Builds** page
2. Click **Upload Build**
3. Select platform
4. Upload `.app` (iOS) or `.apk` (Android)
5. Done!

## Authenticated Test States

To skip login screens in Revyl cloud-agent runs and repeatable tests, add a test-only auth-bypass deep link handler to your Expo root layout. For Expo development clients, start the project through `revyl dev --tunnel --launch-var`, then open the app-specific auth link with `revyl device navigate`; YAML `navigate` steps can use the same link once the session is running.

See [Auth Bypass Deep Links](/builds/auth-bypass-deeplinks#framework-recipes) for the Expo Router snippet, the CLI-first Expo flow, and the Bug Bazaar sample.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Build fails or times out">
    * Check EAS build credits
    * Verify `package.json` dependencies
    * Review logs in EAS dashboard
    * Validate `eas.json` syntax
  </Accordion>

  <Accordion title="Download links expired">
    * Artifacts expire after some time
    * Re-run build for fresh links
    * Download immediately after build
  </Accordion>

  <Accordion title="iOS app won't install">
    * Extract `.tar.gz` completely
    * Drag `.app` file itself, not folder
    * Check simulator iOS version compatibility
    * Restart simulator
  </Accordion>

  <Accordion title="Android APK fails to install">
    * Check emulator is running: `adb devices`
    * Force reinstall: `adb install -r your-app.apk`
    * Clear emulator storage if full
    * Re-download if file corrupted
  </Accordion>
</AccordionGroup>

## Resources

* [EAS Build Docs](https://docs.expo.dev/build/introduction/)
* [EAS Configuration](https://docs.expo.dev/build/eas-json/)
* [Development Builds](https://docs.expo.dev/development/introduction/)
