ExternalBuildState enum

This package's vocabulary for Apple's externalBuildState.

A build's processing state and its external state answer different questions, and conflating them is the defect this vocabulary was added for: a consumer showed one TestFlight number per platform, so a build that had merely finished processing rendered identically to one external testers actually had. ProcessingState.valid means Apple finished ingesting the binary. This says who can install it.

The members are what this package names, not what Apple has — see ProcessingState, whose argument this follows exactly. AppStoreBuildEntry.externalBuildStateRaw carries Apple's own word.

Inheritance
Available extensions
Annotations
  • @JsonEnum.new(valueField: 'wire')

Values

processing → const ExternalBuildState

Apple is still processing the upload, so no audience has it yet.

const ExternalBuildState('processing', 'PROCESSING')
processingException → const ExternalBuildState

Processing ended in an error. Terminal.

const ExternalBuildState('processingException', 'PROCESSING_EXCEPTION')
missingExportCompliance → const ExternalBuildState

The build cannot be submitted until export compliance is answered.

const ExternalBuildState('missingExportCompliance', 'MISSING_EXPORT_COMPLIANCE')
inExportComplianceReview → const ExternalBuildState

Apple is reviewing the export compliance answer.

const ExternalBuildState('inExportComplianceReview', 'IN_EXPORT_COMPLIANCE_REVIEW')
readyForBetaSubmission → const ExternalBuildState

Processed, and never submitted for beta review. The state a build sits in after an upload that was not followed by a beta release — which is the ordinary state of the newest build most of the time, and the one most easily mistaken for "the testers have it".

const ExternalBuildState('readyForBetaSubmission', 'READY_FOR_BETA_SUBMISSION')
waitingForBetaReview → const ExternalBuildState

Submitted, and Apple has not started the review.

const ExternalBuildState('waitingForBetaReview', 'WAITING_FOR_BETA_REVIEW')
inBetaReview → const ExternalBuildState

Apple is reviewing it now.

const ExternalBuildState('inBetaReview', 'IN_BETA_REVIEW')
betaRejected → const ExternalBuildState

Apple refused the build for external testing. Terminal: the API never carries the reason, which arrives by e-mail and in App Store Connect.

const ExternalBuildState('betaRejected', 'BETA_REJECTED')
betaApproved → const ExternalBuildState

Review passed. Not the same as inBetaTesting — approval is Apple's verdict, delivery is the group assignment.

const ExternalBuildState('betaApproved', 'BETA_APPROVED')
readyForBetaTesting → const ExternalBuildState

Apple reports the build ready to give to external testers.

const ExternalBuildState('readyForBetaTesting', 'READY_FOR_BETA_TESTING')
inBetaTesting → const ExternalBuildState

Beta review has cleared and Apple describes the build as in testing.

Not sufficient on its own, and this used to say it was. It read the one state that answers yes, which contradicted AppStoreBuildEntry.inExternalTesting once that moved to two facts: delivery is this state or betaApproved or readyForBetaTesting, and an attached external group. A state says Apple would allow it; an attachment says somebody asked for it. Read that field rather than comparing against this member.

It is also the state Apple did not once use across 123 builds measured 2026-09-14 — betaApproved is the terminal one after review — so a predicate written against this member alone is a constant false, which is the defect inExternalTesting was changed to fix.

const ExternalBuildState('inBetaTesting', 'IN_BETA_TESTING')
expired → const ExternalBuildState

The build's ninety days are up.

const ExternalBuildState('expired', 'EXPIRED')
unknown → const ExternalBuildState

Apple sent a state this version does not name. What Apple said is in AppStoreBuildEntry.externalBuildStateRaw. See ProcessingState.unknown.

const ExternalBuildState('unknown', null)

Properties

appleValue String?
Apple's spelling, or null for unknown, which Apple has no word for.
final
hashCode int
The hash code for this object.
no setterinherited
index int
A numeric identifier for the enumerated value.
no setterinherited
name String

Available on Enum, provided by the EnumName extension

The name of the enum value.
no setter
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
wire String
This package's spelling, and what the document carries.
final

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited

Static Methods

read(String? appleValue) ExternalBuildState?
Apple's appleValue read as a member: unknown for a value this version does not name, null when Apple sent nothing. See ProcessingState.read, which says why reading to a member first is what makes the branches exhaustive.

Constants

values → const List<ExternalBuildState>
A constant List of the values in this enum, in order of their declaration.