如果要在 App Store 上架 Mac 应用,必须遵守苹果的沙盒要求并通过其审核流程。我们在之前的两篇文章中,首先讨论了打包过程解决方案:为Mac App Store打双架构Electron应用包含原生模块的挑战,然后深入探讨了沙盒机制辛苦开发的 Electron 程序,能上架 App Store 吗?关于 Sandbox,你应该了解的有哪些?。这些内容为上架 App Store 奠定了基础。本文将主要从证书配置的角度出发,帮助大家更方便地打包正确的应用包。
electron-builder 配置
如果要打包分发到Mac App Store
的包,需要在 build 配置文件中,加入mas
相关的配置。
const base = {
appId: 'com.xxxx.xxxx',
productName: 'Project Name',
buildVersion: "1",
files: ["**"],
extends: null,
productName: "GitHeat",
asar: true,
mac: {
target: [{
target: 'mas',
arch: ['universal']// ['x64', 'arm64']
},
{
target: 'dmg',
arch: ['x64', 'arm64'], // ['x64', 'arm64']
}],
hardenedRuntime: true,
gatekeeperAssess: false,
icon: path.join(__dirname, "../AppIcon/MyIcon.icns"),
category: 'public.app-category.utilities',
minimumSystemVersion: '12.0', // set minimum system version to 12.0 or higher
},
mas: {
icon: path.join(__dirname, "../AppIcon/MyIcon.icns"),
hardenedRuntime: false,
type: "distribution",
entitlements: 'build/parent.plist', // specify the path to the parent entitlements file
entitlementsInherit: 'build/child.plist', // specify the path to the child entitlements file
entitlementsLoginHelper: "build/entitlements.mas.loginhelper.plist",
provisioningProfile: 'build/embedded.provisionprofile'
},
};
module.exports = base;
上面的配置中,arch: ['universal']
用来支持双架构
mas
相关的配置,增加了一些沙盒,entitlements 相关的配置,关于为什么加了hardenedRuntime
和entitlementsLoginHelper
,可以我的这篇博客 electron 打包的mas ,上传Mac App Store之后,Testflight 显示“ 尚无法测试” , 文章中也写了parent.plist
, child.plist
, entitlements.mas.loginhelper.plist
文件的详细内容,在此不再过多说明。
接下来,我们可以看到provisioningProfile, 这个就是需要苹果开发者证书生成的,用来签名的。
生成签名证书
开始之前,保证你已经有了苹果开发者账号。
进入苹果开发者网站:Apple Developer 进入到 Certificates, Identifiers & Profiles
中,我们需要添加 2 个Certificates
, 如下图所示。
当添加的时候我们需要选一个CSR
的文件,如下图所示:
这个文件是需要在本机电脑上的Keychain Access(钥匙串访问)
中创建的。
步骤如下:
打开 Keychain Access
, 从菜单中选择“从证书颁发机构请求证书...”
填前面两项,选择存储到磁盘
这时候你有了CSR
证书,继续上面Certificates
的创建。
创建完成Download
下来,双击就可以安装到Keychina Access
中,但是你会发现你新装的证书,存在信任问题,解决办法如下。
备注:或许我们首先需要按下面的方式,添加AppleWWDRCA 证书
,再申请CSR
, 然后创建Certificates
,总之如果证书不可用,会在打包时候报错,到时候全部删除,从头再来。
下载的证书,导入电脑不受信任的解决办法
这时候你可能会根据以前的经验,双击选择“始终信任”, 虽然这么做可以解决证书信任的问题,但是这么做打包 Electron 的时候会报错。
正确的做法是,安装Apple全球开发者关系认证媒介中间证书AppleWWDRCA, 或者你的AppleWWDRCA 证书
失效了。
下载地址是: [Apple PKI - Apple
我下载的是 G3,双击就可以安装到Keychain Access(钥匙串访问)
中。
创建provisionprofile文件
证书安装完成之后,可以在Keychain Access
中看到Mac App Distribution
, Mac Installer Distribution
证书
然后再回到苹果开发者网站,选择Identifiers
,给应用创建一个bundleId(在 iOS 中叫 bundleId)
, 苹果的每一个应用,都有一个唯一的bundleId, 一般是域名的倒写,比如net.camelgeek.xxxx
创建完 bundleId
,也就是配置文件中的appId
, 之后,选择 Profiles
, 点击"+"
下一步,选择 App ID
下一步,选择前面创建的Mac App Distribution
证书。
最后,创建完成之后,下载下来,放到对应的位置,对应配置
provisioningProfile: 'build/embedded.provisionprofile'
最后,如果顺利,你将会打包出可以发布到Mac App Store
的 pkg 文件。
在打包过程中,你要关注日志,签名的证书是你预期的证书。
上面是我的打包签名日志,里面可以看到3rd Party
开头的证书,这个就是我们这篇文章交给大家创建的。
里面还有一个"Developer ID Application"的证书,这个是用来不走 App Store 分发的证书,这部分我会在 Electron 应用公证,签名相关 说明。
上传到 App Store 方式
上传用 Transporter
在我的打包配置文件中,添加了 buildVersion: "1"
, 这个挺关键的,如果没有这个buildVersion, 你每次上传都需要将提升版本号,将会很奇怪。
发表回复