ios Github action macos keychain访问

kgsdhlau  于 2023-03-24  发布在  iOS
关注(0)|答案(5)|浏览(221)

我试图将我们的iOS CI移动到github操作,但我遇到了一些构建问题。这些问题(fastlane在gym运行时挂起)似乎在使用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然后匹配的方法,我可以只指定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"
    )
9rygscc1

9rygscc11#

也许有点晚,但我认为值得一提的是,有一个方便的fastlane action setup_ci用于此目的:

说明

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

  • 创建一个新的临时密钥链以与match一起使用
  • 开关与只读模式匹配,不会在CI上创建新的配置文件/证书
  • 设置日志和测试结果路径以便于收集

只需将其添加到Fastfile的顶部,或者如果您使用CI,则将其添加到特定通道中。

快速文件通道示例

lane :build_release do
    setup_ci

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

    build_app
end

另外,请确保您的match存储中的配置文件证书是最新的,并且您为发布版本配置了手动签名,否则match可能会尝试使用错误的签名身份为您的应用签名,从而导致失败;)

rt4zxlrg

rt4zxlrg2#

我不能使用Fastlane,因为我试图使用钥匙链与Java 14的新jpackage工具在GitHub Actions中一起构建和代码签名Java应用程序原生捆绑包,所以我很高兴看到Yakuhzi的答案。它几乎对我有用,但有几个错误我必须解决,这是非常困难的,因为没有错误消息:我的workflow只是挂在jpackage命令上,而我假设build 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参数需要keychain密码,而在他的例子中,密码必须是actions!所以我的下一步是修复第4行,使其看起来像这样:

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

我还是得到了错误,虽然,所以我研究了一些文档,并在一个备用的Mac mini上试验了该命令,在登录密钥链中没有我的签名身份。最终我发现该命令试图对密钥链中尚不存在的签名密钥采取行动。所以我将导入我的签名密钥的步骤移到该行之前,它开始工作了。这里是它工作后的完整部分,你可以看到整个script on 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
bnl4lu3b

bnl4lu3b3#

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

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

这将创建密钥链,然后当你想使用它时,你可以再次提供chosen_password,无论你有它。

a2mppw5e

a2mppw5e4#

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

- 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
fsi0uk1n

fsi0uk1n5#

创建一个fastlane match可以使用的临时密钥链绝对是正确的答案。在我的例子中,我实际上有我的Fastfile设置来创建和使用临时密钥链,但是当通过托管和自托管的GitHub Actions运行器运行时,我的构建会成功,但是当通过自托管的运行器运行时会失败。
对我来说,关键是在创建临时密钥链时将default_keychain设置为true。在这样做之后,在我的CI系统上停止构建的密码提示不再是一个问题。

相关问题