> ## 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.

# Upload your app to App Store Connect

> Use Replit's Launch feature to build, sign, and upload your app to App Store Connect.

Uploading puts your app inside App Store Connect. Nothing before this point is visible to
Apple, and nothing after it, TestFlight or submitting for review, works until it's done.

You'll need an [Apple Developer account](/build/mobile-apple-account) first.

## What gets uploaded

A **build** is a real, installable copy of your app, the same kind of file you'd get from the
App Store, except it isn't published yet. Expo Go runs your code inside a shared preview app,
a build is your app on its own, which is why features like push notifications and in-app
purchases only work here.

Replit's **Launch** feature creates that build, signs it, and uploads it from the
[Publishing](/features/publishing/overview) tab.

<Steps>
  <Step title="Publish the web app first">
    PixelGames' backend needs to be live before the App Store launch, select **Publish** at
    the top of your workspace to publish it.

    <Frame caption="Publishing PixelGames' web app and API server first.">
      <img src="https://mintcdn.com/replit/wpDFPJulnZRpqmW6/images/pixelgames/mobile/publish-step0.png?fit=max&auto=format&n=wpDFPJulnZRpqmW6&q=85&s=8649996b14285d251725e88fa510cf48" alt="Replit editor with the Publish button highlighted" data-path="images/pixelgames/mobile/publish-step0.png" width="1920" height="992" data-path="images/pixelgames/mobile/publish-step0.png" />
    </Frame>
  </Step>

  <Step title="Start publishing to the App Store">
    Once the web app is published, a **Start publishing to the App Store** button appears
    under **Publishing**. Select it to open the Launch wizard.

    <Frame caption="Starting the App Store launch from Replit's Publishing tab.">
      <img src="https://mintcdn.com/replit/wpDFPJulnZRpqmW6/images/pixelgames/mobile/publish-step1.png?fit=max&auto=format&n=wpDFPJulnZRpqmW6&q=85&s=9f7741ffeee02d92322bc8760a53b322" alt="Replit Publishing tab with the Start publishing to the App Store button" data-path="images/pixelgames/mobile/publish-step1.png" width="1424" height="683" data-path="images/pixelgames/mobile/publish-step1.png" />
    </Frame>
  </Step>

  <Step title="Choose your Expo project">
    Confirm the project name and slug, or select **Use existing** if PixelGames already has
    one.

    <Frame caption="Choosing the Expo project to launch.">
      <img src="https://mintcdn.com/replit/wpDFPJulnZRpqmW6/images/pixelgames/mobile/publish-step2.png?fit=max&auto=format&n=wpDFPJulnZRpqmW6&q=85&s=12091ccccb5b62910f941d8435fde3bb" alt="Launch wizard Choose Expo project step with project name and slug fields" data-path="images/pixelgames/mobile/publish-step2.png" width="1710" height="985" data-path="images/pixelgames/mobile/publish-step2.png" />
    </Frame>
  </Step>

  <Step title="Sign in with Apple">
    Use the same Apple account enrolled in the Apple Developer Program. Replit uses these
    credentials only to authenticate with Apple and does not store your password.

    <Frame caption="Signing in with Apple to connect the Expo project.">
      <img src="https://mintcdn.com/replit/wpDFPJulnZRpqmW6/images/pixelgames/mobile/publish-step4.png?fit=max&auto=format&n=wpDFPJulnZRpqmW6&q=85&s=5fdf6a70851c6b2d8dc92b8580952b63" alt="Launch wizard Sign in with Apple step with email and password fields" data-path="images/pixelgames/mobile/publish-step4.png" width="1205" height="883" data-path="images/pixelgames/mobile/publish-step4.png" />
    </Frame>
  </Step>

  <Step title="Choose your Apple app">
    Set the app name and bundle identifier, or select **Use existing** if you already created
    one in App Store Connect. The bundle identifier can't change later.

    <Frame caption="Setting the app name and bundle identifier.">
      <img src="https://mintcdn.com/replit/wpDFPJulnZRpqmW6/images/pixelgames/mobile/publish-step5.png?fit=max&auto=format&n=wpDFPJulnZRpqmW6&q=85&s=12d9fc538428a2bc11688fbf26aa93b9" alt="Launch wizard Choose Apple app step with app name and bundle identifier fields" data-path="images/pixelgames/mobile/publish-step5.png" width="1199" height="880" data-path="images/pixelgames/mobile/publish-step5.png" />
    </Frame>
  </Step>

  <Step title="Configure Apple certificates">
    Launch selects a valid distribution certificate and provisioning profile automatically,
    or creates new ones if none exist yet.

    <Frame caption="Launch configuring Apple's distribution certificate and provisioning profile.">
      <img src="https://mintcdn.com/replit/wpDFPJulnZRpqmW6/images/pixelgames/mobile/publish-step6.png?fit=max&auto=format&n=wpDFPJulnZRpqmW6&q=85&s=c239bed35a8bc200631bf7d93f07e157" alt="Launch wizard Configure Apple certificates step" data-path="images/pixelgames/mobile/publish-step6.png" width="1200" height="883" data-path="images/pixelgames/mobile/publish-step6.png" />
    </Frame>
  </Step>

  <Step title="Launch to the App Store">
    Once every step above is checked off, select **Launch to App Store**. Your build compiles
    on Expo's servers, then lands in App Store Connect.

    <Frame caption="All steps complete, ready to launch to the App Store.">
      <img src="https://mintcdn.com/replit/wpDFPJulnZRpqmW6/images/pixelgames/mobile/publish-step7.png?fit=max&auto=format&n=wpDFPJulnZRpqmW6&q=85&s=5731fe06230c3945b25a28c974b50195" alt="Launch wizard Ready for launch step with the Launch to App Store button" data-path="images/pixelgames/mobile/publish-step7.png" width="1202" height="877" data-path="images/pixelgames/mobile/publish-step7.png" />
    </Frame>
  </Step>

  <Step title="Wait for publishing to finish">
    Publishing can take up to 45 minutes. You can keep building with Agent while it runs, and
    installing the Replit app gets you a notification when it completes.

    <Frame caption="Publishing to the App Store in progress, tracked from the Publishing tab.">
      <img src="https://mintcdn.com/replit/wpDFPJulnZRpqmW6/images/pixelgames/mobile/publish-step9.png?fit=max&auto=format&n=wpDFPJulnZRpqmW6&q=85&s=97e26725b6a51cd6ad8e367c339337d2" alt="Replit Publishing tab showing Publishing to App Store in progress" data-path="images/pixelgames/mobile/publish-step9.png" width="1420" height="658" data-path="images/pixelgames/mobile/publish-step9.png" />
    </Frame>
  </Step>

  <Step title="Open it in TestFlight">
    When publishing completes you get an email titled **"\[Your name] has invited you to test
    PixelGames"**. Select **View in TestFlight** to open the app and install it on your phone.
  </Step>
</Steps>

Once it finishes, your build appears in App Store Connect under your app.

From there it can go two ways: hand it to
[testers on TestFlight](/build/mobile-testflight) first, or go straight to the listing and
[submit it for review](/build/mobile-publish-ios). Nothing is public yet either way, the
build just sits in App Store Connect until you submit it.

## Uploading again later

Changed something in PixelGames? Run the same flow again to get the new version up.

It goes much faster the second time. Your Expo project, Apple account, app, and certificates
are all still filled in, so most steps are just confirming what's already there.

## Troubleshooting

* **No distribution certificates found:** normal on a first launch, select **Create new
  certificate** and Launch generates one.
* **Sign in with Apple fails:** confirm the account is enrolled in the Apple Developer
  Program, not just a regular Apple ID.
* **Publishing seems stuck:** it can take up to 45 minutes, and builds are queued at peak
  times. Check your Expo dashboard under **Builds** before assuming something's broken.

## What's next

<CardGroup cols={2}>
  <Card title="Test with TestFlight" icon="flask" href="/build/mobile-testflight">
    Hand the uploaded build to real testers first.
  </Card>

  <Card title="Submit to the App Store" icon="apple" href="/build/mobile-publish-ios">
    Finish the listing and send it for review.
  </Card>
</CardGroup>
