Electron-开发实践:Mac应用包签名和公证
【前言】
Electron-开发实践:使用Monorepo管理Electron项目
当你通过上面这些文章使用Electron开发好一个桌面应用,
并通过这个文章在本地打包好了mac的应用包和安装包,
接着肯定想将你的应用分发出去,
分发出去前还有一步要做,
就是mac应用的签名和公证,
本文讲一下怎么将一个mac应用签名。
签名前你需要注册一个苹果开发者账号,
可以看下面这篇文章,
【@electron/osx-sign】
本文使用electron-packager签名mac应用,
https://github.com/electron/electron-packager
electron-packager是用来给electron打包的,
其中签名的部分使用了另一个npm包,
https://github.com/electron/osx-sign
阅读这个包的文档,可以看到很重要的一条,

如果要签名的平台是mas,
mas平台代表要将应用发布到app store,
那么需要的证书是3rd Party Mac Developer Application: * (*)
同样,如果要签名的平台是darwin,
darwin代表要将应用发布到mac端,但是不经过app store,
那么需要的证书是Developer ID Application: * (*)
这一点很重要,涉及后续使用哪种证书,
本文是要将应用发布到darwin平台。
【csr】
从苹果开发者网站申请一个证书前,
需要在本地生成一个csr文件,
钥匙串访问——证书助理——从证书颁发机构请求证书,

接着输入自己的姓名和邮箱,并选择保存到本地,

本地就会生成一个csr文件,

【创建证书】
csr文件准备好后,就可以在苹果开发者网站创建证书了,
地址: https://developer.apple.com/account/resources/certificates/list
点击加号创建证书,

按之前的结论需要创建的证书类型是:Developer ID Application: * (*)
也就是最后一种。

接着按提示选择刚准备好的csr文件,

接着证书就创建好了,点击下载到本地。

【导入和查看证书】
双击下载好的证书,即可导入证书,

在钥匙串中就能看到导入的证书了,

我的电脑双击会安装到钥匙串-系统-证书中,
其实也可以拖拽到钥匙串-登录-证书中,
只要在命令行执行下面命令可以列出该证书即可,
security find-identity -v

【identifier】
接着还需要创建app对应的identifier,
同样的在下面这个地址进行创建,
https://developer.apple.com/account/resources/identifiers/list/bundleId
点击加号后选择第一种类型,

接着选择app类型,

接着填写你的bundle id就行,就是类似com.xx.xx,

【修改配置文件】
上面说到使用electron-packager进行打包,
对应的有一个配置文件,配置文件详情可以看这个文章,
搞定证书和bundleid后,可以修改配置文件如下,
// darwin
if (process.platform === 'darwin') {
// app bundle id
config.appBundleId = 'com.xx.xx';
// sign
config.osxSign = {
identity: 'Developer ID Application: xx',
};
}
修改配置文件后再次打开,效果如下,

可以看到打包mac应用包并且签名成功
【公证】
在创建证书的时候有过提示,
大概意思是如果想分发应用,不但要签名还要公证,
签名是使用本地的证书对应用内的文件进行签名,
公证是讲应用包上传到苹果服务器公证。

osxNotarize
electron-packager具备mac公证的能力,
对应的属性是osxNotarize, https://electron.github.io/electron-packager/main/interfaces/electronpackager.options.html#osxnotarize
对应的npm包是electron-notarize, https://github.com/electron/notarize
关键的几个配置项是
tool:使用notarytool进行公证还是atool,进行公证,推荐前者,后者马上会废弃
teamId:上面申请证书名称中括号内的内容
appleId:苹果id
appleIdPassword:苹果id对应的专用密码,可以查看这篇文章生成, https://support.apple.com/zh-cn/HT204397
配置文件
再次修改配置文件,内容如下
// darwin
if (process.platform === 'darwin') {
// app bundle id
config.appBundleId = 'com.xx.xx';
// sign
config.osxSign = {
identity: 'Developer ID Application: xx (xxx)',
};
// notarize
config.osxNotarize = {
tool: 'notarytool',
teamId: 'xxx',
appleId: 'xx',
appleIdPassword: 'xx',
};
}
再次打包,就会进行mac应用本地签名和苹果服务器公证。
【效果】
如果你的mac应用已经签名和公证了,
那么分发给用户首次打开的提示如下,

【qiao-electron-cli】
将electron打包mac应用,dmg,以及签名公证封装了一个npm包,欢迎使用
https://qiao-electron-cli.vincentqiao.com/#/
1.mac-制作icns图标
2.mac-打应用包
3.mac-打dmg包
4.mac-签名和公证
【总结】
1.创建本地csr文件
2.使用本地csr在苹果开发者网站创建证书
3.使用本地证书对mac应用签名
4.使用苹果appleId专用密码对本地应用公证
5.qiao-electron-cli, https://qiao-electron-cli.vincentqiao.com/#/
6.本文对应代码库: https://github.com/uikoo9/dishi-monorepo/tree/mac-sign
7.本文对应应用(Mac M1): https://static-insistime.vincentqiao.com/21_dishi/dmg/dishi-2.0.9-arm64.dmg
8.本文对应应用(Mac Intel): https://static-insistime.vincentqiao.com/21_dishi/dmg/dishi-2.0.9-x64.dmg
更多同类文章
- Electron-开发实践:注册苹果开发者账号
- Electron-开发实践:clipboard剪切板
- Electron-开发实践:crash上报及解析
- Electron-开发实践:DMG安装包定制
- Electron-开发实践:包体积精简
- Electron-开发实践:制作icns图标
- Electron-开发实践:本地日志
- Electron-开发实践:定制Mac菜单
- Electron-开发实践:Mac打包
- Electron-开发实践:使用Monorepo管理Electron项目
- Electron-开发实践:注册快捷键
- Electron-开发实践:几种更新方式
- Electron-开发实践:创建Window
- 一篇文章学会Electron
- Electron-开发实践:本地数据库SQLite