Tutorials / Native Mac IDE / Re-upload an iOS build to TestFlight
📝 Written ● Beginner Updated 2026-05-13

Re-upload an iOS build to TestFlight

Ship a new version of your iOS app to TestFlight so your testers can try it. Bump the build number, archive, upload, wait for Apple's processing. About 10 minutes of your time + 5–30 minutes of Apple's. Walks through every tool you need to install.

What you need (one-time)

0

First-time setup. Skip whichever you already have.

Bump the build number

1

Apple rejects re-uploads with the same CFBundleVersion. Bump it before archiving.

In Xcode: click your project at the top of the file navigator → select the target → General → Identity. Two fields:

  • Version (CFBundleShortVersionString) — the user-visible version. Keep the same for a patch; bump it (e.g., 1.2.0 → 1.2.1) when shipping real changes.
  • Build (CFBundleVersion) — increase by 1. Must always increase, even within the same Version.

Or via terminal at the project root:

agvtool next-version -all

CFBundleVersion docs ↗.

Pick the right destination

2

In the toolbar (top of Xcode), the device picker must say Any iOS Device (arm64) — not a simulator. Archiving only works against a generic device target.

Menu: Product → Destination → Any iOS Device (arm64).

Archive

3

In Xcode: menu Product → Archive. Xcode builds in Release mode (this takes a minute or two on a typical project), then opens the Organizer window with your archive listed.

Or via terminal:

xcodebuild -scheme YourAppScheme -configuration Release archive \
  -archivePath ~/Desktop/YourApp.xcarchive

Distribution docs ↗.

Validate before uploading

4

In Organizer (it opens automatically after Archive), select your archive on the left → click Validate App on the right.

This catches signing problems, entitlement mismatches, and bundle issues before you waste time on a failed upload. Validation takes ~1 minute. Fix anything it flags before continuing.

Upload — pick one of three ways

5

Option A — Xcode Organizer (easiest).

In Organizer: Distribute App → App Store Connect → Upload. The wizard signs and uploads. Typical time: 2–5 minutes.

6

Option B — Transporter app (most reliable).

Export an IPA first: in Organizer, Distribute App → App Store Connect → Export. Save the IPA file. Then open Transporter ↗, drag the IPA in, click Deliver.

Useful when Xcode's upload UI hangs (more common than it should be).

7

Option C — command line (for scripts / CI).

Needs an App Store Connect API key. Then:

xcrun altool --upload-app \
  -f ~/Desktop/YourApp.ipa \
  -t ios \
  --apiKey "$ASC_KEY_ID" \
  --apiIssuer "$ASC_ISSUER_ID"

App Store Connect API docs ↗ · altool reference ↗.

Wait for processing

8

Upload finishes fast (a few minutes). Apple's server-side processing takes longer:

  • 5–15 min typical
  • 30 min – 2 hr during busy periods (WWDC week, holiday season)
  • You'll get an email when it's ready (sometimes spam folder — check)

Watch in App Store Connect ↗My Apps → your app → TestFlight tab. Build status flows: Uploading → Processing → Ready to Submit.

Hand it to testers

9

When status is Ready to Submit, you have two tester options:

  • Internal testing — auto-available to up to 100 users from your App Store Connect team. No review needed; they get it immediately. Right for your own team and tight collaborators.
  • External testing — anyone with a link, up to 10,000 testers. First build per group needs Beta App Review (24–48 hours). Subsequent builds usually skip review unless something major changed.

In App Store Connect: TestFlight tab → click your build → toggle which groups can access it. Testers get a push notification in the TestFlight app.

Your testers also need the TestFlight appTestFlight on the App Store ↗. Send them the link if they don't have it yet.

Export compliance — first time only, you may need to answer "uses encryption" questions. Most apps qualify for the standard exemption (HTTPS only). Answer once in the build settings or App Store Connect; subsequent uploads inherit the answer. Encryption export docs ↗.

Write release notes

10

By default, testers see your build with no notes. You can add release notes in App Store Connect → TestFlight → your build → Test DetailsWhat to Test. Testers see these in the TestFlight app when they update.

Keep notes short and concrete: "Fixed the crash on the settings screen. Try toggling dark mode." Vague notes get vague feedback.

If you're using LingCode's agent

Once you've set up an ASC API key, the agent can do the entire flow from chat: just say "Bump the build number and upload to TestFlight". See Upload to TestFlight with the agent.

Common failures and fixes

11
  • "No signing certificate found" — Xcode → Settings → Accounts → your Apple ID → Download Manual Profiles. Or enable Automatically manage signing in the target's Signing & Capabilities tab.
  • "This bundle version is already in use" — you didn't bump the build number. Go back to Step 1.
  • "Missing required icon" — your app icon isn't filled in for all required sizes. Use Apple's icon spec ↗; an asset like appicon.co ↗ generates all sizes from one image.
  • "Invalid entitlements" — a capability in your .entitlements file isn't enabled on your provisioning profile. In developer.apple.com → Identifiers ↗, enable the capability on your App ID, then regenerate the profile.
  • "ITMS-9000: Bad URL" — Apple's servers are flaky. Retry in 10 minutes. If it persists, switch to Transporter (Option B).

Official references

What's next