Electron 中 Mac 应用签名
前言
- Code Signing | Electron
- Signing a macOS app - Electron Forge
- Code Signing - electron-builder
- Signing and certificates - Hydraulic Conveyor
签名的作用
防止系统拦截
macOS, the system can detect any change to the app, whether the change is introduced accidentally or by malicious code.
证书
哪里买证书: Code Signing - electron-builder
必须交钱,不然无法使用。
签名的流程
Mac 下,软件是分两步, code sign 和 notarize。
erb 中使用
code sign
把开发者证书, 转换成了环境变量了:
CSC_LINK
CSC_KEY_PASSWORD
notarize
legacy is deprecated and will stop working on November 1st 2023. 现在都用 notarytool 了
这是流程需要, erb
是在 afterSign
后调用了 notarize.js
, 而没有使用 electron-builder
内置的 notarize
, 具体要看 @electron/notarize
需要什么, 感觉也没有什么特别的啊。。。
- erb 没有使用
electron-builder
内置的, 而是自己实现了after-sign
后调用个notarize.js
: electron-react-boilerplate/.erb/scripts/notarize.js at main · electron-react-boilerplate/electron-react-boilerplate electron-builder
内置的逻辑在这里:electron-builder/packages/app-builder-lib/src/macPackager.ts at 869c7e4652a5d5a3562e25723d6cedd622ab657b · electron-userland/electron-builder
如果使用 electron-builder
自带的 notarize
, 需要:
Note: In order to activate the notarization step You MUST specify one of the following via environment variables: 1. APPLE_API_KEY, APPLE_API_KEY_ID and APPLE_API_ISSUER. 2. APPLE_ID and APPLE_APP_SPECIFIC_PASSWORD 3. APPLE_KEYCHAIN and APPLE_KEYCHAIN_PROFILE
建议使用 APPLE_API_KEY (apiKey with apiIssuer, @electron/notarize
支持的方式), 安全性更高 Notarization security issue · Issue #7859 · electron-userland/electron-builder
上架 MAS
- Mac App Store Submission Guide | Electron --- Mac App Store 提交指南 |电子
- Electron-builder 构建 MacOS 应用小白教程(打包 & 签名 & 公证 & 上架) - 掘金
特殊处理
- 需要禁用自动更新模块
- 一些沙盒权限
- 可能用不同的证书打包
如何验证打包后的签名和 notarized
spctl -a -vvv -t install MacApp.app
, 是对 app
进行的 sign 和 notarized.