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

# App Store Submission, Step by Step

> A start-to-finish walkthrough for publishing your app to the Apple App Store and Google Play Store, in the order you actually do things.

This is the one page that walks you through submission **in order**, from "I have a finished app" to "it's live in the store." If you've never shipped an app before, follow it top to bottom.

There are two separate submissions — **iOS (Apple App Store)** and **Android (Google Play Store)**. They're independent. You can do one, the other, or both. Each has its own developer account, its own build, and its own review.

<Note>
  Set aside time. Getting the accounts approved and the first build through review usually takes a few days end to end — most of that is waiting on Apple/Google, not work on your side. This is normal. You are not stuck.
</Note>

## Before you start (both platforms)

Do these once, before you touch either store. They apply to iOS and Android alike.

<Steps>
  <Step title="Finish and test your app">
    Submission is not the time to discover bugs. Test the real flows on a real device — sign-up/login, the main features, payments if you have them. See [Preview vs Builds](/guides/preview-vs-builds) for how a store build differs from the preview.
  </Step>

  <Step title="Set your app name and icon">
    In Newly: **More → Project Settings**. Upload a **1024×1024 PNG icon (no transparency for iOS)** and set the final app name. See [Deployment → App Configuration](/features/deployment#app-configuration).
  </Step>

  <Step title="Deploy your backend to production (if you use Liquid Backend)">
    Open the **Deploy** modal → **Backend** section → **Push to Production**. Your production app must point at the production backend, so do this *before* you build the app you'll submit. Details: [Backend deployment](/features/deployment#backend-deployment).
  </Step>

  <Step title="Have a privacy policy URL ready">
    Both stores require a public privacy policy link for essentially every app. Have the URL on hand before you start the listing.
  </Step>

  <Step title="Check for special entitlements — apply EARLY">
    If your app uses a gated capability (Family Controls / Screen Time, Critical Alerts, CarPlay, clinical Health Records, or Android restricted permissions like background location), you must **apply for approval before submitting** or the store will reject you. This approval can take time, so start it now. See [Permissions & Entitlements](/guides/permissions-and-entitlements).
  </Step>
</Steps>

***

## iOS — Apple App Store

### Step 1 — Enroll in the Apple Developer Program

You need a paid **[Apple Developer Program](https://developer.apple.com/programs/enroll/)** membership — **\$99/year**. A free Apple ID is not enough. Enrollment can take anywhere from a few hours to a couple of days for Apple to approve, so do this first.

### Step 2 — Open the Deploy modal and start an iOS build

In your Newly project, click **Deploy**, then **Build & Deploy**, and select **iOS**. The Apple Credentials section appears.

### Step 3 — Connect your Apple account

Use **Automatic setup** (recommended):

1. Enter your **Apple ID** email and password.
2. Complete **two-factor authentication** when prompted.
3. **Select your team** from your Apple account.
4. Newly **auto-provisions the required keys** — you'll see a checkmark appear for each one.
5. **Select or create your app** — Newly pre-fills the name and bundle ID from your project.

Prefer to manage your own keys? Use **Manual setup** instead. Full detail on both paths, and what each key is for, is in [App Store Connect Setup](/subscriptions/app-store-connect-setup).

<Tip>
  You only connect your Apple account once. Credentials are stored encrypted and reused across all your Newly projects.
</Tip>

### Step 4 — Confirm your app details

Before building, confirm:

* **App name**
* **Bundle identifier** (e.g. `com.yourname.appname`) — [changing it later is a two-step process](/guides/bundle-id-changes), so get it right now
* **Version number**

### Step 5 — Build and submit

Click **Build**. Newly compiles your app (typically 5–15 minutes) and **submits the build to App Store Connect** automatically. When it finishes, the build shows up in your App Store Connect account.

### Step 6 — Test with TestFlight (recommended)

Once the build lands in App Store Connect, install it via **TestFlight** on a real iPhone and run through everything one more time. Catching a crash here is free; catching it in review costs you days.

### Step 7 — Fill out your App Store listing

In [App Store Connect](https://appstoreconnect.apple.com), open your app and complete the listing. This is the part people forget is separate from the build:

* **Screenshots** — required for each required device size
* **Description** — clear and accurate; don't oversell features you don't have
* **Keywords**
* **Privacy Policy URL**
* **App Privacy questionnaire** — declare what data you collect
* **Age rating** — answer the questionnaire honestly
* **Review notes** — **if your app requires login, provide a working demo account** (username + password). Missing demo credentials is one of the most common rejection reasons.

<Tip>
  Newly's Marketing Studio can help generate store screenshots. See [Marketing Studio](/features/marketing-studio).
</Tip>

### Step 8 — Submit for review

Attach your build to the version and click **Submit for Review**. Apple review typically takes **1–3 days**.

### Step 9 — Respond to the result

* **Approved** → release it (immediately or on a date you choose). 🎉
* **Rejected** → read the reason carefully. Most rejections are fixable: paste the reason to the AI in Newly, fix it, rebuild, and resubmit. You can also reply to the reviewer in the Resolution Center. See [Handling rejections](#handling-rejections) below.

***

## Android — Google Play Store

### Step 1 — Create a Google Play Developer account

Sign up for a **[Google Play Developer account](https://play.google.com/console/signup)** — a **one-time \$25** fee. Google verifies your identity, which can take a day or two.

### Step 2 — Deploy your backend to production

Same as iOS — if you use Liquid Backend, push it to production before building. See [Backend deployment](/features/deployment#backend-deployment).

### Step 3 — Confirm your app details and build an AAB

In the **Deploy** modal, choose **Build AAB** (the Android App Bundle is the format the Play Store requires). Confirm:

* **App name**
* **Package name** (e.g. `com.yourname.appname`)
* **Version number**

<Warning>
  Your package name **cannot be changed after your first Play Store submission**. Choose it carefully.
</Warning>

Wait for the AAB to compile, then **download** it.

### Step 4 — Create your app in the Play Console and upload the AAB

In the [Google Play Console](https://play.google.com/console), create a new app, then upload your downloaded **.aab** file to a release (start with Internal testing if you want to trial it first, or Production to go live).

### Step 5 — Complete your store listing

Play requires more listing pieces than most people expect:

* **Screenshots** — at least 2 (up to 8)
* **Feature graphic** — a 1024×500 banner image
* **App icon** — 512×512 PNG
* **Short and full description**
* **Privacy Policy URL**
* **Content rating** — complete the questionnaire
* **Target audience** — specify correctly
* **Data safety form** — declare what data you collect and how it's used

### Step 6 — Submit for review

Roll out the release and submit. Google review times vary — often a day or two, but first submissions from a new account can take longer.

***

## Pre-submission checklist

Run through this before you hit submit on either store:

<AccordionGroup>
  <Accordion title="Accounts & money">
    * Apple Developer Program active (\$99/yr) — for iOS
    * Google Play Developer account active (\$25 once) — for Android
  </Accordion>

  <Accordion title="The app itself">
    * Tested on a real device (TestFlight for iOS)
    * Final app name and icon set
    * Correct bundle ID / package name (these are hard to change later)
    * Version number set
    * Backend pushed to production (if using Liquid Backend)
    * Any special entitlements already approved
  </Accordion>

  <Accordion title="The store listing">
    * Screenshots for all required sizes
    * Description, keywords/short description
    * Privacy policy URL live and reachable
    * Age / content rating completed
    * Privacy / data-safety questionnaire completed
    * Demo account provided in review notes (if login is required)
  </Accordion>
</AccordionGroup>

***

## Handling rejections

A rejection is routine — plenty of apps are rejected on the first try. It's not the end.

1. Read the exact reason the store gives you.
2. Paste that reason to the AI in Newly and ask it to help fix the issue.
3. Rebuild and resubmit.
4. If you disagree or need to clarify, reply to the reviewer (Apple's Resolution Center / Play's policy contact).

The most common causes:

* Crashes or bugs during review
* Incomplete or broken functionality
* **No working demo account** for a login-gated app
* Missing or unreachable privacy policy
* Misleading metadata / screenshots
* Guideline or policy violations

More detail: [Deployment → Troubleshooting & rejections](/features/deployment#app-rejection).

***

## Related

<CardGroup cols={2}>
  <Card title="App Deployment" icon="rocket" href="/features/deployment">
    Reference for how Newly builds and ships your app
  </Card>

  <Card title="App Store Connect Setup" icon="apple" href="/subscriptions/app-store-connect-setup">
    Connecting your Apple account and keys in depth
  </Card>

  <Card title="Permissions & Entitlements" icon="shield-check" href="/guides/permissions-and-entitlements">
    Apply for gated Apple entitlements and Android permissions
  </Card>

  <Card title="Changing your Bundle ID" icon="tag" href="/guides/bundle-id-changes">
    The two-step update if you rename your bundle ID
  </Card>

  <Card title="Marketing Studio" icon="wand-magic-sparkles" href="/features/marketing-studio">
    Generate store screenshots and marketing assets
  </Card>

  <Card title="Preview vs Builds" icon="mobile" href="/guides/preview-vs-builds">
    How a store build differs from the in-app preview
  </Card>
</CardGroup>
