See You Again

Electron Builder MacOS 签名及公证

虽然是桌面应用,苹果也有比较严格的安全性策略,具体可以参考官方的说明 在 Mac 上安全地打开 App

关于签名及公证,这篇讲的很清楚,作为主要参考:
Shipping Electron Apps to Mac App Store with Electron Builder
Electron Documentation Docs / Guides / Code Signing
Notarize Electron apps on Mac OS automatically with electron-builder & electron-notarize

操作下来有几点使用感受:

签名

这个是为了确保应用出自苹果信任的开发者,这个代价就是,开发者每年要缴 90$ 维护证书的有效性。

签名之后,才可以在 MAS(Mac App Store)或者其他渠道(例如网站)分发安装包。也就是说苹果没有像 iPhone 一样限制只能安装 App Store 里的应用。

使用 Electron Builder 签名时很简单,核心是配置两个环境变量(从苹果获得的证书及密码):

  1. export CSC_LINK=/Path/Cert.p12
  2. export CSC_KEY_PASSWORD=***

这是经过签名处理的日志:

  1. $ electron-builder
  2. electron-builder version=22.9.1 os=19.0.0
  3. loaded configuration file=package.json ("build" field)
  4. writing effective config file=dist/builder-effective-config.yaml
  5. packaging platform=darwin arch=x64 electron=10.1.6 appOutDir=dist/mac
  6. packaging platform=mas arch=x64 electron=10.1.6 appOutDir=dist/mas
  7. signing file=dist/mac/Dinosaur Rss.app identityName=Developer ID Application: *** identityHash=162994960F86102EBD0E1C95E3D391522033C2E3 provisioningProfile=none
  8. signing file=dist/mas/Dinosaur Rss.app identityName=Developer ID Application: *** identityHash=162994960F86102EBD0E1C95E3D391522033C2E3 provisioningProfile=none
  9. signing file=dist/mas/Dinosaur Rss.app identityName=3rd Party Mac Developer Application: *** identityHash=DB432338130180D98935E172196B55BF8D69BB7E provisioningProfile=none
  10. building target=DMG arch=x64 file=dist/Dinosaur Rss.0.1.3.dmg
  11. building block map blockMapFile=dist/Dinosaur Rss.0.1.3.dmg.blockmap
  12. Done in 61.59s.

公证

如果要分发应用(例如上架 MAS 或者其他渠道),则还需要公证 notarization,即将包上传到苹果的后台,以供苹果判断是否包含恶意程序。可以简单理解为类似 iPhone 的应用审核,不过这个过程应该是程序自动进行的,因为很快(一般几分钟)。

如果没有经过公证,别人拿到你的安装包就会提示“无法打开,因为无法验证开发者”,虽然自己本地可以安装使用。

这个过程需要用到一条核心命令完成:

  1. xcrun altool --notarize-app -f {file} --primary-bundle-id {bundle} -u {user} -p {pass}

核心的几个参数:
-f 需要公证的文件,例如 Dinosaur\ Rss.0.2.10.dmg
--primary-bundle-id 对应 package.json 里的 appId 参数
-u https://appleid.apple.com/account/manage 页面显示的 Apple ID
-p https://appleid.apple.com/account/manage 页面显示的 App 专属密码

运行这条命令,大概几分钟之后(上传完文件),会出现结果:

  1. No errors uploading 'Dinosaur Rss.0.2.10.dmg'.
  2. RequestUUID = {uuid}

到这里只是上传完成,具体的公证还在苹果的后台执行(一般还需要等几分钟)。也可以根据结果里的 UUID 去查询进度:

  1. xcrun altool --notarization-info {uuid} -u {user} -p {pass}

会得到查询结果:

  1. No errors getting notarization info.
  2. Date: 2020-12-29 16:28:37 +0000
  3. Hash: 5cc3e1c6f584a398410c5b67cae562d49d5e5473762934288a29549fda6449ab
  4. RequestUUID: {uuid}
  5. Status: in progress

或者:

  1. No errors getting notarization info.
  2. Date: 2020-12-29 16:28:37 +0000
  3. Hash: 5cc3e1c6f584a398410c5b67cae562d49d5e5473762934288a29549fda6449ab
  4. LogFileURL: https://osxapps-ssl.itunes.apple.com/***
  5. RequestUUID: {uuid}
  6. Status: success
  7. Status Code: 0
  8. Status Message: Package Approved

公证完成之后,苹果会发邮件给你,所以一般就喝杯茶稍等片刻即可。通过后,别人就可以顺利使用安装包了。

2020-12-30 喜欢

Copyright © 2015-2021 BY-NC-ND 4.0

回到顶部 ↑