Electron打包Mac App Store应用时签名链构建失败求助
解决Electron打包MAS时的"unable to build chain to self-signed root for signer"错误
针对你遇到的证书链构建失败问题,以下是针对性的排查和修复步骤:
1. 确认证书链的完整性与信任设置
- 打开钥匙串访问,切换到「系统」钥匙串,找到你的
3rd Party Mac Developer Application: name (teamid)证书。右键选择「显示简介」,在「信任」选项卡中,将「使用此证书时」设置为系统默认,不要手动设置为「总是信任」(手动信任会破坏证书链验证逻辑)。 - 检查
Apple Root CA根证书和2023年版的Apple Worldwide Developer Relations Certification Authority证书是否安装在「系统」钥匙串中,且状态为「已信任」。若缺失,直接从Apple开发者平台下载官方版本并安装到系统钥匙串。
2. 核对Provisioning Profile与证书的匹配性
- 用文本编辑器打开你的
MAS_Profile.provisionprofile文件,查找DeveloperCertificates字段,将其中的证书哈希值与钥匙串中对应证书的SHA-1哈希(右键证书→「获取信息」→「SHA-1」字段)对比,确保两者完全一致。 - 确认该Provisioning Profile为Mac App Store分发类型,且绑定的Bundle ID与Electron配置中的
appId完全匹配,无拼写错误。
3. 修正Electron Build配置细节
- 将
build.json中的identity字段替换为证书的完整名称,即错误日志中显示的3rd Party Mac Developer Application: name (teamid),确保字符串完全匹配,不要使用占位符。示例:"identity": "3rd Party Mac Developer Application: Your Name (XXXXXXXXX)" - 检查
entitlements.mas.plist文件,确保包含MAS必需的权限,核心配置示例:
注意<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.app-sandbox</key> <true/> <key>com.apple.security.application-groups</key> <string>TEAMID.your.bundle.id</string> </dict> </plist>application-groups的值要与Provisioning Profile中配置的一致,不要添加不必要的权限。
4. 清理缓存并重新构建
- 删除Electron Builder的缓存目录:
rm -rf ~/.cache/electron-builder - 删除本地的
dist文件夹,重新执行构建命令:npm run build:mas - 构建前确保「登录」钥匙串中没有同名证书,避免钥匙串冲突,只保留「系统」钥匙串中的有效MAS证书。
5. 命令行验证证书链
- 列出所有有效的代码签名证书,确认你的MAS证书在列表中:
security find-identity -v -p codesigning - 手动尝试签名应用,获取更详细的错误信息:
该命令会输出证书链验证的具体问题,帮助定位根源。codesign -vvv --deep --strict dist/mas-arm64/myApp.app
内容的提问来源于stack exchange,提问作者Sushant Gupta
相关产品推荐
相关产品推荐

