beta

greenstevester's avatarfrom greenstevester

Build and upload iOS app to TestFlight

⭐1stars🔀0forks📁View on GitHub🕐Updated Jan 2, 2026

When & Why to Use This Skill

This Claude skill automates the end-to-end workflow for building and deploying iOS applications to Apple TestFlight. By integrating Fastlane tools, it handles complex tasks such as certificate synchronization, build number increments, and binary uploads, streamlining the mobile DevOps pipeline for faster beta testing cycles.

Use Cases

  • Automated Internal Testing: Quickly distribute the latest app builds to internal team members for immediate feedback without manual Xcode configuration.
  • External Beta Releases: Deploy builds to external testers via TestFlight with automated changelog inclusion and distribution settings.
  • Certificate and Profile Management: Simplify the iOS code signing process by automatically syncing certificates and provisioning profiles using Fastlane Match.
  • Continuous Delivery Integration: Incorporate iOS build and upload steps into a broader automation workflow to ensure consistent and reliable app delivery.
namebeta
descriptionBuild and upload iOS app to TestFlight
argument-hint[--skip-build-increment] [--external] [--changelog "text"]
allowed-toolsBash, Read

TestFlight Beta Release

Build and upload the iOS app to TestFlight for beta testing.

Pre-flight Checks

  • Fastlane installed: !fastlane --version 2>/dev/null | grep "fastlane " | head -1 || echo "✗ Not installed - run: brew install fastlane"
  • Fastfile exists: !ls fastlane/Fastfile 2>/dev/null && echo "✓ Found" || echo "✗ Not found - run /setup-fastlane first"
  • App-specific password: ![ -n "$FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD" ] && echo "✓ Set" || echo "⚠️ Not set - export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD='xxxx-xxxx-xxxx-xxxx'"

Arguments: ${ARGUMENTS:-none}


What This Does

  1. Syncs certificates via Match (appstore type)
  2. Increments build number (unless --skip-build-increment)
  3. Builds release archive with gym
  4. Uploads to TestFlight via pilot
  5. Optionally distributes to external testers (if --external)

Commands

Standard Beta (Internal Testers)

cd project/product/swiftui-ios-app  # or your fastlane directory
fastlane beta

Skip Build Number Increment

fastlane beta skip_build_increment:true

External Testers (with changelog)

fastlane beta_external changelog:"Bug fixes and performance improvements"

Troubleshooting

"No value found for 'username'"

Set your Apple ID in fastlane/Appfile:

apple_id("your@email.com")

"Please sign in with an app-specific password"

  1. Go to https://account.apple.com → Sign-In & Security → App-Specific Passwords
  2. Generate a password named "Fastlane"
  3. Export it:
export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD='xxxx-xxxx-xxxx-xxxx'

rsync error during export

If you see --extended-attributes: unknown option, Homebrew rsync conflicts with Xcode:

brew uninstall rsync  # Use system rsync

After Upload

  • Build will appear in TestFlight within 1-5 minutes
  • Internal testers are notified automatically
  • External testers require beta_external lane or manual distribution in App Store Connect