From 71f06efa95543b5d0c9eef2f02de4afa414b7bf9 Mon Sep 17 00:00:00 2001 From: EMRG Evolution Date: Thu, 6 Aug 2026 14:06:29 +0800 Subject: [PATCH] =?UTF-8?q?emrg:=20p12=20=E5=8F=8C=E8=AF=81=E4=B9=A6?= =?UTF-8?q?=E5=AF=B9=E7=A7=B0=E6=A0=A1=E9=AA=8C=20=E2=80=94=20Application?= =?UTF-8?q?=20+=20Installer=20=E7=BC=BA=E4=B8=80=E4=B8=8D=E5=8F=AF?= =?UTF-8?q?=EF=BC=88=E9=98=B2=E6=AD=A2=E5=8F=AA=E5=AF=BC=20Installer=20?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=20.app=20=E6=9C=AA=E7=AD=BE=E5=90=8D?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-release.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 3330ea9e..09847ec4 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -80,18 +80,23 @@ jobs: echo "::error::MACOS_SIGNING_P12_BASE64 未包含可签名私钥(security import 仅导入证书链)。请从 Keychain Access 导出含私钥的 p12(证书右键 → 导出 → 勾选\"包含私钥\"),重新 base64 后更新 GitHub Secret。import 输出:${IMPORT_OUTPUT}" exit 1 fi - # pkg 签名证书存在性校验(v0.2.7 第 7 次构建根因:p12 只有 Developer ID + # 双证书存在性校验(v0.2.7 第 7 次构建根因:p12 只有 Developer ID # Application 证书——签 .app 成功,但 productsign 签 pkg 需要独立的 # Developer ID Installer 证书,缺失报 "An installer signing identity (not # an application signing identity) is required" 的 cryptic 错误)。 - # 两种证书在 developer.apple.com → Certificates 分别创建,导出 p12 时 - # 需同时勾选(或分别导出后合并)。find-certificate 不受 policy 限制。 + # 对称地,若只导出 Installer 而漏掉 Application,则 electron-builder + # codesign .app 会找不到身份(跳过签名 → 公证失败)。因此两种证书 + # 必须同时存在(developer.apple.com → Certificates 分别创建,导出 p12 + # 时用 `security export -t identities` 一并导出全部身份)。 + # find-certificate 不受 policy 限制。 # ⚠️ 必须用输出判空而非退出码:实测 find-certificate 无匹配证书时 # 也返回 exit 0(正反两态验证,#455 教训)。 - if [ -z "$(security find-certificate -c 'Developer ID Installer' -a /tmp/ci.keychain 2>/dev/null)" ]; then - echo "::error::MACOS_SIGNING_P12_BASE64 缺少 Developer ID Installer 证书(pkg 签名必需)。Developer ID Application 只能签 .app,productsign 签 pkg 需要独立的 Developer ID Installer 证书。请在 developer.apple.com → Certificates 创建 Developer ID Installer(与 Application 是两张不同证书),连同私钥一起导出 p12 后更新 GitHub Secret。" - exit 1 - fi + for CERT_NAME in "Developer ID Application" "Developer ID Installer"; do + if [ -z "$(security find-certificate -c "$CERT_NAME" -a /tmp/ci.keychain 2>/dev/null)" ]; then + echo "::error::MACOS_SIGNING_P12_BASE64 缺少 $CERT_NAME 证书(签名必需)。Developer ID Application 用于签 .app(electron-builder codesign),Developer ID Installer 用于签 pkg(productsign),两张证书缺一不可。请在 developer.apple.com → Certificates 分别创建(或确认已创建),用 \`security export -t identities\` 连同私钥一并导出 p12 后更新 GitHub Secret。" + exit 1 + fi + done # set-key-partition-list 与 electron-builder macCodeSign.js 完全一致: # security set-key-partition-list -S apple-tool:,apple: -s -k # -s = Match keys that can sign(必须显式提供才能定位私钥项目);