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

# Mobile builds

> Produce iOS and Android binaries from your Openv2 project using the built-in Expo/EAS build flow.

A "build" in Openv2 produces a real binary — an **APK** or **AAB** for Android, or an **IPA** for iOS — using Expo and EAS under the hood. This is distinct from the in-browser preview, which runs your app's web target. You need an actual binary to submit to the App Store or Play Store, or to install directly on a device.

## Before you start

Make sure you have the following ready before opening the build flow:

* **Apple Developer Program** membership (paid, required for iOS)
* **Google Play Developer account** (required for Android production)
* A **bundle identifier** set in your `app.json` or `app.config.js` (for example, `com.yourcompany.yourapp`) — this must match what you register in App Store Connect or Play Console
* **App icon** — Openv2 can generate or upload one for you (see [App icon](#app-icon) below)

<Note>
  You don't need Xcode, Android Studio, or a local build environment. Openv2 handles the Expo/EAS side in the cloud. You are responsible for your store accounts, credentials, and policy compliance.
</Note>

## Start a build

<Steps>
  <Step title="Open the build flow">
    From the **header** of any project, select the **Build** action. This opens the Expo build wizard modal.
  </Step>

  <Step title="Choose your platform">
    Select **iOS** or **Android**. Each platform has its own path through the wizard:

    * **Android** — choose between an **APK** (useful for direct device installs and testing) or an **AAB** (required for Play Store production uploads)
    * **iOS** — walks you through Apple sign-in and Expo/EAS account linkage, then triggers the build
  </Step>

  <Step title="Provide credentials">
    The wizard collects what it needs for each platform. For iOS this includes your Apple account sign-in and EAS linkage. For Android it covers signing key setup. Follow the prompts — the modal explains each requirement as you go.
  </Step>

  <Step title="Wait for the build">
    The modal tracks **build status** as the job runs. Build times vary depending on your project's dependencies and the platform.
  </Step>

  <Step title="Download the artifact">
    When the build finishes, a **download link** appears. You can also find past builds in **build history**. If a download link doesn't appear after the build shows as complete, try refreshing the page or contact Openv2 support.
  </Step>
</Steps>

## App icon

Before building, set your app icon so it appears correctly on device home screens and in the stores.

You can **generate** an icon using Openv2's AI or **upload** one of your own. Openv2 writes it to `assets/images/icon.png` and the adaptive icon paths in your project, and optionally stores it as a thumbnail for your project in the dashboard.

<Tip>
  Apple requires a 1024×1024 PNG with no transparency for the App Store. Android adaptive icons need a foreground and background layer. If you upload a single image, Openv2 handles the resizing and file placement.
</Tip>

## Native dependency issues

Some npm packages include **native modules** that require config plugins or are incompatible with Expo's managed workflow. If the build wizard surfaces an error about a native dependency:

1. Read the error message — it usually names the package causing the problem.
2. Ask the **AI assistant** to fix it: describe the error and ask it to replace the incompatible package or add the required config plugin.
3. Rebuild once the fix is in place.

<Warning>
  Heavy native modules outside Expo's supported set may be impractical in Openv2's WebContainer environment. Identify any problematic dependencies early, before investing time in the rest of your build.
</Warning>

## Iterating after a failed build

Build failures almost always have a clear cause in the logs. When a build fails:

1. Read the error output in the modal or build history.
2. Copy the relevant error message and paste it into the **chat** — ask the AI assistant to diagnose and fix it.
3. Commit the fix in the workbench, then start a new build from the header.

Most failures fall into a few categories: missing or mismatched credentials, native module conflicts, or `app.json` configuration issues (wrong bundle ID, missing permissions, etc.).

## What comes next

Once you have a binary, the next step is submitting it to a store or distributing it for testing.

<CardGroup cols={2}>
  <Card title="App Store" icon="apple" href="/app-store">
    Submit your iOS build to Apple's App Store and manage App Review.
  </Card>

  <Card title="Play Store" icon="google-play" href="/play-store">
    Upload your AAB to Google Play Console and roll out to Android users.
  </Card>
</CardGroup>
