startBuildWithCertificateAndPassword method

Future<void> startBuildWithCertificateAndPassword({
  1. required String keyChainName,
  2. required File certFile,
  3. required Secret certPassword,
  4. required Future<void> onStartBuild(),
  5. Secret? globalKeyChainPassword,
})

Implementation

Future<void> startBuildWithCertificateAndPassword({
  required String keyChainName,
  required File certFile,
  required Secret certPassword,
  required Future<void> Function() onStartBuild,
  Secret? globalKeyChainPassword,
}) async {
  ImpaktfullCliEnvironment.requiresMacOs(reason: 'Building iOS/macOS apps');
  final globalKeyChainPasswordSecret = globalKeyChainPassword ??
      ImpaktfullCliEnvironmentVariables.getUnlockKeyChainPassword();

  final defaultKeyChain = await macOsKeyChainPlugin.getDefaultKeyChain();
  await macOsKeyChainPlugin.createKeyChain(
      keyChainName, globalKeyChainPasswordSecret);

  await ForceQuitListener.catchForceQuit(
    () async {
      await macOsKeyChainPlugin.setDefaultKeyChain(keyChainName);
      // await macOsKeyChainPlugin.unlockKeyChain(keyChainName, globalKeyChainPasswordSecret);
      await macOsKeyChainPlugin.addCertificateToKeyChain(
        keyChainName,
        certFile,
        certPassword,
        accessControlAll: true,
      );
      await onStartBuild();
    },
    cleanup: () async {
      await macOsKeyChainPlugin.setDefaultKeyChain(defaultKeyChain);
      await macOsKeyChainPlugin.removeKeyChain(keyChainName);
    },
  );
}