buildIos method
Implementation
Future<File> buildIos({
String? flavor,
String? mainDartFile = 'lib/main.dart',
FlutterBuildIosExtension extension = FlutterBuildIosExtension.ipa,
bool obfuscate = true,
String? splitDebugInfoPath = '.build/debug-info',
int? buildNr,
}) async {
ImpaktfullCliLogger.setSpinnerPrefix('Flutter Build iOS');
ImpaktfullCliLogger.startSpinner('Building `$flavor`');
final buildDirectory = extension.getBuildDirectory();
if (buildDirectory.existsSync()) {
buildDirectory.deleteSync(recursive: true);
}
await processRunner.runProcess([
if (ImpaktfullCliEnvironment.instance.isFvmProject) ...[
'fvm',
],
'flutter',
'build',
extension.flutterBuildArgument,
'--release',
if (flavor != null) ...[
'--flavor=$flavor',
'--export-options-plist',
'ios/provisioning/export_options/$flavor.plist',
] else ...[
'--export-options-plist',
'ios/provisioning/export_options.plist',
],
if (mainDartFile != null) ...[
'-t',
mainDartFile,
],
if (obfuscate) ...[
'obfuscate',
if (splitDebugInfoPath != null) ...[
'--split-debug-info=$splitDebugInfoPath',
],
],
if (buildNr != null) ...[
'--build-number=$buildNr',
],
]);
final files = buildDirectory.listSync();
final result = files.where((element) =>
path.extension(element.path) == '.${extension.fileExtension}');
if (result.isEmpty) {
throw ImpaktfullCliError(
'After building $flavor for iOS, `${buildDirectory.path}` does not contain an `${extension.fileExtension}` file.');
}
if (result.length > 1) {
throw ImpaktfullCliError(
'After building $flavor for iOS, Multiple .$extension files were found in `${buildDirectory.path}`. Auto selecting the right one is not yet implemented.');
}
final ipaFile = File(result.first.path);
if (!ipaFile.existsSync()) {
throw ImpaktfullCliError(
'After building $flavor for iOS, `${ipaFile.path}` does not exists.');
}
ImpaktfullCliLogger.clearSpinnerPrefix();
return ipaFile;
}