TestFlight
Scanned@ivangdavila
npx machina-cli add skill @ivangdavila/testflight --openclawWhen to Use
User needs to distribute beta builds via TestFlight. Agent handles App Store Connect setup, tester groups, build uploads, and CI/CD integration.
Quick Reference
| Topic | File |
|---|---|
| CI/CD automation | ci-cd.md |
Core Rules
1. App Store Connect Setup First
Before uploading:
- Bundle ID registered in Developer Portal
- App created in App Store Connect
- App-specific password or API key configured
2. Build Requirements
Every TestFlight build needs:
- Unique build number (CFBundleVersion) - increment ALWAYS
- Valid provisioning profile (App Store distribution)
- No missing compliance declarations
3. Tester Group Strategy
| Group | Purpose | Limit |
|---|---|---|
| Internal | Team members with App Store Connect access | 100 |
| External | Beta testers, requires review | 10,000 |
Internal builds available immediately. External requires Apple review (24-48h first time).
4. Upload Methods
| Method | Best For |
|---|---|
| Xcode | Manual, one-off uploads |
xcrun altool | Scripts, CI without fastlane |
| Fastlane | Full automation, multiple apps |
| Xcode Cloud | Apple-native CI/CD |
| Transporter | GUI for non-developers |
5. Build Expiration
TestFlight builds expire after 90 days. Plan releases accordingly.
TestFlight Traps
- Build number not incremented - rejected immediately, must bump and rebuild
- Missing export compliance - stuck in "Processing" until answered in App Store Connect
- External testers on first build - requires full beta review, use internal first
- Expired provisioning profile - upload fails silently, check before archiving
- App-specific password in CI - use App Store Connect API key instead (more secure, no 2FA issues)
CI/CD Quick Setup
App Store Connect API Key (Recommended)
- App Store Connect > Users > Keys > App Store Connect API
- Generate key with "App Manager" role
- Download
.p8file (only shown ONCE) - Note: Issuer ID, Key ID
Fastlane Upload
# In Fastfile
lane :beta do
build_app(scheme: "MyApp")
upload_to_testflight(
api_key_path: "fastlane/api_key.json",
skip_waiting_for_build_processing: true
)
end
xcrun altool (No Fastlane)
xcrun altool --upload-app \
--type ios \
--file "MyApp.ipa" \
--apiKey "KEY_ID" \
--apiIssuer "ISSUER_ID"
Security & Privacy
Data that leaves your machine:
- IPA/app binary uploaded to Apple servers
- Build metadata (version, bundle ID, team)
Data that stays local:
- API keys and certificates (keep in Keychain)
- Source code (not uploaded)
This skill does NOT:
- Store Apple credentials in plain text
- Share builds outside Apple's infrastructure
Related Skills
Install with clawhub install <slug> if user confirms:
iosโ iOS development patternsxcodeโ Xcode workflowsflutterโ cross-platform builds
Feedback
- If useful:
clawhub star testflight - Stay updated:
clawhub sync
Overview
It automates beta distribution for iOS and macOS using TestFlight, covering App Store Connect setup, tester grouping, and build uploads. It also integrates with CI/CD workflows to streamline beta releases.
How This Skill Works
Before any upload, the skill ensures App Store Connect is prepared (registered Bundle ID and app, credentials). Each build must meet requirements (unique CFBundleVersion, valid provisioning, export compliance). It then assigns testers into Internal or External groups and uploads the build using a chosen method (Fastlane, xcrun altool, Xcode, Xcode Cloud, or Transporter), with optional CI/CD automation.
When to Use It
- Distribute a new beta to internal testers after a successful code build
- Set up App Store Connect (Bundle ID, app, credentials) before first beta
- Automate beta uploads in CI/CD using Fastlane, altool, or Xcode Cloud
- Manage tester groups and handle external beta reviews
- Plan releases around 90-day TestFlight build expiration
Quick Start
- Step 1: Ensure App Store Connect is prepared (bundle ID, app, API key or password)
- Step 2: Configure your CI/CD to use a preferred upload method (Fastlane or altool)
- Step 3: Build and trigger a TestFlight upload, then monitor processing and tester access
Best Practices
- Do App Store Connect setup first: register the bundle, create the app, and configure credentials
- Enforce build hygiene: always increment CFBundleVersion and ensure valid provisioning profiles
- Define tester groups (Internal vs External) and respect their limits
- Choose the right upload method for your workflow (manual Xcode, altool scripts, Fastlane, or CI-native options)
- Monitor build processing and plan release timing before expiration (90 days)
Example Use Cases
- Internal testers receive rapid feedback with immediate availability after each internal build
- A CI pipeline triggers Fastlane beta uploads to TestFlight after a successful merge
- Xcode Cloud handles automated builds and TestFlight distribution for multi-app projects
- External testers are queued for beta review after internal validation to ensure compliance
- API key-based authentication is used to avoid storing credentials in CI scripts