buildIPA function

Future<void> buildIPA(
  1. dynamic releaseType
)

Implementation

Future<void> buildIPA(releaseType) async {
  double ticks = 0.0;
  bool isGitIgnoreExists = await File('.gitignore').exists();

  if (isGitIgnoreExists) {
    var gitIgnoreFile = await File('.gitignore').readAsString();

    if (!gitIgnoreFile.contains('Payload')) {
      await File('.gitignore').writeAsString('$gitIgnoreFile\nPayload');
    }

    if (!gitIgnoreFile.contains('Runner.ipa')) {
      await File('.gitignore').writeAsString('$gitIgnoreFile\nRunner.ipa');
    }
  }

  if (await Directory('Payload').exists()) {
    await Directory('Payload').delete(recursive: true);
  }
  await Directory('Payload').create();

  print(info('Info: Building $releaseType IPA... 🔨'));

  var timer = Timer.periodic(Duration(milliseconds: 100), (timer) {
    ticks += 0.1;
    stdout.write(
        '\rBuilding IPA... \x1B[90m(${ticks.toStringAsFixed(1)}s)\x1B[0m\r');
  });

  var process =
      await Process.start('flutter', ['build', 'ios', '--$releaseType']);

  process.stdout.transform(utf8.decoder).listen((data) {
    print(data);
  });

  process.stderr.transform(utf8.decoder).listen((data) {
    print(error('Error: $data'));
  });

  var exitCode = await process.exitCode;
  if (exitCode != 0) {
    throw error('Error: Command failed with exit code $exitCode');
  }

  var process2 = await Process.start(
      'cp', ['-r', 'build/ios/iphoneos/Runner.app', 'Payload/Runner.app']);

  process2.stdout.transform(utf8.decoder).listen((data) {
    print(data);
  });

  process2.stderr.transform(utf8.decoder).listen((data) {
    print(error('Error: $data'));
  });

  var exitCode2 = await process2.exitCode;

  if (exitCode2 != 0) {
    throw error('Error: Command failed with exit code $exitCode2');
  }

  var process3 = await Process.start('zip', ['-vr', 'Runner.ipa', 'Payload']);

  process3.stdout.transform(utf8.decoder).listen((data) {
    print(data);
  });

  process3.stderr.transform(utf8.decoder).listen((data) {
    print(error('Error: $data'));
  });

  var exitCode3 = await process3.exitCode;

  if (exitCode3 != 0) {
    throw error('Error: Command failed with exit code $exitCode3');
  }

  timer.cancel();
  stdout.write(
      '\rBuilding IPA Done \x1B[90m(${ticks.toStringAsFixed(1)}s)\x1B[0m\n');

  print(info('Info: IPA Build Completed Successfully'));
}