--json.
The whole flow
Building and uploading
Ask which version first
needsCreate: true means every version Apple holds is already live, so there
is nothing for a build to attach to. Creating a version record writes to your
real account, so it only happens when you ask:
Check signing before you wait
doctor reports signing blockers in a second: a missing or expired
provisioning profile, a profile that does not cover the bundle ID or belongs
to another team, a certificate whose private key is not on this Mac. The same
checks run automatically before a manual-signing archive, so a blocker stops
the build before xcodebuild starts rather than ten minutes in.
Groups
A group decides who receives which builds.--group accepts a name or an ID, everywhere it appears.
Internal and external
groups create is the one create command that is not safe to retry: Apple
allows two groups with the same name, so a second run makes a second group
rather than returning the first.
Deleting
Deleting is refused while the group still holds testers:Testers
Moving testers between groups
testers remove takes somebody off the app, revoking every build in every
group they are in. groups remove-testers takes them out of one group and
leaves the rest. They are different actions.What testers list returns
It is a join, not a plain listing: who each tester is, which groups they are
in, and what they have done with the app.
- A count Apple did not report is
null, not0. “No crashes” and “Apple did not say” are different answers.devicesis always null, because Apple reports no device count on this endpoint. - A public-link tester has no
email. Apple never collects one. It also means they cannot be invited or added to a group by address.
Internal groups refuse non-members
An internal group only accepts App Store Connect team members, and nothing can check that in advance. Adding a batch therefore sends one request per address and reports Apple’s refusal per email:Getting the build to testers
VALID) can be distributed. Apple
accepts a request for an unprocessed build and then silently does nothing, so
FlowDeck refuses it rather than reporting a success that did not happen.
Beta App Review
An external group receives nothing until review passes. Write the tester notes first, because Apple gates the submission on them:--notify sets Apple’s “Automatically notify testers” so testers are emailed
when the build lands.
Internal groups never wait for review. If people need the build today and
review has not passed, an internal group is the answer.
Expiring a build
Idempotency
Anything in the second column may already have taken effect when it failed or
timed out. Check with the matching
list or status command before running
it again.
Errors
Every failure carries a stablecode, one sentence saying what happened, and
a hint saying what to do:
