waitForBuild method
Future<ApiResourceDto<BuildAttributesDto> >
waitForBuild({
- required String appId,
- required String version,
- required String buildNumber,
- required int timeoutMinutes,
- Duration interval = const Duration(seconds: 30),
override
Waits for an exact uploaded build to finish App Store processing.
Implementation
@override
Future<ApiResourceDto<BuildAttributesDto>> waitForBuild({
required String appId,
required String version,
required String buildNumber,
required int timeoutMinutes,
Duration interval = const Duration(seconds: 30),
}) async {
final deadline = _currentTime().add(Duration(minutes: timeoutMinutes));
while (_currentTime().isBefore(deadline)) {
final builds = await buildsForVersion(appId: appId, version: version);
final build = builds
.where(
(item) => item.attributes.version == buildNumber,
)
.firstOrNull;
if (build case final build?) {
if (build.attributes.processingState == BuildProcessingState.valid) {
return build;
}
if (build.attributes.processingState case BuildProcessingState.failed || BuildProcessingState.invalid) {
throw SmfError(
'Apple marked $version ($buildNumber) as '
'${build.attributes.processingState.value}.',
SmfErrorCode.buildInvalid,
);
}
}
if (interval > Duration.zero) await _delay(interval);
}
throw SmfError(
'Timed out waiting for $version ($buildNumber) to finish processing.',
SmfErrorCode.buildTimeout,
);
}