Guide · App Store Connect

How to submit an app for review in App Store Connect

To submit an app for review, open the version in App Store Connect, attach a processed build, fill in every required field, then click Add for Review and Submit for Review. The status changes to Waiting for Review, and Apple aims to review at least 50% of submissions in under 24 hours and 90% in under 48.

Most of the work happens before the button. App Store Connect only tells you what's missing when you click Add for Review, so a forgotten screenshot size in one language, unpublished App Privacy answers or a build marked Missing Compliance stops you at the last step. And if App Review rejects the version, you don't start a new submission: you fix the issue and resubmit the same one from the App Review section.

By Redjan Hysa, founder of MetaRun · Facts checked October 12, 2026

Apple's goal for reviews finished in under a day (90% in under 48 hours)
50% in 24 h
app version submission in review per platform at a time
1
screenshots per display size, per language
1 to 10
Apple's estimate to clear encryption documentation
~2 business days
in Pending Developer Release before Apple emails a reminder
30 days
01 · Reference

Reference tables

Pre-submission checklist
ItemWhere it livesWhat to check
BuildVersion page, Build sectionProcessed and attached. One build per version; you can swap it as often as you like until you submit.
Export complianceThe build's Manage link, or Info.plistA build marked Missing Compliance can't be submitted until the encryption questions are answered.
App PrivacyApp Privacy in the sidebarAnswered and published. Required for App Store distribution, and it has no API.
Age ratingApp Information, Age RatingsQuestionnaire completed. An unrated app can't be published on the App Store.
Privacy policy URLApp InformationRequired for iOS and macOS apps.
ScreenshotsVersion page, every languageAt least one for the required iPhone size, plus the 13-inch iPad size if the app runs on iPad.
Description, keywords, support URLVersion page, every languageRequired in each localization, not only the primary one.
What's NewVersion page, every languageRequired on updates. A first version has no such field.
CopyrightVersion pageRequired, for example "2026 Example Labs".
App Review InformationVersion pageContact name, email and phone in international format (+44...), a demo account if sign-in is required, and notes (up to 4,000 bytes).

From Apple's platform version and app information references. Screenshot sizes change with new devices; see the screenshot sizes guide for the current list.

App Store Connect review statuses
StatusWhat it meansCan you edit?
Prepare for SubmissionYou're still preparing the version.Yes
Ready for ReviewYou clicked Add for Review. The version sits in a draft submission that hasn't been sent.Yes, except screenshots and app previews
Waiting for ReviewApple has your submission but hasn't started.Some app information. No screenshot or preview uploads. You can remove it from review.
In ReviewA reviewer is working on it.No. You can cancel the submission.
Waiting for Export ComplianceYour CCATS file is in Apple's export compliance review.Yes
Pending Developer ReleaseApproved, waiting for you to release it (or for a scheduled date).No
Processing for DistributionReleased; it should be on the store within 24 hours.No
Pending Apple ReleaseApproved, held until the OS version it targets ships to the public.No
Ready for DistributionLive on the App Store.No. Create a new version.
RejectedApp Review didn't accept the version.Yes
Metadata RejectedThe listing was rejected, not the binary.Yes
Invalid BinaryThe build doesn't meet current binary requirements.Yes
Developer RejectedYou removed the version from review.Yes

Apple's App and submission statuses reference. Inside a submission, an item can also show Accepted while another item in the same submission was rejected.

02 · By hand

How to submit an iOS app for review in App Store Connect

You need the Account Holder, Admin or App Manager role. The example is version 2.4 of com.example.app with build 312.

  1. 01

    Attach the build

    In Apps, pick the app and click version 2.4 in the sidebar. In the Build section, click the add button (+), choose build 312, click Done, then Save. If build 312 shows Missing Compliance, click Manage next to it and answer the encryption questions.

  2. 02

    Fill the version page in every language

    Use the language menu to walk each localization: screenshots, description, keywords, support URL and, on an update, What's New. Then fill App Review Information, including a demo account that won't expire before the review starts.

  3. 03

    Check the app-level settings

    Under App Information, confirm the age rating and privacy policy URL. Under App Privacy, make sure your answers are published. Pick the release option (manual, automatic, or automatic no earlier than a date) and phased release while you're on the version page.

  4. 04

    Add for Review

    Click Add for Review and choose an existing draft submission or a new one. The status becomes Ready for Review. If something is missing, App Store Connect lists it here instead.

  5. 05

    Submit for Review

    Open Draft Submissions (bottom right) or the App Review section, add any other items you want reviewed with the version, such as in-app events or in-app purchases, and click Submit for Review.

03 · Briefing

How review submissions work

Everything you send to App Review travels inside a submission. Each platform can have one submission that contains an app version under review at a time, plus one more that carries only items (an in-app event, a custom product page, a product page optimization test) without a version. iOS and macOS versions are submitted separately and don't affect each other.

Items you add next to a version are reviewed with that version, and the submission only completes when every item is accepted. Apple also notes that submissions may not be reviewed in the order you send them. One practical consequence: if a new in-app purchase gets rejected, the version waits with it until you fix or remove the purchase.

MetaRun's readiness sweep reads every language, the build, export compliance and any submission already in flight before anything is sent, which catches the multi-language gaps that usually surface only at Add for Review.

04 · Briefing

Export compliance and ITSAppUsesNonExemptEncryption

Builds are uploaded to servers in the United States, so an app that uses encryption and ships outside the US or Canada falls under US export rules. If your Info.plist doesn't contain the ITSAppUsesNonExemptEncryption key, App Store Connect asks the compliance questions for every new build and marks unanswered builds Missing Compliance.

Set the key to NO when the app, including the libraries it links, uses no encryption or only exempt encryption. Apple's documentation says encryption built into the operating system, such as HTTPS through URLSession, is typically exempt. Set it to YES if you use non-exempt encryption, upload the required documentation under App Information, App Encryption Documentation, and add the code Apple returns as ITSEncryptionExportComplianceCode. A French encryption declaration is needed if you use a standard algorithm the OS doesn't provide and distribute in France; proprietary algorithms also need a US CCATS.

05 · Briefing

After a rejection: reply or resubmit

Open the app and click the unresolved issues link, then Resolve next to the submission. App Review's message, the guideline it cites and any attachments are read there. If they asked for information, or the fix is a metadata change or server side (reactivating a demo account, for example), reply instead of resubmitting: a resubmission starts a new review, and App Review can no longer answer your earlier message. A metadata rejection can go back with the same build.

When you do resubmit, use the same submission. Click Edit next to the rejected item, make the change, click Add for Review, then Resubmit to App Review. Apple lets you edit an item once before resubmission, and a removed item can't be added back to that submission. If App Review offers a bug fix submission, reply to accept it. Resubmitting while an appeal to the App Review Board is open closes the appeal.

06 · Briefing

Requesting an expedited review

Apple's examples of a reason to expedite are a critical bug fix and a release tied to an event you're directly associated with. Submit the version first, since only submissions already sent to App Review qualify, then file the request at developer.apple.com/contact/app-store/?topic=expedite. For a bug fix, put the steps to reproduce the bug on the current version in the Notes field; for an event, name the event, its date and your connection to it. Apple grants them as availability and demand allow, and asks that they be reserved for urgent cases.

07 · Troubleshooting

Common problems and how to fix them

"This build is missing export compliance information" or a build marked Missing Compliance

Why: The build's Info.plist has no ITSAppUsesNonExemptEncryption key and nobody has answered the encryption questions for it yet.

Fix: Click Manage next to the build (Distribution or TestFlight tab) and answer the questions. Then add ITSAppUsesNonExemptEncryption to Info.plist so the next upload arrives already answered.

"Unable to Add for Review", or Add for Review won't go through

Why: App Store Connect checks the version when you click and lists what's missing. The usual gaps: no build selected, a required screenshot size missing in one localization, What's New empty in a language on an update, App Privacy answers not published, no age rating, or incomplete App Review contact details.

Fix: Read the list in the dialog and fix each line, switching languages on the version page; most failures are in a secondary localization. If the version already shows Ready for Review, it's in a draft submission: open Draft Submissions and submit from there.

App stuck in Waiting for Review

Why: Most submissions finish within 48 hours, but Apple says documentation checks, regulated or novel features and fraud investigations take longer, and incomplete submissions get delayed.

Fix: Check the App Review section for a message asking for information first. Don't remove and resubmit to jump the queue: removing makes it Developer Rejected and the review starts over. For a critical bug or a dated event, request an expedited review.

Build not appearing in the Add Build dialog

Why: The upload is still processing or failed, or its version number doesn't match this version: Apple attaches each upload to a version record by bundle ID and version number. Once a version is live, the dialog only lists builds uploaded since that release.

Fix: Wait for Apple's processing email, then check the upload's status under Build Uploads. A Failed upload lists its errors and you can reuse the build number. Over 24 hours in Processing, contact Apple or file a Feedback Assistant ticket.

A rejected version won't go into a new submission

Why: After a rejection the submission stays in Unresolved Issues and keeps the version. Apple won't add that version to another submission, and you can't add new items to a submission in that state.

Fix: Resolve the original: edit or remove the rejected items, then click Resubmit to App Review on that submission's page.

08 · With an AI agent

Do it from Claude Code, Codex, Cursor or Xcode with MetaRun

Submitting by hand is six screens in App Store Connect: pick the build, answer the encryption question, fill in review contact and demo account details, check that every language has its screenshots and description, press Add for Review, then Submit. Miss one field and the button stays grey with no reason given.

Through MetaRun the agent does the same steps as tool calls. The readiness sweep reads the version, the build, the listing in every language and the review details, and returns one list of blockers before any write. Fix those, preview the submission, approve it, and it is in Apple's queue.

Before you start

  • A version in Prepare for Submission. If there isn't one, apple_preview_create_version makes it.
  • A processed build for that version, uploaded from Xcode, Xcode Cloud, fastlane or your CI.
  • An App Store Connect API key in MetaRun with the Admin or App Manager role.

How the agent runs it

  1. 01

    Find the version and the build

    Your agent lists the app's versions and builds, picks the processed build that matches the version you named, and previews attaching it. A build still processing is reported as such, not attached.

  2. 02

    Clear what App Review will ask

    If the build has no export compliance answer, the agent previews one. If review contact details or the demo account are missing, it previews those too. Each is its own change with its own before and after.

  3. 03

    Run the readiness sweep

    The submit preview reads the version, every language's description and screenshots, What's New on an update, the review details and any submission already in flight. Blockers come back as a list with the tool that fixes each one.

  4. 04

    Submit with an explicit acknowledge

    The apply takes the preview's confirm token plus acknowledge set to true. If anything changed on Apple's side since the preview, the token no longer matches and nothing is sent.

An example session

The 2.4 build just finished uploading. Attach it to version 2.4 of com.example.app, sort out export compliance, and tell me what still blocks submission.

  1. apple_list_versionsVersion 2.4 is in Prepare for Submission.
  2. apple_list_buildsBuild 312 finished processing a few minutes ago.
  3. apple_preview_set_version_buildPreview: attach build 312 to version 2.4.
  4. Your agent asks before running apple_apply_set_version_build. You read the preview above and approve.
  5. apple_apply_set_version_buildAttached. Recorded in change history.
  6. apple_preview_submit_for_reviewSweep: no blockers. One note: App Privacy answers are entered in App Store Connect.
  7. Your agent asks before running apple_apply_submit_for_review. You read the preview above and approve.
  8. apple_apply_submit_for_reviewSubmitted with acknowledge set to true. Version 2.4 is Waiting for Review.

Illustrative: your apps, versions and numbers will differ. The tool names and their order are real.

The MetaRun tools involved

ToolWhat it does
apple_get_listing_editabilityreadWhich parts of the listing are locked right now, and why.
apple_list_buildsreadProcessed builds for the app, newest first, with their processing state.
apple_preview_set_version_buildpreview + applyAttach a processed build to the version. Required before submitting.
apple_preview_declare_build_encryptionpreview + applyAnswer export compliance for the build, or reuse an existing declaration.
apple_preview_set_review_detailpreview + applyContact details, demo account and notes for the App Review team.
apple_preview_submit_for_reviewpreview + applyRuns the readiness sweep and previews the submission. Needs an explicit acknowledge to apply.
apple_list_review_submissionsreadEvery submission with its state, each item's verdict and who submitted it.
apple_preview_cancel_review_submissionpreview + applyWithdraw a submission from Apple's queue, naming exactly which one.

Each preview has an apply twin that only runs with the confirm token from a fresh preview, and refuses if App Store Connect changed in between.

What Apple enforces along the way

One submission at a time per platform

Apple lets one app-version submission wait for or sit in review per platform. The sweep blocks a second instead of letting Apple refuse it halfway through.

A rejection resubmits through its own submission

After a rejection Apple keeps the version inside the rejected submission and refuses to add it to a new one. MetaRun marks the item resolved and resubmits that same submission, which is what the Resubmit button in App Store Connect does. Verified against a live app on 11 September 2026: same submission id, item moved from Rejected to Ready for Review.

App Privacy has no API

Apple's App Store Connect API cannot read or write App Privacy answers. On a first submission the sweep warns about it rather than blocking, and apple_build_privacy_answers turns your PrivacyInfo.xcprivacy files into the exact answers to enter by hand.

App Review's message is not in the API either

The rejection reason, the guideline cited and any attachments only exist in App Store Connect. MetaRun returns a direct link to that page and the agent is told not to guess the reason.

What's New only exists after the first release

A first version has no What's New field and the API rejects one. The sweep only requires it on an update.

Set up your agent

Connect once, then ask in plain words. Pick your agent:

Claude Code Anthropic

Run claude mcp add --transport http --scope user metarun https://metarun.dev/api/mcp, then run /mcp in Claude Code and sign in to MetaRun in your browser.

01 · Add the server

Run it in any terminal. --scope user makes MetaRun available in every project; leave it out to limit it to the current one.

claude mcp add --transport http --scope user metarun https://metarun.dev/api/mcp

02 · Sign in

In a Claude Code session, run /mcp, choose metarun and authenticate. MetaRun opens in your browser, where you pick read-only or read and change. From a plain shell, claude mcp login metarun does the same.

/mcp

03 · Optional: add the skills too

The MetaRun plug-in bundles the same server with six mission skills (release handoff, worldwide pricing, localization, review inbox, ASO audit, store media).

claude plugin marketplace add metarun/metarun-skills
claude plugin install metarun-skills@metarun

Then ask Claude Code

  • Ask Claude Code: The 2.4 build just finished uploading. Attach it to version 2.4 of com.example.app, sort out export compliance, and tell me what still blocks submission.
  • Ask Claude Code: Use the review notes in docs/review-notes.md for the App Review details, then preview submitting 2.4.
  • Ask Claude Code: We got rejected. Show me the submission state and the link to Apple's message, then resubmit once I've replied.

claude -p runs one request with no interactive session. The browser sign-in can't complete inside -p, so sign in once interactively first, or configure the server with a personal access token in CI. Tools missing from --allowedTools are refused in -p mode.

Read-only check, safe to schedule

claude -p "Check whether version 2.4 of com.example.app is ready to submit for review and list every blocker. Read and preview only; do not apply anything." \
  --allowedTools "mcp__metarun__apple_get_listing_editability,mcp__metarun__apple_list_builds,mcp__metarun__apple_preview_set_version_build,mcp__metarun__apple_preview_declare_build_encryption,mcp__metarun__apple_preview_set_review_detail,mcp__metarun__apple_preview_submit_for_review,mcp__metarun__apple_list_review_submissions,mcp__metarun__apple_preview_cancel_review_submission"

Only reads and previews are on that list, so nothing can reach App Store Connect unattended. Run applies in an interactive session where Claude Code can ask you.

Full Claude Code setup guide

Codex OpenAI

Run codex mcp add metarun --url https://metarun.dev/api/mcp; Codex detects MetaRun's sign-in and opens it in your browser.

01 · Add the server

Codex sees that MetaRun offers sign-in and starts it straight away, in your browser. Pick read-only or read and change.

codex mcp add metarun --url https://metarun.dev/api/mcp

02 · Sign in again later

If the sign-in expires or you disconnected it in MetaRun's settings. --no-browser prints the link instead, for SSH sessions.

codex mcp login metarun

03 · Or edit ~/.codex/config.toml

The Codex CLI, the IDE extension and Codex in the ChatGPT desktop app read the same file, so one entry covers all three.

[mcp_servers.metarun]
url = "https://metarun.dev/api/mcp"

Then ask Codex

  • Ask Codex: The 2.4 build just finished uploading. Attach it to version 2.4 of com.example.app, sort out export compliance, and tell me what still blocks submission.
  • Ask Codex: Use the review notes in docs/review-notes.md for the App Review details, then preview submitting 2.4.
  • Ask Codex: We got rejected. Show me the submission state and the link to Apple's message, then resubmit once I've replied.

codex exec runs one request without an interactive session and with its approval policy set to never. MetaRun's reads and previews still run, because they're marked read-only; anything that would ask is refused.

Read-only check, safe to schedule

codex exec "Check whether version 2.4 of com.example.app is ready to submit for review and list every blocker. Read and preview only; do not apply anything."

Applies are refused in codex exec by design. Don't set MetaRun's approval mode to approve just to make them pass; keep App Store changes in an interactive session.

Full Codex setup guide

Cursor Anysphere

Add https://metarun.dev/api/mcp to ~/.cursor/mcp.json (or use the install link) and sign in to MetaRun when Cursor opens your browser.

01 · Add to ~/.cursor/mcp.json (or .cursor/mcp.json for one project)

{
  "mcpServers": {
    "metarun": {
      "url": "https://metarun.dev/api/mcp"
    }
  }
}

02 · Or use the install link

Opens Cursor with the server filled in.

https://cursor.com/link/mcp/install?name=metarun&config=eyJ1cmwiOiJodHRwczovL21ldGFydW4uZGV2L2FwaS9tY3AifQ%3D%3D

03 · Sign in

When Cursor connects, MetaRun opens in your browser. Pick read-only or read and change, and you're back in the editor with the tools listed under MCP.

Then ask Cursor

  • Ask Cursor: Attach the newest processed build to 2.4 and run the readiness check. Don't submit yet.
  • Ask Cursor: Take the demo account from @.env.review and set it as the App Review sign-in for 2.4.
  • Ask Cursor: Preview the submission for 2.4 and list anything that would block it.

The Cursor CLI runs one request without the editor with agent -p. Allow only the read tools the request needs in ~/.cursor/cli-config.json (Mcp(metarun:tool_name) rules), and keep MetaRun's apply tools out of that list.

Read-only check, safe to schedule

agent -p "Check whether version 2.4 of com.example.app is ready to submit for review and list every blocker. Read and preview only; do not apply anything." --output-format json

Don't run it with --force for MetaRun: that approves every tool, applies included.

Full Cursor setup guide

Xcode Apple

In Xcode 27, add the plug-in from https://github.com/metarun/metarun-skills (Settings, Intelligence, Plug-ins, Add from URL) and click Sign in next to MetaRun.

01 · Add the MetaRun plug-in

In Xcode 27, open Settings, Intelligence, Plug-ins. Choose Add Plug-in, then Add from URL, and paste:

https://github.com/metarun/metarun-skills

02 · Or with one click

Opens Xcode's plug-in sheet with the repository filled in.

xcode://agent-plugin-clone?repo=https%3A%2F%2Fgithub.com%2Fmetarun%2Fmetarun-skills

03 · Sign in

Install MetaRun from the list, then click Sign in next to it. MetaRun opens in your browser; pick read-only or read and change.

04 · Ask the coding assistant

Claude Agent, Codex and Gemini in Xcode all get MetaRun's tools and its six workflow skills.

Attach build 312 to version 2.4 and tell me what blocks submission.

Then ask Xcode

  • Ask Xcode: I just archived and uploaded 2.4 (build 312). Once it's processed, attach it to version 2.4 and check what blocks submission.
  • Ask Xcode: Our Info.plist sets ITSAppUsesNonExemptEncryption to NO. Confirm the build's export compliance matches before we submit.
  • Ask Xcode: Preview submitting 2.4 for review and walk me through the warnings.

Full Xcode setup guide

Claude Anthropic

In Claude, open Customize, Connectors, Add custom connector, paste https://metarun.dev/api/mcp and click Connect to sign in to MetaRun.

01 · Add a custom connector

In Claude, open Customize, then Connectors, and choose Add custom connector. Name it MetaRun and paste the server URL:

https://metarun.dev/api/mcp

02 · Connect

Click Connect. Claude opens MetaRun in your browser to sign in; pick read-only or read and change.

03 · Team and Enterprise

An Owner adds the connector once under Organization settings, Connectors. Each member then clicks Connect and signs in to their own MetaRun account.

Then ask Claude

  • Ask Claude: Is version 2.4 of my app ready to submit? What's missing?
  • Ask Claude: Attach build 312 to version 2.4 and fill in the App Review contact with my details.
  • Ask Claude: Submit 2.4 for review. Show me the preview first.

Full Claude setup guide

Apple key stays on MetaRun, encryptedPreview before every writeRecorded, revertible from history
09 · FAQ

Frequently asked questions

How long does Waiting for Review take in App Store Connect?

Apple's goal is to review at least 50% of submissions in less than 24 hours and 90% in less than 48. Minor updates and bug fixes usually move fastest. Submissions that need documentation, use regulated or new capabilities, or trigger an investigation take longer, and there's no published figure for those.

What's the difference between Ready for Review and Waiting for Review?

Ready for Review means you clicked Add for Review and the version is in a draft submission that Apple hasn't received. Waiting for Review means you clicked Submit for Review and the submission is in Apple's queue. The review clock only starts at Waiting for Review.

Do I need ITSAppUsesNonExemptEncryption in my Info.plist?

It isn't mandatory, but without it App Store Connect asks the export compliance questions for every new build, and unanswered builds can't be tested or submitted. Most apps that only use HTTPS and other OS-provided encryption set it to NO. Apps with non-exempt encryption set YES plus the compliance code Apple issues.

How do I resubmit after an App Store rejection?

Open the App Review section, click Resolve next to the submission, edit or remove the rejected items, then click Resubmit to App Review. If the fix was only metadata or a reply, answer in the same thread instead; resubmitting starts a new review.

Can I change the build after submitting?

Not while it's in the queue. Remove the version from review (it becomes Developer Rejected), select the new build, and submit again. The review starts over, so it's worth it only when the new build fixes something serious.

Can I edit my app while it's waiting for review?

Some app information, yes. Screenshots and app previews can't be uploaded or edited while the submission waits, and nothing is editable once it's In Review. App Review Information can be edited at any time.

Can your agent submit my app for review without asking me?

Not through MetaRun's contract. The submit apply needs a confirm token from a fresh preview plus an explicit acknowledge, and your agent asks you before it runs the tool unless you have pre-approved that exact tool. Pre-approve reads and previews if you like; keep applies on ask.

What does the readiness sweep check?

The attached build and its processing state, export compliance, review contact and demo account, every language's description, keywords and screenshots, What's New on an update, and whether another submission is already waiting or in review on the same platform.

Does MetaRun upload the build?

No. Xcode, Xcode Cloud, fastlane or any CI uploads the build to App Store Connect as usual. MetaRun picks up from there: attach, answer compliance, submit.

What happens after a rejection?

Ask your agent for the submission state. You get each item's verdict and a link to App Review's message in App Store Connect, since that message has no API. Once you've fixed and replied, the agent resubmits the same submission.

10 · Sources

Sources

Related guides

Guide

Phased release

The 7-day percentage schedule, the 30-day pause budget, and what to do when a bad build is rolling out.

Guide

TestFlight testers

Internal vs external testers, Beta App Review, public links, and every reason testers see no builds.

Guide

Privacy labels

Fill in App Privacy correctly: the 35 data types, tracking, SDKs, privacy manifests and required reason APIs.

Guide

Screenshot sizes

Every iPhone and iPad screenshot size in pixels, which ones are required, app preview specs and upload errors.

Guide

Release notes

What's New and promotional text: the limits, when each one locks, examples for every kind of update, and what App Review rejects.

All guides

Every App Store Connect guide

Releases, TestFlight, pricing, subscriptions, localization, screenshots and more.

With MetaRun: App Store Connect MCP server

MetaRun

Do this from your AI agent or MetaRun's dashboard, with a preview before every change. 14-day free trial, no card.