createCertificate method
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);
}