Shipping Apps: App Store, TestFlight, and CI/CD
Prerequisites: App architecture, Testing with Swift Testing and XCTest
Getting an app from Xcode onto people's devices involves signing, testing, review, and — ideally — automation.
The pieces
- Apple Developer Program — a paid annual membership, required to distribute on the App Store and TestFlight.
- Code signing — every app is signed with a certificate so devices can verify who built it and that it hasn't been tampered with. For most projects, Xcode's Automatically manage signing handles the certificates and provisioning profiles for you.
- App Store Connect — the web dashboard where you create the app's listing, upload builds, manage testers, and submit for review.
Release flow
- Set the version (what users see, such as
1.2.0) and build number (increases with every upload) in the target settings. - Product → Archive in Xcode, then Distribute App to upload to App Store Connect.
- Test with TestFlight — internal testers get builds immediately; external testers (up to 10,000) after a short review.
- Submit for App Review with screenshots, a description, privacy details, and review notes (including a demo account if the app needs a login).
- Release manually, automatically, or as a phased release over seven days, so problems surface before every user has the update.
Common review rejections: crashes, broken links, placeholder content, missing privacy explanations, and features requiring a login without a way for reviewers to sign in.
Continuous integration
CI builds and tests every change automatically. The command-line equivalent of Xcode's test action:
xcodebuild test \
-scheme MyApp \
-destination 'platform=iOS Simulator,name=iPhone 16'
Swift packages just run swift test. A GitHub Actions workflow on a
macOS runner:
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: macos-15
steps:
- uses: actions/checkout@v4
- name: Test
run: xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 16'
Apple's Xcode Cloud (built into Xcode and App Store Connect) runs the same steps and can deliver passing builds straight to TestFlight. fastlane is a popular open-source tool for automating screenshots, signing, and uploads from any CI service.
After launch
- Crash reports — Xcode's Organizer shows crashes and hangs from users who share diagnostics; many teams add a crash-reporting service as well.
- Feedback — TestFlight feedback and App Store reviews.
- Updates — ship small releases often; keep dependencies and the minimum OS version current.
Congratulations
You've reached the end of Level 3. Build one of the Advanced Projects, then read What You Should Know Now — and What's Next for where to go from here.