Ship an update to the public App Store. Same archive-and-upload flow as TestFlight, plus App Store Review (1–3 days) and a few extra metadata steps. About 15 minutes of your time + Apple's review window.
If you're new to shipping iOS, read Re-upload an iOS build to TestFlight first — same prerequisites apply (Mac, Xcode, Apple Developer Program, App Store Connect record). The App Store flow assumes your app is already live in the store; this tutorial covers shipping an update.
If this is your very first App Store submission, the flow is similar but adds the initial app metadata creation. Apple's first-submission guide ↗ covers it; come back here for the re-upload pattern.
Same as TestFlight uploads. In Xcode → target → General → Identity:
CFBundleShortVersionString) — bump it. For a public release this should change (e.g., 1.2.0 → 1.3.0 or 1.2.1).CFBundleVersion) — increment by 1.Apple expects a real Version bump for App Store submissions. "1.2.0 → 1.2.0" gets rejected; "1.2.0 → 1.2.1" or "1.2.0 → 1.3.0" works.
CFBundleShortVersionString docs ↗ · Semantic versioning primer ↗.
Identical to TestFlight:
Alternative uploaders: Transporter app ↗ (drag IPA, click Deliver) or xcrun altool with an App Store Connect API key.
See the full archive/upload walkthrough in Re-upload an iOS build to TestFlight.
Apple processes the build in 5–30 minutes. Watch in App Store Connect ↗ → your app → TestFlight tab. When you see the new build there with status Ready to Submit, you can attach it to an App Store release.
In App Store Connect → your app → App Store tab (left sidebar).
Click the + Version button next to the version dropdown (top left). Enter your new Version (e.g., 1.2.1) — must match what's in your build's CFBundleShortVersionString.
This creates a new "version page" that you'll fill out and submit.
Scroll down to Build section on the new version page. Click + (Add Build). Pick the build you just uploaded.
If your build doesn't appear, processing isn't finished yet — wait a few more minutes and refresh.
In the What's New in This Version field, write user-facing release notes. These show in the App Store on the version's update screen.
Good notes are:
Localize for every language you've added if you have translations. App Store localization docs ↗.
You don't have to update screenshots/description/keywords on every release — only when something user-facing changed enough to warrant new images.
If you do need new screenshots:
You can also update: Description, Keywords (100 chars total, comma-separated), Support URL, Marketing URL, Promotional Text (170 chars, can be edited any time without resubmitting). Optional but worth keeping fresh.
Scroll to Version Release section. Three options:
For most updates, phased release is the safe default. You can pause it at any percentage if something breaks. Phased release docs ↗.
App Store Connect will surface a checklist of things that may need updating. The big ones:
When every required field has a green check, the Add for Review button (top right) becomes active. Click it. The version moves to Waiting for Review.
Then click Submit to App Review. The version status flows: Waiting for Review → In Review → Pending Developer Release (if manual) or Ready for Sale (if auto).
App Store Review timing:
If rejected, you get a message in the Resolution Center (App Store Connect → your app → top nav) explaining why. Reply with the fix or an explanation; resubmit. Most rejections are fixable in one revision cycle.
Full ruleset: App Store Review Guidelines ↗.
Watch sales / downloads / crash rate after release:
If you chose phased release and Crashes shows a regression in the new version, you can halt the phased release in App Store Connect, or submit a hotfix.