TJ *_*lis 8 continuous-integration ios fastlane github-actions
我正在尝试将我们的 iOS CI 转移到 github 操作,但我遇到了一些构建问题。使用 match 时似乎会出现这些问题(fastlane 在健身房运行时挂起)。
这是让我认为它与钥匙串相关的日志
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.
Run Code Online (Sandbox Code Playgroud)
文档说 sudo 是无密码的,所以我认为钥匙串也是如此。我似乎错了,但我在文档中找不到任何内容。任何帮助将不胜感激。
编辑
Lyndsey Ferguson 在下面的评论主要是解决方案。他们是使用 create_keychain 然后匹配的方法我能够只指定钥匙串和它的密码所以我能够避免 import_certificate
编辑 2
这是我在 fastlane 中所做的事情来解决这个问题
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"
)
Run Code Online (Sandbox Code Playgroud)
也许有点晚了,但我认为值得一提的是,为此目的有一个方便的 fastlane action setup_ci:
描述
设置钥匙串并匹配以与 CI 一起使用
- 创建一个新的临时钥匙串以用于匹配
- 切换到只读模式以不在 CI 上创建新的配置文件/证书
- 设置日志和测试结果路径以便于收集
如果您使用 CI,只需将其添加到 Fastfile 的顶部或特定通道内。
Fastfile 通道示例
lane :build_release do
setup_ci
sync_code_signing(
type: "appstore",
readonly: is_ci
)
build_app
end
Run Code Online (Sandbox Code Playgroud)
还要确保您的存储中的配置文件和证书match是最新的,并且您为发布版本配置了手动签名。否则match可能会尝试使用错误的签名身份对您的应用程序进行签名,这将失败;)
我无法使用 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
Run Code Online (Sandbox Code Playgroud)
但是此时尝试运行他的第四行会失败并显示以下错误:
security: SecItemCopyMatching: The specified item could not be found in the keychain.
Run Code Online (Sandbox Code Playgroud)
最终,我在研究文档后security set-key-partition-list意识到第一个问题是-k参数需要钥匙串密码,这actions在他的情况下一定是!因此,我的下一步是将第 4 行修复为如下所示:
security set-key-partition-list -S apple-tool:,apple: -s -k "$IDENTITY_PASSPHRASE" build.keychain
Run Code Online (Sandbox Code Playgroud)
尽管如此,我仍然收到错误消息,因此我进一步研究了文档,并在登录钥匙串中没有我的签名身份的备用 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
Run Code Online (Sandbox Code Playgroud)
这是一个可以接受的答案,但我想了解证书和私钥如何进入钥匙串。
尝试这个:
- name: Set up keychain
run: fastlane run create_keychain name:name_of_keychain password:chosen_password
Run Code Online (Sandbox Code Playgroud)
这将创建钥匙串,然后当您想要使用它时,您可以再次提供chosen_password您拥有的钥匙串。可能是GITHUB_X环境变量?
| 归档时间: |
|
| 查看次数: |
4374 次 |
| 最近记录: |