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
Reference tables
| Item | Where it lives | What to check |
|---|---|---|
| Build | Version page, Build section | Processed and attached. One build per version; you can swap it as often as you like until you submit. |
| Export compliance | The build's Manage link, or Info.plist | A build marked Missing Compliance can't be submitted until the encryption questions are answered. |
| App Privacy | App Privacy in the sidebar | Answered and published. Required for App Store distribution, and it has no API. |
| Age rating | App Information, Age Ratings | Questionnaire completed. An unrated app can't be published on the App Store. |
| Privacy policy URL | App Information | Required for iOS and macOS apps. |
| Screenshots | Version page, every language | At least one for the required iPhone size, plus the 13-inch iPad size if the app runs on iPad. |
| Description, keywords, support URL | Version page, every language | Required in each localization, not only the primary one. |
| What's New | Version page, every language | Required on updates. A first version has no such field. |
| Copyright | Version page | Required, for example "2026 Example Labs". |
| App Review Information | Version page | Contact 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.
| Status | What it means | Can you edit? |
|---|---|---|
| Prepare for Submission | You're still preparing the version. | Yes |
| Ready for Review | You clicked Add for Review. The version sits in a draft submission that hasn't been sent. | Yes, except screenshots and app previews |
| Waiting for Review | Apple has your submission but hasn't started. | Some app information. No screenshot or preview uploads. You can remove it from review. |
| In Review | A reviewer is working on it. | No. You can cancel the submission. |
| Waiting for Export Compliance | Your CCATS file is in Apple's export compliance review. | Yes |
| Pending Developer Release | Approved, waiting for you to release it (or for a scheduled date). | No |
| Processing for Distribution | Released; it should be on the store within 24 hours. | No |
| Pending Apple Release | Approved, held until the OS version it targets ships to the public. | No |
| Ready for Distribution | Live on the App Store. | No. Create a new version. |
| Rejected | App Review didn't accept the version. | Yes |
| Metadata Rejected | The listing was rejected, not the binary. | Yes |
| Invalid Binary | The build doesn't meet current binary requirements. | Yes |
| Developer Rejected | You 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.
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.
- 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.
- 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.
- 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.
- 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.
- 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.
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.
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.
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.
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.
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.
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
- 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.
- 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.
- 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.
- 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.
- apple_list_versionsVersion 2.4 is in Prepare for Submission.
- apple_list_buildsBuild 312 finished processing a few minutes ago.
- apple_preview_set_version_buildPreview: attach build 312 to version 2.4.
- Your agent asks before running apple_apply_set_version_build. You read the preview above and approve.
- apple_apply_set_version_buildAttached. Recorded in change history.
- apple_preview_submit_for_reviewSweep: no blockers. One note: App Privacy answers are entered in App Store Connect.
- Your agent asks before running apple_apply_submit_for_review. You read the preview above and approve.
- 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
| Tool | What it does |
|---|---|
| apple_get_listing_editabilityread | Which parts of the listing are locked right now, and why. |
| apple_list_buildsread | Processed builds for the app, newest first, with their processing state. |
| apple_preview_set_version_buildpreview + apply | Attach a processed build to the version. Required before submitting. |
| apple_preview_declare_build_encryptionpreview + apply | Answer export compliance for the build, or reuse an existing declaration. |
| apple_preview_set_review_detailpreview + apply | Contact details, demo account and notes for the App Review team. |
| apple_preview_submit_for_reviewpreview + apply | Runs the readiness sweep and previews the submission. Needs an explicit acknowledge to apply. |
| apple_list_review_submissionsread | Every submission with its state, each item's verdict and who submitted it. |
| apple_preview_cancel_review_submissionpreview + apply | Withdraw 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/mcp02 · 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.
/mcp03 · 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@metarunThen 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.
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/mcp02 · 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 metarun03 · 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.
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%3D03 · 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 jsonDon't run it with --force for MetaRun: that approves every tool, applies included.
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-skills02 · 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-skills03 · 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.
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/mcp02 · 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.
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.
Sources
- Apple: Submit an app
- Apple: Overview of submitting for review
- Apple: App and submission statuses
- Apple: Manage a submission with unresolved issues
- Apple: Reply to App Review messages
- Apple: Remove a submission from review
- Apple: Track a submission's review status
- Apple: Request an expedited review
- Apple: Provide information for a complete review
- Apple: Overview of export compliance
- Apple: Determine and upload app encryption documentation
- Apple: ITSAppUsesNonExemptEncryption
- Apple: Choose a build to submit
- Apple: Build upload statuses
- Apple: Platform version information
- Apple: App information
- Apple: Manage app privacy
- Apple: Set an app age rating
- Apple: Screenshot specifications
- Apple: App Review
Related guides
Guide
The 7-day percentage schedule, the 30-day pause budget, and what to do when a bad build is rolling out.
Guide
Internal vs external testers, Beta App Review, public links, and every reason testers see no builds.
Guide
Fill in App Privacy correctly: the 35 data types, tracking, SDKs, privacy manifests and required reason APIs.
Guide
Every iPhone and iPad screenshot size in pixels, which ones are required, app preview specs and upload errors.
Guide
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
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.