13

我正在尝试将我们的 iOS CI 转移到 github 操作,但我遇到了一些构建问题。这些问题(fastlane 只是在健身房运行时挂起)似乎在使用 match 时出现。

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

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

4 回答 4

15

也许有点晚了,但我认为值得一提的是,为此目的有一个方便的 fastlane 操作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可能会尝试使用错误的签名身份对您的应用程序进行签名,这将失败;)

于 2020-05-12T17:46:37.167 回答
6

我不能使用 Fastlane,因为我正在尝试使用钥匙串与 GitHub Actions 中的 Java 14 的新jpackage工具一起构建 Java 应用程序本机包并对其进行代码签名,所以我很高兴看到 Yakuhzi 的回答。它几乎对我有用,但是我必须解决一些错误,这非常困难,因为没有错误消息:我的工作流程只是挂在jpackage 命令上,而我假设构建 Mac 虚拟机不可见地提示要在虚拟帧缓冲区中解锁的钥匙串。

这是对我有用的变化。前三个步骤很好(我我的签名证书及其解密密码作为从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

但是此时尝试运行他的第四行会因以下错误而失败:

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 上尝试了该命令。最终,我发现该命令试图对钥匙串中尚不存在的签名密钥执行操作。因此,我将导入签名密钥的步骤移到了该行之前,它开始起作用。这是运行后的完整部分,您可以在 GitHub 上查看整个脚本

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
于 2020-01-10T05:20:18.247 回答
4

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

试试这个:

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

这将创建钥匙串,然后当您想使用它时,您可以再次提供chosen_password您拥有的钥匙串。可能是一个GITHUB_X环境变量?

于 2019-10-02T01:49:59.137 回答
2

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

- 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
于 2019-09-26T23:00:05.493 回答