You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions macOS Runner证书安装默认钥匙链设置失败求助

macOS Runner 证书签名权限错误解决指南

问题原因

在GitHub Actions的macOS-12/macos-13 runner上,以root用户(UID=0)执行security default-keychain -s命令时,由于/Users/runner目录归属runner用户,root无修改权限,导致出现以下错误:

Will not set default: UID=0 does not own directory /Users/runner
security: SecKeychainSetDefault: Write permissions error.
Error: Process completed with exit code 1.

解决方案

方案1:切换到runner用户执行钥匙链操作

利用runner用户对/Users/runner目录的所有权,切换用户后完成钥匙链配置:

  1. 创建自定义钥匙链时,指定路径到runner用户的Keychains目录下
  2. 使用su -l runner -c包裹钥匙链相关命令,以runner身份执行

示例GitHub Actions步骤:

- name: 配置签名用钥匙链
  run: |
    # 创建自定义钥匙链
    KEYCHAIN_PATH="/Users/runner/Library/Keychains/my-build.keychain-db"
    security create-keychain -p ${{ secrets.KEYCHAIN_PASS }} $KEYCHAIN_PATH
    
    # 切换到runner用户设置默认钥匙链
    su -l runner -c "security default-keychain -s $KEYCHAIN_PATH"
    
    # 设置钥匙链超时,防止自动锁定
    security set-keychain-settings -lut 3600 $KEYCHAIN_PATH
    
    # 导入Developer ID证书并授权签名工具访问
    security import ./certs/developer_id_app.p12 -k $KEYCHAIN_PATH -P ${{ secrets.CERT_PASS }} -T /usr/bin/codesign
    security import ./certs/developer_id_installer.p12 -k $KEYCHAIN_PATH -P ${{ secrets.CERT_PASS }} -T /usr/bin/productbuild
    
    # 设置证书分区权限,避免签名时权限报错
    security set-key-partition-list -S apple-tool:,apple: -s -k ${{ secrets.KEYCHAIN_PASS }} $KEYCHAIN_PATH

方案2:签名时直接指定钥匙链(无需修改默认)

跳过设置默认钥匙链的步骤,在代码签名命令中通过--keychain参数直接指定自定义钥匙链,绕开权限限制。

示例签名命令:

- name: 签名应用包
  run: |
    KEYCHAIN_PATH="/Users/runner/Library/Keychains/my-build.keychain-db"
    # 签名应用
    codesign --force --deep --sign "${{ secrets.DEVELOPER_ID_APP_NAME }}" --keychain $KEYCHAIN_PATH ./build/MyApp.app
    # 签名安装包
    productbuild --component ./build/MyApp.app /Applications --sign "${{ secrets.DEVELOPER_ID_INSTALLER_NAME }}" --keychain $KEYCHAIN_PATH ./build/MyApp.pkg

注意事项

  • 钥匙链密码、证书密码需存储在GitHub Secrets中,禁止硬编码在Workflow文件内
  • 证书文件建议通过加密方式存储,或直接从Secrets中导出,避免明文泄露
  • 确保导入证书时,通过-T参数授权codesign、productbuild等工具访问证书,防止签名时出现权限拒绝

内容的提问来源于stack exchange,提问作者Nikhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:22:52