我试图将我们的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"
)
5条答案
按热度按时间9rygscc11#
也许有点晚,但我认为值得一提的是,有一个方便的fastlane action setup_ci用于此目的:
说明
设置钥匙串并匹配以使用CI
只需将其添加到Fastfile的顶部,或者如果您使用CI,则将其添加到特定通道中。
快速文件通道示例
另外,请确保您的
match
存储中的配置文件和证书是最新的,并且您为发布版本配置了手动签名,否则match
可能会尝试使用错误的签名身份为您的应用签名,从而导致失败;)rt4zxlrg2#
我不能使用Fastlane,因为我试图使用钥匙链与Java 14的新jpackage工具在GitHub Actions中一起构建和代码签名Java应用程序原生捆绑包,所以我很高兴看到Yakuhzi的答案。它几乎对我有用,但有几个错误我必须解决,这是非常困难的,因为没有错误消息:我的workflow只是挂在jpackage命令上,而我假设build Mac虚拟机无形地提示在虚拟帧缓冲区中解锁密钥链。
下面是对我有用的变体。前三步很好(我将签名证书及其解密密码作为从Github Action secrets提取的环境变量传递给脚本,并使用相同的密码创建构建密钥链):
但是,尝试运行他的第四行在这一点上会失败,这个错误:
最后,在研究了
security set-key-partition-list
的文档之后,我意识到第一个问题是-k
参数需要keychain密码,而在他的例子中,密码必须是actions
!所以我的下一步是修复第4行,使其看起来像这样:我还是得到了错误,虽然,所以我研究了一些文档,并在一个备用的Mac mini上试验了该命令,在登录密钥链中没有我的签名身份。最终我发现该命令试图对密钥链中尚不存在的签名密钥采取行动。所以我将导入我的签名密钥的步骤移到该行之前,它开始工作了。这里是它工作后的完整部分,你可以看到整个script on GitHub:
bnl4lu3b3#
这是一个可以接受的答案,但我想了解证书和私钥是如何进入密钥链的。
试试这个:
这将创建密钥链,然后当你想使用它时,你可以再次提供
chosen_password
,无论你有它。a2mppw5e4#
您可以尝试创建一个新的钥匙串并将其设置为默认值。
fsi0uk1n5#
创建一个fastlane match可以使用的临时密钥链绝对是正确的答案。在我的例子中,我实际上有我的
Fastfile
设置来创建和使用临时密钥链,但是当通过托管和自托管的GitHub Actions运行器运行时,我的构建会成功,但是当通过自托管的运行器运行时会失败。对我来说,关键是在创建临时密钥链时将
default_keychain
设置为true
。在这样做之后,在我的CI系统上停止构建的密码提示不再是一个问题。