🍈 Electron macOS 打包签名配置:

未签名的应用程序运行报错:

  • “Appname.dmg” can’t be opened because Apple cannot check it for malicious software.
  • This software needs to be updated. Contact the developer for more information.

或中文:

  • 无法打开“Appname.app”,因为无法验证开发者。
  • macOS 无法验证此 App 不包含恶意软件。
  • 项目中使用的electron-builder打包工具,就具体介绍electron-builder签名的方法, electron-builder 附带一个自定义解决方案,用于签署应用程序。 官方文档地址它的文档
  • 其他方法可以去官网文档进行查看

🍊 证书生成

  • 打开mac电脑钥匙串 - 钥匙串访问 - 证书助理 - 从证书颁发机构申请证书
  • 打开钥匙串 打开钥匙串
  • 生成证书 生成证书
  • 导出证书 导出证书

🍋 证书配置

  • Apple 开发账号,首先需要有开发者账号,年费$99。
  • 登录Apple开发者后台,进入证书页面 登录Apple开发者后台
  • 点击Certificates 添加证书,如果不在Apple store 发布的话选择:Developer ID Application
  • 然后在你mac电脑登录打开Xcode并登录你的开发者账号(很重要)

🍍 打包配置(公正配置)

  • 使用 Electron-notarizeElectron 程序进行公证。

🍐 在你的配置文件中进行配置,例如package.json

// package.json
{
"build": {
"afterSign": './mac/notarize.js',
"mac": {
"hardenedRuntime": true, // 使用强化的运行时构建您的应用程序
"gatekeeperAssess": false, // 禁用此健全性检查
"artifactName": '${productName}_${version}.${ext}', // 应用名称
"entitlements": './mac/entitlements.mas.plist',
"entitlementsInherit": './mac/entitlements.mas.plist',
},
}
}
```
` "afterSign": './mac/notarize.js'`
  • Electron-notarize 打包自动签名加载的js文件

"hardenedRuntime": true,

  • 使用强化的运行时构建您的应用程序(强化会拥有更多的权利)

"gatekeeperAssess": false

  • electron-builder 使用的签名工具称,为electron-osx-sign,会进行健全性检查以验证签名是否成功。在 MacOS 10.14.5 之前,此健全性检查会返回正数,但在 10.14.5 中,它会返回错误,因为虽然签名进行得很顺利,但应用程序尚未(尚未!)经过公证,这是一个错误。

"entitlements": './mac/entitlements.mas.plist'

  • 加载强化文件

🍓 新增 notarize.js

// ./mac/notarize.js
require('dotenv').config()
const { notarize } = require('electron-notarize')
exports.default = async function notarizing(context) {
const { electronPlatformName, appOutDir } = context
if (electronPlatformName !== 'darwin') {
return
}
const appName = context.packager.appInfo.productFilename
return await notarize({
appBundleId: 'com.ClientMacOS', // appid
appPath: `${appOutDir}/${appName}.app`, // 应用的路径 xxx.app 结尾的
appleId: 'User@.com', // 苹果开发者 id
appleIdPassword: 'PassWord', // 应用专用密码(可以是你的登录密码,也可以在苹果官网申请专用密码)
ascProvider: 'XXXXXXXXX', // 证书提供者
})
}

appleId

  • 你的 Apple 开发者账号

appleIdPassword

  • 你的 Apple 开发者账号密码。出于安全考虑,建议不要直接将密码写出来,这儿 可以使用专用密码等。

ascProvider

  • 此项是选填的,如果你的开发者账号与多个团队关联,运行时可能会遇到以下错误:

🌽 新增 entitlements.mas.plist

// ./mac/entitlements.mas.plist
<?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.cs.allow-unsigned-executable-memory</key>
<true/>
</dict>
</plist>

🌰 打包

  • 完成以上配置后就可以进行打包了,正常运行electron-builder 的命令,就可以在完成打包之后,继续执行签名,公正的工作,
  • 成功和失败都会收到Apple 给你发的提醒邮件