Github Action MacOS钥匙串访问

时间:2019-09-26 13:54:01

标签: ios continuous-integration fastlane github-actions

我正在尝试将我们的iOS CI移至github操作,但是遇到一些构建问题。在使用比赛时,似乎会出现这些问题(快车道在健身房运行时会挂起)。

这是让我认为与钥匙串相关的日志

WARN [2019-09-26 13:46:14.52]: Could not configure imported keychain item (certificate) to prevent UI permission popup when code signing
Check if you supplied the correct `keychain_password` for keychain: `/Users/runner/Library/Keychains/login.keychain-db`
security: SecKeychainItemSetAccessWithPassword: The user name or passphrase you entered is not correct.

文档说sudo是无密码的,因此我认为钥匙串也是如此。我似乎错了,但我在文档中找不到任何内容。任何帮助将不胜感激。

编辑

Lyndsey Ferguson下面的评论大部分是解决方案。它们是使用create_keychain的方法,然后匹配我能够仅指定钥匙串及其密码,因此我能够避免import_certificate

编辑2

这是我在快车道上要解决的问题

create_keychain(
        name: "actiontest_keychain",
        password: "meow",
        default_keychain: true,
        unlock: true,
        timeout: 3600,
        lock_when_sleeps: false
    )

    match(
        type: "appstore",
        readonly: is_ci,
        keychain_name: "actiontest_keychain",
        keychain_password: "meow"
    )

4 个答案:

答案 0 :(得分:3)

也许已经有点晚了,但是我认为值得一提的是为此目的有一个方便的快速通道动作setup_ci

说明

设置钥匙串并匹配以与CI配合使用

  • 创建一个用于匹配的新临时钥匙串
  • 将匹配项切换为只读模式,以不在CI上创建新的配置文件/证书
  • 将日志和测试结果路径设置为易于收集

只要使用CI,只需将其添加到Fastfile的顶部或特定通道内即可。

快速文件通道示例

lane :build_release do
    setup_ci

    sync_code_signing(  
      type: "appstore",
      readonly: is_ci
    )

    build_app
end

还请确保match存储中的配置文件证书是最新的,并且已配置手动签名发布版本。否则,match可能会尝试使用错误的签名身份对您的应用进行签名,这会失败;)

答案 1 :(得分:2)

我无法使用Fastlane,因为我试图使用钥匙串与GitHub Actions中的Java 14的新jpackage工具配合使用来构建Java程序本机包并对其进行代码签名,因此我很高兴看到Yakuhzi的回答。 几乎对我有用,但是我不得不解决一些错误,这非常困难,因为没有错误消息:我的workflow刚刚挂在{{3 }},同时我假设Mac版虚拟机在不可见的情况下提示将钥匙串在虚拟帧缓冲区中解锁。

以下是对我有用的版本。前三个步骤很好(我是jpackage command的签名证书及其解密密码,是从passing中提取的环境变量,并使用相同的密码来创建构建钥匙串):

security create-keychain -p "$IDENTITY_PASSPHRASE" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$IDENTITY_PASSPHRASE" build.keychain

但是此时尝试运行第四行将失败,并显示以下错误:

security: SecItemCopyMatching: The specified item could not be found in the keychain.

最终,在研究了security set-key-partition-list的文档后,我意识到第一个问题是-k参数需要钥匙串密码,在他的情况下必须为actions!所以我的下一步是修复第4行,使其看起来像这样:

security set-key-partition-list -S apple-tool:,apple: -s -k "$IDENTITY_PASSPHRASE" build.keychain

尽管我仍然遇到错误,所以我进一步研究了文档,并在备用Mac mini上尝试了该命令,该Mac mini在登录钥匙串中没有我的签名身份。最终,我发现该命令试图对钥匙串中尚不存在的签名钥匙采取措施。因此,我移动了导入签名密钥的步骤,此行开始起作用。这是完整的部分,一旦可以使用,您就可以看到整个Github Action secrets

security create-keychain -p "$IDENTITY_PASSPHRASE" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$IDENTITY_PASSPHRASE" build.keychain

echo "$IDENTITY_P12_B64" > DS_ID_App.p12.txt
openssl base64 -d -in DS_ID_App.p12.txt -out DS_ID_App.p12
security import DS_ID_App.p12 -A -P "$IDENTITY_PASSPHRASE"

security set-key-partition-list -S apple-tool:,apple: -s -k "$IDENTITY_PASSPHRASE" build.keychain

答案 2 :(得分:1)

您可以尝试创建一个新的钥匙串并将其设置为默认钥匙串。

- name: Set up keychain
    run: |
      security create-keychain -p <password> build.keychain
      security default-keychain -s build.keychain
      security unlock-keychain -p <password> build.keychain
      security set-key-partition-list -S apple-tool:,apple: -s -k actions build.keychain

答案 3 :(得分:1)

这是可以接受的答案,但我想了解证书和私钥如何进入钥匙串。

尝试一下:

- name: Set up keychain
    run: fastlane run create_keychain name:name_of_keychain password:chosen_password 

这将创建钥匙串,然后在您要使用它时,可以根据需要再次提供chosen_password。可能是GITHUB_X环境变量?