electron mac 打包、分发流程(dmg & mas)

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@23.3.2 版本的拼接规则,不同版本的 electron-builder 规则有所差异。图中代码位置在/node_modules/app-builder-lib/out/macPackager.js

公证

- 在 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 获取

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容