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

# Build and launch a mobile app

> Build a native iOS app with Agent, test it on your phone with Expo Go, and submit it through TestFlight and App Review.

## What you’ll do

In this tutorial, you’ll:

* Create a mobile app from a prompt with Agent
* Preview it locally on your phone with Expo Go
* Share an Expo Go preview for testing and feedback
* Promote to TestFlight for beta testing
* Submit to the App Store for public release

<Note>
  Run this tutorial in the Project Editor at [replit.com](https://replit.com). If you're using the Replit iOS app, open the project on replit.com to work on native mobile apps.
</Note>

<Note>
  Apple sets the requirements for TestFlight and App Store submissions. You'll use App Store Connect to manage testing and releases.
</Note>

## What you’ll need

* A Replit account with access to the Project Editor at [replit.com](https://replit.com)
* A phone with Expo Go installed
* An Apple Developer Program membership (required by Apple for TestFlight and the App Store)

## Part 1: Build your app with Agent

<Steps>
  <Step title="Create a mobile app">
    On the Replit home screen, describe what you want to build, then select **Mobile app** as the app type.
  </Step>

  <Step title="Let Agent build">
    Agent scaffolds your project and builds your first version. Keep the chat open to follow progress and request changes.
  </Step>
</Steps>

## Part 2: Test on your phone with Expo Go

Expo Go runs a native preview of your app on your device.

<Steps>
  <Step title="Install Expo Go">
    Install Expo Go on your iPhone or Android device.
  </Step>

  <Step title="Open the QR code">
    In the Project Editor, select **Preview on mobile device** to display a QR code.
  </Step>

  <Step title="Scan and preview">
    Scan the QR code with your phone to open a native preview in Expo Go.
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/replit/w-e0JEaJZyojmDmg/images/native-mobile-apps/mobile-screen.png?fit=max&auto=format&n=w-e0JEaJZyojmDmg&q=85&s=853fee23e3e5b838d5f0f2e2ba80e32d" alt="Mobile app running in the Replit Project Editor preview with the Preview on device panel and QR code" width="5120" height="2694" data-path="images/native-mobile-apps/mobile-screen.png" />
</Frame>

<Tip>
  If your preview looks out of date, refresh in Expo Go. On your device, shake your phone to open the developer menu, then select **Refresh**.
</Tip>

## Part 3: Share a preview with Expo Go

Sharing with Expo Go creates a development preview for testers who have Expo Go installed. Use it to gather feedback before you submit a build through Apple's review process.

<Steps>
  <Step title="Publish from the Project Editor">
    Open the publishing pane and select **Publish**. This deploys your app and backend to Replit's infrastructure.
  </Step>

  <Step title="Share your app">
    After you publish the preview, testers with Expo Go can open it using the shareable link. No Apple Developer account is required at this stage.
  </Step>
</Steps>

<Tip>
  Use Expo Go previews to quickly share prototypes, gather early feedback, and iterate before committing to the App Store process.
</Tip>

## Part 4: Promote to TestFlight

After sharing an Expo Go preview, you can promote your app to TestFlight for more formal beta testing. TestFlight requires an Apple Developer account but provides a native app experience without Expo Go.

### Apple publishing prerequisites

Apple requires specific accounts and configurations before you can submit builds. Complete these steps before attempting to submit.

#### Join the Apple Developer Program

You need an Apple Developer Program membership to submit builds to TestFlight and the App Store.

<Callout type="note">
  Apple requires two-factor authentication on your Apple Account.
</Callout>

#### Individual vs. organization enrollment

* **Individual accounts**: Publish under your legal name as the seller.
* **Organization accounts**: Publish under the organization name as the seller. Apple requires a D‑U‑N‑S Number for organizations, which can take time to obtain.

#### Typical enrollment steps

1. Sign in at `https://developer.apple.com/programs/enroll/`
2. Complete identity verification
3. Accept the Apple Developer Program license agreement
4. Pay the annual fee set by Apple
5. Wait for Apple approval (time varies by account type)

### Understand TestFlight vs. the App Store

TestFlight is Apple’s beta testing system. The App Store is the public marketplace where anyone can download your app.

| Aspect             | TestFlight                                        | App Store                                |
| ------------------ | ------------------------------------------------- | ---------------------------------------- |
| **Audience**       | Invited testers (up to 10,000 external testers)   | Public                                   |
| **Purpose**        | Beta testing and feedback                         | Public release                           |
| **Review**         | First build of a version goes through beta review | Every submission goes through App Review |
| **Build lifetime** | Expires after 90 days                             | Permanent until you remove it            |

<Tip>
  TestFlight is the fastest way to catch crashes, performance issues, and device-specific problems before launch.
</Tip>

<Steps>
  <Step title="Open the publishing pane">
    With your app already shared as an Expo Go preview, open the publishing pane in the Project Editor.
  </Step>

  <Step title="Select App Store publishing">
    Select **Publish to App Store** to promote your app to TestFlight.
  </Step>

  <Step title="Connect Apple and submit">
    Sign in with your Apple Developer account when prompted. Replit builds a native app in the cloud and submits it to TestFlight.
  </Step>
</Steps>

<Note>
  The first build of a version typically requires a TestFlight beta review. After approval, you can usually push additional builds to testers faster.
</Note>

### Enable external testing

To share your TestFlight build with other people, configure external testing in App Store Connect:

1. In App Store Connect, open your app.
2. Go to **TestFlight**, then **External Testing**.
3. Create a testing group and add your build.
4. Submit for Beta App Review (required by Apple for external testers).
5. Share the public TestFlight link after approval.

## Part 5: Submit to the App Store

When your build is ready for release, submit it through App Store Connect:

1. In App Store Connect, open your app.
2. Go to the **App Store** tab.
3. Fill out required metadata (description, screenshots, category, pricing, and privacy details).
4. Select your TestFlight build to promote.
5. Submit for review.

### Complete your App Store Connect listing

Replit creates your app listing in App Store Connect, but you still need to complete required metadata before Apple will accept a submission. The following fields are commonly required:

* **App name and subtitle**
* **Category** (primary, optional secondary)
* **Pricing and availability** (free or paid, and regions)
* **Privacy policy URL** (publicly accessible)
* **App Privacy details** (data collection “nutrition labels”)
* **Screenshots** (required)
* **Support URL** (required)
* **App Review contact information** (required)

<Callout type="note">
  If your app requires sign-in, add demo credentials for App Review in App Store Connect so Apple can test your app.
</Callout>

### Privacy requirements

Apple requires you to:

* Provide a public **privacy policy URL**
* Declare your **App Privacy** data practices (including third-party SDKs and services you use)

If you use third-party services (analytics, payments, crash reporting, ads), review their privacy disclosures and include them in your App Privacy answers.

### Screenshots

Screenshots are required and strongly influence conversion on the App Store.

<Tip>
  Use real screenshots from your app. Make sure screenshots match the current build you’re submitting.
</Tip>

### Common rejection reasons

| Issue                             | How to avoid it                                             |
| --------------------------------- | ----------------------------------------------------------- |
| Crashes or obvious bugs           | Test on TestFlight first and fix issues before submission   |
| Missing privacy policy            | Add a public privacy policy URL before submission           |
| Screenshots don’t match the app   | Upload screenshots from the current build                   |
| Reviewers can’t access the app    | Provide demo credentials and instructions in review notes   |
| Incomplete or placeholder content | Remove “coming soon” flows and incomplete screens           |
| Permission prompts lack context   | Explain why you need camera, location, or other permissions |

### Timelines to expect

| Stage                                             | Typical duration                                                  |
| ------------------------------------------------- | ----------------------------------------------------------------- |
| Apple Developer Program approval                  | Varies (often 1–2 days for individuals; longer for organizations) |
| Build processing in App Store Connect             | Often 10–15 minutes                                               |
| TestFlight beta review (first build of a version) | Often about a day                                                 |
| App Store review                                  | Often 1–2 days                                                    |

### Updating your app after launch

* **UI and content updates**: Publish again to release updates quickly.
* **Native changes** (for example, app icons or permissions): Submit a new App Store build.

## Checklist

Use this checklist to verify you're ready for each stage.

**Before you share an Expo Go preview:**

* You can run the app on a real device via Expo Go
* Your app has no obvious crashes or broken flows

**Before you promote to TestFlight:**

* Your app is published and running on Replit
* You have an Apple Developer Program membership
* You know whether your Apple account is individual or organization

**Before you submit to the App Store:**

* App Store Connect metadata is complete (name, category, regions, and support URL)
* Privacy policy URL is public and accurate
* App Privacy details are complete (including third-party services)
* Screenshots are uploaded and match the submitted build
* App Review contact info is set
* Demo credentials are provided (if your app requires sign-in)

## Next steps

* Learn how mobile apps work on Replit: [Native Mobile Apps](/replitai/building-mobile-apps)
* Learn how Agent works: [Agent](/core-concepts/agent)
* Use Replit on mobile: [Replit Mobile App](/platforms/mobile-app)
* Learn more about Expo: [Expo docs](https://docs.expo.dev/)
