buildIos method

Future<File> buildIos({
  1. String? flavor,
  2. String? mainDartFile = 'lib/main.dart',
  3. FlutterBuildIosExtension extension = FlutterBuildIosExtension.ipa,
  4. bool obfuscate = true,
  5. String? splitDebugInfoPath = '.build/debug-info',
  6. int? buildNr,
})

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;
}