build method
Builds the app for the specified platforms and arguments.
Implementation
Future<int> build({
List<String> androidArgs = const [],
List<String> iosArgs = const [],
Map<String, List<String>>? customBuildArgs,
}) async {
customBuildArgs ??= {};
int exitCode = 0;
if (buildAndroid) customBuildArgs['android'] = androidArgs;
if (buildIOS) customBuildArgs['ios'] = iosArgs;
List<(String, int)> buildResults = [];
for (final entry in customBuildArgs.entries) {
final platform = entry.key;
final args = entry.value;
if (platform == 'android') {
buildResults.add(await _buildAndroid(args: args).then((value) {
if (value == 0) {
logger.logInfo('Android build success.');
} else {
logger.logError('Android build failed.');
}
return (platform, value);
}).catchError((e) {
logger.logError('An error occurred: $e');
return (platform, 1);
}));
} else if (platform == 'ios') {
buildResults.add(await _buildIOS(args: args).then((value) {
if (value == 0) {
logger.logInfo('iOS build success.');
} else {
logger.logError('iOS build failed.');
}
return (platform, value);
}).catchError((e) => (platform, 1)));
} else {
buildResults.add(await _buildCustom(platform, args).then((value) {
if (value == 0) {
logger.logInfo('$platform build success.');
} else {
logger.logError('$platform build failed.');
}
return (platform, value);
}).catchError((e) => (platform, 1)));
}
}
if (publish) {
List<(String, int)> distributionResults = [];
for (var buildResult in buildResults) {
stdout.writeln("Build result ${buildResult.$1} ${buildResult.$2}");
if (buildAndroid &&
buildResult.$1 == "android" &&
buildResult.$2 == 0) {
if (environment.distributionInitResult!.git) {
await publisher.buildAndroidDocs();
}
distributionResults.add(await publisher
.distributeAndroid()
.then((value) => (buildResult.$1, value))
.catchError((e) => (buildResult.$1, 1)));
}
if (buildIOS && buildResult.$1 == "ios" && buildResult.$2 == 0) {
distributionResults.add(await publisher
.distributeIOS()
.then((value) => (buildResult.$1, value))
.catchError((e) => (buildResult.$1, 1)));
}
}
if (distributionResults.isNotEmpty) {
for (var result in distributionResults) {
if (result.$2 != 0) {
logger.logError('Distribution failed for ${result.$1}.');
exitCode = 1;
} else {
logger.logSuccess(
'Distribution completed successfully for ${result.$1}.');
}
}
} else {
logger.logInfo('No distribution tasks to execute.');
}
}
exit(exitCode);
}