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

<Warning>
  You're reading the docs for **Newly v1 (legacy)**, the classic newly.app builder. Using app.newly.app or Newly for Mac? Go to the [Newly v2 docs](/). Credits, pricing and features differ between the two.
</Warning>

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](/legacy/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](/legacy/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](/legacy/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](/legacy/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](/legacy/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](/legacy/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](/legacy/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.

Full detail on the account and connecting it to Newly: [Google Play Setup](/legacy/guides/google-play-setup).

### Step 2 — Deploy your backend to production

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

### Step 3 — Start an AAB build and confirm your app details

In the **Deploy** modal, choose the **AAB** target (the Android App Bundle is the format the Play Store requires). This opens a four-step wizard.

**Step 1 of the wizard — bundle identifier**, e.g. `com.yourname.appname`.

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

**Step 2 of the wizard — version.** Set the version name and version code. Newly pre-fills the next version based on your last successful build. Every Play upload needs a version code higher than the last, and codes can never be reused.

### Step 4 — Generate and save your signing key

**Step 3 of the wizard** generates the release key Google Play requires and asks you to download two files: **`release-keystore.p12`** and **`keystore-credentials.txt`**. You can't continue until both are saved.

<Warning>
  **Do not skip past this or save these to a folder you'll clear out.** If you lose your signing key you can never publish an update to this app — you'd have to publish a new app under a new package name. Put both files in a password manager or an encrypted backup now.
</Warning>

On future builds this step offers **Use Existing Key** — that's what you want for any update. Choosing **Generate New Key** permanently breaks your ability to update the published app. Full detail: [Android Signing Keys](/legacy/guides/android-signing-keys).

### Step 5 — Build and download the AAB

**Step 4 of the wizard** builds and signs your app. Wait for it to compile, then **download** the `.aab`.

### Step 6 — 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** to trial it before going public.

<Warning>
  **Personal developer accounts registered after November 2023** must run a **closed test with at least 12 testers for 14 consecutive days** before Google will grant production access. Plan for this — it's a hard two-week gate, not a formality. See [running a closed test](https://newly.app/how-to/google-play-closed-testing).
</Warning>

### Step 7 — 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 8 — 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 — Android version code higher than your last upload
    * **Android signing key backed up somewhere permanent** (`.p12` + credentials `.txt`)
    * 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](/legacy/features/deployment#app-rejection).

***

## Related

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

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

  <Card title="Google Play Setup" icon="google-play" href="/legacy/guides/google-play-setup">
    Play Developer account, Play Console connection, release tracks
  </Card>

  <Card title="Android Signing Keys" icon="key" href="/legacy/guides/android-signing-keys">
    Generating and safeguarding your Google Play release key
  </Card>

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

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

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

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