createCertificate method

Future<(String, String)> createCertificate({
  1. required bool isDevelopment,
  2. String? apiKeyJsonPath,
  3. bool force = false,
})

Implementation

Future<(String, String)> createCertificate({
  required bool isDevelopment,
  String? apiKeyJsonPath,
  bool force = false,
}) async {
  final iosDir = Directory(_iosDirectory);
  final entities = await iosDir.list().toList();

  final apiKeyJsonFile =
      File(apiKeyJsonPath ?? '$_iosDirectory/$apiKeyJsonFileName');
  if (!await apiKeyJsonFile.exists()) {
    throw Exception('API Key JSON file not found at ${apiKeyJsonFile.path}.\n'
        'Please provide one e.g. by calling `prepare` or `publish`.');
  }

  FileSystemEntity? privateKeyFile =
      _getLatestFileByExtension(entities, '.p12');
  FileSystemEntity? certFile = _getLatestFileByExtension(entities, '.cer');
  if (force || privateKeyFile == null || certFile == null) {
    // Download and install a new certificate
    await runFastlaneProcess(
      [
        'cert', // get_certificates
        if (isDevelopment) '--development',
        '--force',
        '--api_key_path',
        apiKeyJsonFile.absolute.path,
      ],
      workingDirectory: _iosDirectory,
      printCall: true,
    );

    final entities = await iosDir.list().toList();
    privateKeyFile = _getLatestFileByExtension(entities, '.p12')!;
    certFile = _getLatestFileByExtension(entities, '.cer')!;
  }

  final certType = isDevelopment ? 'Development' : 'Distribution';

  final p12PrivateKeyBase64 =
      base64Encode(await File.fromUri(privateKeyFile.uri).readAsBytes());
  print(
      'Base64 Private Key for $certType (${certType.toLowerCase()}-private-key-base64, exported as IOS_${certType.toUpperCase()}_PRIVATE_KEY):\n');
  print('$p12PrivateKeyBase64\n');

  final certBase64 =
      base64Encode(await File.fromUri(certFile.uri).readAsBytes());
  print(
      'Base64 Certificate for $certType (${certType.toLowerCase()}-cert-base64, exported as IOS_${certType.toUpperCase()}_CERT):\n');
  print('$certBase64\n');

  return (p12PrivateKeyBase64, certBase64);
}