作者:维尼饭爱nichkhun_774 | 来源:互联网 | 2024-12-28 13:08
在macOS环境下使用ElectronBuilder进行应用打包时遇到签名验证失败的问题,具体表现为签名后spctl命令检测到应用程序未通过公证(Notarization)。本文将详细探讨该问题的原因及解决方案。
问题描述
在macOS系统中使用Electron Builder进行应用打包时,遇到了签名验证失败的情况。以下是详细的错误信息:
- Electron Builder版本:20.43.0
- 配置文件:package.json中的“build”字段
- 有效配置文件路径:dist/builder-effective-config.yaml
- 打包平台:darwin
- 架构:x64
- Electron版本:5.0.3
- 输出目录:dist/mac
- 签名文件:dist/mac/jdxt.app
- 签名标识名称:Developer ID Application: ()
- 签名标识哈希值:*
- 配置文件路径:none
执行以下命令时出现错误:
spctl --assess --type execute --verbose --ignore-cache --no-cache /Users/apple/Desktop/node/uptest/updemo/dist/mac/jdxt.app
错误信息为:
/Users/apple/Desktop/node/uptest/updemo/dist/mac/jdxt.app: rejected source=Unnotarized Developer ID
这表明应用程序未通过Apple的公证流程(Notarization),导致签名验证失败。
原因分析
根据Apple的要求,自macOS 10.14 Mojave起,所有提交到Mac App Store的应用程序都需要通过公证流程。即使不提交到App Store,开发者也强烈建议对应用程序进行公证以确保其安全性和兼容性。未通过公证的应用程序在某些情况下可能会被系统拒绝运行或提示用户警告。
解决方案
要解决此问题,可以按照以下步骤操作:
- 确保已安装最新版Xcode和命令行工具:更新至最新版本的Xcode,并确保命令行工具是最新的。
- 检查开发者证书:确认使用的Developer ID证书是有效的,并且没有过期或被撤销。
- 启用公证功能:在Electron Builder配置中启用公证选项。可以在package.json中添加如下配置:
{
"build": {
"mac": {
"publish": [
{
"provider": "github",
"owner": "your-github-username",
"repo": "your-repo-name"
}
],
"notarize": true
},
"afterSign": "scripts/notarize.sh"
}
}
其中,notarize
设置为true
以启用公证功能。afterSign
指定一个脚本用于处理公证后的操作。
此外,还需要确保在环境变量中设置了正确的苹果开发者账号信息,例如:
export APPLE_ID="your-apple-id@example.com"
export APPLE_ID_PASSWORD="your-app-specific-password"
export TEAM_ID="your-developer-team-id"
完成上述配置后,重新尝试构建和签名应用程序。如果问题依然存在,可以参考Electron Builder官方文档或社区论坛获取更多帮助。