GitHub 操作:productsign 挂起
GitHub Actions: productsign hangs
我对 GitHub 操作有疑问。当我打电话给 productsign
时,作业就挂起了。在互联网上搜索时,该作业似乎试图向用户询问密码,但我没有从日志中收到任何错误或反馈。这项工作永远挂起。当 运行 在我自己的计算机上时,一切都按预期工作并且 .pkg 已签名。
我的工作流程步骤如下
- name: Build & Sign Installer
run: |
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
(cd fastlane && ./decrypt_secret.sh)
carthage update --use-xcframeworks --platform macOS
bundle exec fastlane set_release_version
bundle exec fastlane mac install_certificates
bundle exec fastlane mac build_main_app
bundle exec fastlane mac build_updater
bundle exec fastlane mac build_installer
(cd installer && productsign --sign <identity> app-1.0.0.pkg app-1.0.0-signed.pkg)
我尝试了很多不同的解决方案,但没有任何效果
security import ${P12_FILE} -k ${KEYCHAIN_PATH} -P ${P12_PASSWORD} -A
security import ${P12_FILE} -k ${KEYCHAIN_PATH} -P ${P12_PASSWORD} -T /usr/bin/productsign
- 使用
security set-key-partition-list
设置分区列表
- 创建新钥匙串/解锁钥匙串
- 切换为在
productbuild
上使用 --sign 参数(添加 --sign 时也会挂起)
- 完全没有
fastlane match
手动导入证书
- 我认为在 google
上找到了任何其他解决方案
有什么想法吗?这是 GitHub 操作中的错误吗?
好的,我们终于弄明白了。解决方案是创建 tmp 钥匙串,将其设置为默认值并配置一些属性。这确保 codesign
和 productsign
可以在不提示输入密码的情况下访问它。
设置 Tmp 钥匙串
# default again user login keychain
security list-keychains -d user -s login.keychain
# Create temp keychain
security create-keychain -p "$MY_KEYCHAIN_PASSWORD" "$MY_KEYCHAIN"
# Append temp keychain to the user domain
security list-keychains -d user -s "$MY_KEYCHAIN" $(security list-keychains -d user | sed s/\"//g)
# Remove relock timeout
security set-keychain-settings "$MY_KEYCHAIN"
# Unlock keychain
security unlock-keychain -p "$MY_KEYCHAIN_PASSWORD" "$MY_KEYCHAIN"
# Add certificate to keychain
security import $CERT -k "$MY_KEYCHAIN" -P "$CERT_PASSWORD" -A -T "/usr/bin/codesign" -T "/usr/bin/productsign"
# Enable codesigning from a non user interactive shell
security set-key-partition-list -S apple-tool:,apple:, -s -k $MY_KEYCHAIN_PASSWORD -D "${IDENTITY_CERTIFICATE}" -t private $MY_KEYCHAIN
清理钥匙串
# Delete temporary keychain
security delete-keychain "$MY_KEYCHAIN"
# default again user login keychain
security list-keychains -d user -s login.keychain
我对 GitHub 操作有疑问。当我打电话给 productsign
时,作业就挂起了。在互联网上搜索时,该作业似乎试图向用户询问密码,但我没有从日志中收到任何错误或反馈。这项工作永远挂起。当 运行 在我自己的计算机上时,一切都按预期工作并且 .pkg 已签名。
我的工作流程步骤如下
- name: Build & Sign Installer
run: |
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
(cd fastlane && ./decrypt_secret.sh)
carthage update --use-xcframeworks --platform macOS
bundle exec fastlane set_release_version
bundle exec fastlane mac install_certificates
bundle exec fastlane mac build_main_app
bundle exec fastlane mac build_updater
bundle exec fastlane mac build_installer
(cd installer && productsign --sign <identity> app-1.0.0.pkg app-1.0.0-signed.pkg)
我尝试了很多不同的解决方案,但没有任何效果
security import ${P12_FILE} -k ${KEYCHAIN_PATH} -P ${P12_PASSWORD} -A
security import ${P12_FILE} -k ${KEYCHAIN_PATH} -P ${P12_PASSWORD} -T /usr/bin/productsign
- 使用
security set-key-partition-list
设置分区列表
- 创建新钥匙串/解锁钥匙串
- 切换为在
productbuild
上使用 --sign 参数(添加 --sign 时也会挂起) - 完全没有
fastlane match
手动导入证书 - 我认为在 google 上找到了任何其他解决方案
有什么想法吗?这是 GitHub 操作中的错误吗?
好的,我们终于弄明白了。解决方案是创建 tmp 钥匙串,将其设置为默认值并配置一些属性。这确保 codesign
和 productsign
可以在不提示输入密码的情况下访问它。
设置 Tmp 钥匙串
# default again user login keychain
security list-keychains -d user -s login.keychain
# Create temp keychain
security create-keychain -p "$MY_KEYCHAIN_PASSWORD" "$MY_KEYCHAIN"
# Append temp keychain to the user domain
security list-keychains -d user -s "$MY_KEYCHAIN" $(security list-keychains -d user | sed s/\"//g)
# Remove relock timeout
security set-keychain-settings "$MY_KEYCHAIN"
# Unlock keychain
security unlock-keychain -p "$MY_KEYCHAIN_PASSWORD" "$MY_KEYCHAIN"
# Add certificate to keychain
security import $CERT -k "$MY_KEYCHAIN" -P "$CERT_PASSWORD" -A -T "/usr/bin/codesign" -T "/usr/bin/productsign"
# Enable codesigning from a non user interactive shell
security set-key-partition-list -S apple-tool:,apple:, -s -k $MY_KEYCHAIN_PASSWORD -D "${IDENTITY_CERTIFICATE}" -t private $MY_KEYCHAIN
清理钥匙串
# Delete temporary keychain
security delete-keychain "$MY_KEYCHAIN"
# default again user login keychain
security list-keychains -d user -s login.keychain