虽然是桌面应用,苹果也有比较严格的安全性策略,具体可以参考官方的说明 在 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 签名时很简单,核心是配置两个环境变量(从苹果获得的证书及密码):
export CSC_LINK=/Path/Cert.p12
export CSC_KEY_PASSWORD=***
这是经过签名处理的日志:
$ electron-builder
• electron-builder version=22.9.1 os=19.0.0
• loaded configuration file=package.json ("build" field)
• writing effective config file=dist/builder-effective-config.yaml
• packaging platform=darwin arch=x64 electron=10.1.6 appOutDir=dist/mac
• packaging platform=mas arch=x64 electron=10.1.6 appOutDir=dist/mas
• signing file=dist/mac/Dinosaur Rss.app identityName=Developer ID Application: *** identityHash=162994960F86102EBD0E1C95E3D391522033C2E3 provisioningProfile=none
• signing file=dist/mas/Dinosaur Rss.app identityName=Developer ID Application: *** identityHash=162994960F86102EBD0E1C95E3D391522033C2E3 provisioningProfile=none
• signing file=dist/mas/Dinosaur Rss.app identityName=3rd Party Mac Developer Application: *** identityHash=DB432338130180D98935E172196B55BF8D69BB7E provisioningProfile=none
• building target=DMG arch=x64 file=dist/Dinosaur Rss.0.1.3.dmg
• building block map blockMapFile=dist/Dinosaur Rss.0.1.3.dmg.blockmap
✨ Done in 61.59s.
如果要分发应用(例如上架 MAS 或者其他渠道),则还需要公证 notarization
,即将包上传到苹果的后台,以供苹果判断是否包含恶意程序。可以简单理解为类似 iPhone 的应用审核,不过这个过程应该是程序自动进行的,因为很快(一般几分钟)。
如果没有经过公证,别人拿到你的安装包就会提示“无法打开,因为无法验证开发者”,虽然自己本地可以安装使用。
这个过程需要用到一条核心命令完成:
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 专属密码
运行这条命令,大概几分钟之后(上传完文件),会出现结果:
No errors uploading 'Dinosaur Rss.0.2.10.dmg'.
RequestUUID = {uuid}
到这里只是上传完成,具体的公证还在苹果的后台执行(一般还需要等几分钟)。也可以根据结果里的 UUID 去查询进度:
xcrun altool --notarization-info {uuid} -u {user} -p {pass}
会得到查询结果:
No errors getting notarization info.
Date: 2020-12-29 16:28:37 +0000
Hash: 5cc3e1c6f584a398410c5b67cae562d49d5e5473762934288a29549fda6449ab
RequestUUID: {uuid}
Status: in progress
或者:
No errors getting notarization info.
Date: 2020-12-29 16:28:37 +0000
Hash: 5cc3e1c6f584a398410c5b67cae562d49d5e5473762934288a29549fda6449ab
LogFileURL: https://osxapps-ssl.itunes.apple.com/***
RequestUUID: {uuid}
Status: success
Status Code: 0
Status Message: Package Approved
公证完成之后,苹果会发邮件给你,所以一般就喝杯茶稍等片刻即可。通过后,别人就可以顺利使用安装包了。
Copyright © 2015-2022 BY-NC-ND 4.0