Skip to content
AgileLogics
7 min read

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

  1. Set the version (what users see, such as 1.2.0) and build number (increases with every upload) in the target settings.
  2. Product → Archive in Xcode, then Distribute App to upload to App Store Connect.
  3. Test with TestFlight — internal testers get builds immediately; external testers (up to 10,000) after a short review.
  4. Submit for App Review with screenshots, a description, privacy details, and review notes (including a demo account if the app needs a login).
  5. 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.