beta
Build and upload iOS app to TestFlight
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.
| name | beta |
|---|---|
| description | Build and upload iOS app to TestFlight |
| argument-hint | [--skip-build-increment] [--external] [--changelog "text"] |
| allowed-tools | Bash, 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
- Syncs certificates via Match (appstore type)
- Increments build number (unless
--skip-build-increment) - Builds release archive with gym
- Uploads to TestFlight via pilot
- 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"
- Go to https://account.apple.com → Sign-In & Security → App-Specific Passwords
- Generate a password named "Fastlane"
- 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_externallane or manual distribution in App Store Connect