TestFlight
Manage TestFlight beta testing end to end: beta groups, testers, build distribution, What to Test notes, beta review, and tester feedback.
Build-scoped commands default to the latest non-expired build. Pass --build <number> to target a specific build, and --platform to disambiguate when a universal-purchase app shares build numbers across platforms.
Beta groups
ascelerate testflight groups list <bundle-id>
ascelerate testflight groups info <bundle-id> "External Testers"
ascelerate testflight groups create <bundle-id> --name "Friends" --public-link --public-link-limit 100
ascelerate testflight groups update <bundle-id> "Friends" --public-link false
ascelerate testflight groups delete <bundle-id> "Friends"
groups list shows each group's type, public link, tester limit, and feedback setting. groups info adds the group's testers and assigned builds. create accepts --internal for an internal group (team members) and --all-builds to give it automatic access to every build; external groups can enable a public invite link with an optional tester limit.
Group names are matched case-insensitively. Omit the name to pick from an interactive list.
Assigning builds
# Defaults to the latest non-expired build
ascelerate testflight groups add-build <bundle-id> "Friends"
ascelerate testflight groups add-build <bundle-id> "Friends" --build 123
ascelerate testflight groups remove-build <bundle-id> "Friends" --build 123
Recruitment criteria
Public-link groups can restrict who joins by device family and OS version:
# View current criteria, plus the device/OS options Apple accepts
ascelerate testflight groups criteria view <bundle-id> "Friends" --options
# Replace criteria: FAMILY[:MIN[:MAX]] with inclusive bounds
ascelerate testflight groups criteria set <bundle-id> "Friends" --filter IPHONE:18.0 --filter IPAD:17.0:26
# Remove all criteria
ascelerate testflight groups criteria clear <bundle-id> "Friends"
Valid families: IPHONE, IPAD, MAC, APPLE_TV, APPLE_WATCH, VISION.
Testers
ascelerate testflight testers list <bundle-id>
ascelerate testflight testers list <bundle-id> --group "Friends"
# Adding sends the TestFlight invitation for external groups
ascelerate testflight testers add <bundle-id> --email tester@example.com --first-name Jane --group "Friends"
# Remove from one group, or from the whole app
ascelerate testflight testers remove <bundle-id> tester@example.com --group "Friends"
ascelerate testflight testers remove <bundle-id> tester@example.com
# Re-send the invitation email
ascelerate testflight testers invite <bundle-id> tester@example.com
--group accepts multiple comma-separated group names on add and import.
Bulk import
ascelerate testflight testers import <bundle-id> --file testers.csv --group "Friends"
The file has one tester per line: email[,first name[,last name]]. Blank lines, lines starting with #, and a leading header row are skipped — the CSV format App Store Connect's web UI exports works as-is. Failed rows are reported at the end without aborting the rest of the batch.
Builds and distribution
# Every build with its TestFlight states
ascelerate testflight builds <bundle-id>
ascelerate testflight builds <bundle-id> --platform ios --limit 50
# Pre-release version trains
ascelerate testflight versions <bundle-id>
# Full status for one build
ascelerate testflight status <bundle-id> --build 123
builds lists each build's processing state, internal and external testing states, and expiry date. status adds the auto-notify setting and the beta review state for a single build. Both accept --json for machine-readable output (conventions).
# Expire a build so testers can no longer install it
ascelerate testflight expire <bundle-id> --build 123
# Notify testers that a build is available
ascelerate testflight notify <bundle-id>
# Toggle automatic notification for a build
ascelerate testflight auto-notify <bundle-id> --enabled false
What to Test
Test notes are stored per build and per locale:
ascelerate testflight whats-new view <bundle-id>
# One locale, or all existing locales when --locale is omitted
ascelerate testflight whats-new set <bundle-id> --text "Try the new map filters" --locale en-US
ascelerate testflight whats-new set <bundle-id> --text "Try the new map filters"
# Round-trip through JSON
ascelerate testflight whats-new export <bundle-id> --output notes.json
ascelerate testflight whats-new import <bundle-id> --file notes.json
The JSON format follows the other localization commands:
{
"en-US": { "whatsNew": "Try the new map filters" },
"de-DE": { "whatsNew": "Testen Sie die neuen Kartenfilter" }
}
Beta review
External testing requires a beta review for each build:
ascelerate testflight submit <bundle-id> --build 123
ascelerate testflight status <bundle-id> --build 123
Beta app information and review details are app-level:
# Beta app description and feedback email, per locale
ascelerate testflight app-info view <bundle-id>
ascelerate testflight app-info update <bundle-id> --locale en-US --feedback-email me@example.com
ascelerate testflight app-info export <bundle-id> --output beta-app-info.json
ascelerate testflight app-info import <bundle-id> --file beta-app-info.json
# Contact and demo account for the beta review team
ascelerate testflight review-info <bundle-id>
ascelerate testflight review-info <bundle-id> --demo-account-name demo@example.com --demo-account-required true
# Custom beta license agreement (--text "" reverts to Apple's standard agreement)
ascelerate testflight eula <bundle-id>
ascelerate testflight eula <bundle-id> --file eula.txt
Tester feedback
Crash and screenshot feedback submitted by testers through TestFlight:
ascelerate testflight feedback crashes list <bundle-id>
ascelerate testflight feedback crashes info <submission-id>
ascelerate testflight feedback crashes log <submission-id> --output crash.log
ascelerate testflight feedback crashes delete <submission-id>
ascelerate testflight feedback screenshots list <bundle-id>
ascelerate testflight feedback screenshots info <submission-id>
ascelerate testflight feedback screenshots download <bundle-id> [submission-id] --output feedback.zip
ascelerate testflight feedback screenshots delete <submission-id>
list accepts --build and --platform filters. info shows the full device context — model, OS version, locale, connection type, battery, free disk space, and the tester's comment. log prints the crash log or saves it with --output. download packs a submission's screenshots and comment into a zip archive; omit the submission ID to pick from a paged list of the app's submissions. Screenshot URLs expire after a few days, so download feedback you want to keep.