submitBuildForBetaReview method
Submits an exact build for TestFlight beta review.
Implementation
@override
Future<String> submitBuildForBetaReview(String buildId) async {
final query = Uri(
queryParameters: <String, String>{
'filter[build]': buildId,
'limit': '200',
},
).query;
final existing = (await _collection(
'/v1/betaAppReviewSubmissions?$query',
)).map(_genericResource);
for (final submission in existing) {
final state = BetaReviewState.parse(
submission.attributes['betaReviewState'],
);
switch (state) {
case BetaReviewState.waitingForReview:
case BetaReviewState.inReview:
case BetaReviewState.approved:
return submission.id;
case BetaReviewState.rejected:
throw const SmfError(
'Apple rejected this build for external TestFlight testing. '
'Upload a new build before retrying.',
SmfErrorCode.betaReviewRejected,
);
}
}
final created = _map(
await _request(
'POST',
'/v1/betaAppReviewSubmissions',
body: <String, Object?>{
'data': <String, Object?>{
'type': 'betaAppReviewSubmissions',
'relationships': <String, Object?>{
'build': <String, Object?>{
'data': <String, Object?>{
'type': 'builds',
'id': buildId,
},
},
},
},
},
),
'beta app review submission',
);
return _string(
_map(created['data'], 'beta app review submission.data')['id'],
'beta app review submission.data.id',
);
}