Logo Vincent
返回文章列表

Electron-开发实践:Mac应用包签名和公证

Electron
Electron-开发实践:Mac应用包签名和公证

【前言】

一篇文章学会Electron

Electron-开发实践:本地数据库SQLite

Electron-开发实践:使用Monorepo管理Electron项目

当你通过上面这些文章使用Electron开发好一个桌面应用,

Electron-开发实践:Mac打包

并通过这个文章在本地打包好了mac的应用包和安装包,

接着肯定想将你的应用分发出去,

分发出去前还有一步要做,

就是mac应用的签名和公证,

本文讲一下怎么将一个mac应用签名。

签名前你需要注册一个苹果开发者账号,

可以看下面这篇文章,

Electron-开发实践:注册苹果开发者账号

【@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进行打包,

对应的有一个配置文件,配置文件详情可以看这个文章,

Electron-开发实践:Mac打包

搞定证书和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

© 2026 vincentqiao.com . 保留所有权利。