dmg 包
背景
在一些从没有安装过此软件的电脑上安装未签名或未公证的 dmg 包时,会触发苹果的 Gatekeeper,阻止用户安装你的 App。
测试阶段可以去设置->安全与隐私->通用栏目下面点击仍要打开,或者设置安装选项为允许任何来源(如果没有该选项可以在终端中执行 sudo spctl --master-disable )来解决此问题,下面介绍正式包的分发,正式包分发需要包括 签名 和 公证 2 个步骤
签名
使用 dmg 包分发的方式需要使用 Developer ID Application 的证书签名,只签 .app 文件即可,.dmg 文件不用签
证书获取
下载证书
在 apple developer 后台下载该证书,若没有,则创建一个,只有 Account Holder 才有权限创建此类型的证书,也可以通过其他同学导出的 p12 文件安装此证书
安装证书
需将证书安装在钥匙串登录模块下
打开钥匙串,切换到登录,保证当前是在登录栏下,双击下载的证书,即可将证书安装到登录模块下(保证此证书在钥匙串中包含密钥)
使用证书签名
使用 electron-builder 的打包方式,内置 electron-osx-sign 签名模块,不用单独运行签名脚本
identity
identity 属性为 package.json 中 build.mac 下的属性
- 配置 null,强制不签名
- 配置 app.com Inc. (xxxxxxxx) ,使用钥匙串中的 app.com Inc. (xxxxxxxx) 证书进行签名
- 不配置 identity 属性,打包时,electron-builder 会自动去钥匙串中查找可用的证书进行签名
证书类型
上述 identity 的配置不能包含证书头部信息,electron-builder 会根据环境配置默认拼接,规则为
公证
- 在 electron-builder 提供的 afterSign hook 脚本中写入公证脚本
// package.json
{ ... "build": { ... "afterSign": "afterSign.js" }}
- 在 afterSign.js 脚本中,使用 electron-notarize 模块进行公证
这里的 appleId、 appleIdPassword 为团队中任一有权限的账号即可
appleIdPassword 获取
登录 appid,生成你的专用密码
公证结果
若公证失败,命令行 log 或邮箱可以看到失败的原因
若公证成功,Apple Developer 会向你的邮箱发送公证结果,此时就可以放心得分发你的 dmg 文件给其他人了
mas 包
这里主要讲解 mas 包如何打包、签名。mas 包打完后,生成 .pkg 文件,再通过 Transporter 等工具上传的步骤这里不再复述
mas 正式包
配置
// package.json
证书、profile 获取
- 使用 Mac App Distribution 类型的证书给 .app 文件签名使用,此证书在安装到钥匙串后名字可能会改成“3rd Party Mac Developer Application”
- 使用 Mac Installer Distribution 类型的证书给 .pkg 文件签名使用,此证书在安装到钥匙串后名字可能会改成“3rd Party Mac Developer Installer”
- 在 developer 后台新建一个 profile、或者使用已经创建过的,关键信息是此 profile 需要与上述 Mac App Distribution 证书相关联,此 profile 用于在 package.json 中 mas.provisioningProfile 中配置
签名
使用 electron-builder 的打包方式,内置 electron-osx-sign 签名模块,不用单独运行签名脚本,electron-builder 会自动寻找钥匙串中的证书,进行签名。(可查看上述 identity 规则)
安装完证书、配置完 package.json 后,运行 electron-builder build --mac 构建 mas 包
注意!!上图为 electron-builder@23.3.2 版本寻找 3rd Party 的证书,低版本可能会寻找 Apple Distribution 的证书,解决方案为升级 electron-builder 版本,或手动修改 /node_modules/app-builder-lib/out/macPackager.js 最下面的代码,Apple Distribution -> 3rd Party Mac Developer Application
脚本执行完毕,签名成功后,生成 .pkg 包(electron-builder 会自动查找 3rd Party Mac Developer Installer 证书给 .pkg 文件签名,若本地没有此证书,命令行会报错),用于上传 App Store Connect
mas-dev 测试包
配置
证书、profile 获取
- 构建 mas-dev 包的方式需要使用 Mac Developer 类型的证书,供签名使用
- 在 developer 后台新建一个 profile、或者使用已经创建过的,关键信息是此 profile 需要与上述 Mac Developer 证书相关联,此 profile 用于在 package.json 中 masDev.provisioningProfile 中配置
签名
使用 electron-builder 打包、签名,运行 electron-builder build --mac 构建 mas-dev 包
脚本执行完毕,签名成功后,生成 .app 文件用于测试
设备绑定
此时,打开 .app 文件可能会崩溃,还需要在 develop 后台中绑定测试设备
Device ID(UUID)在关于本机->概览->系统报告->硬件->硬件UUID 获取