Electron 中 Mac 应用签名


前言

签名的作用

防止系统拦截

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 需要什么, 感觉也没有什么特别的啊。。。

如果使用 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

特殊处理

  • 需要禁用自动更新模块
  • 一些沙盒权限
  • 可能用不同的证书打包

如何验证打包后的签名和 notarized

spctl -a -vvv -t install MacApp.app, 是对 app 进行的 sign 和 notarized.

How to Check if a macOS App is Notarized - DEV Community