本文首发同名微信公众号:前端徐徐

大家好,我是徐徐。今天我们聊聊 electron-builder 中 macOS 如何打包的。
前言
我在后台收到留言说上一篇关于 electron-builder 解析的文章不够有深度,我就想了一下,要再细致一点就只能把每个平台的打包源码讲一下啰。 这促使我重新审视了这个话题,决定深入源码,为大家揭示 macOS 平台上 Electron 应用打包的全过程。 Electron 应用的 macOS 平台打包是一个涉及多个步骤的复杂过程,包括准备打包配置、执行打包、应用签名、notarization 等。
为什么 macOS 打包如此重要?
在我们开始技术探讨之前,先问问自己:为什么 macOS 平台的打包如此重要?随着 Apple 对安全性要求的不断提高,特别是从 macOS Catalina 开始,如果不正确处理打包和签名,你的应用可能根本无法在用户的 Mac 上运行。想象一下,你辛苦开发的应用被系统拒之门外的沮丧!这就是为什么我们需要深入了解 electron-builder 的工作原理。
准备阶段
在打包之前,需要确保 Electron 应用的 package.json 文件中包含了必要的字段,如 name、version、main(入口脚本)等。此外,macOS 应用需要一个 build 配置,指定打包选项和签名信息。
配置文件
开发者可以在项目的 package.json 文件中定义 electron-builder 的配置,包括:
- 图标 (
icon):macOS 应用的图标路径。 - 证书和签名 (
mac):包含签名证书的路径和密码。 - 应用信息 (
appId):用于唯一标识应用的字符串。 - 目标格式 (
target):指定打包目标,如dmg、zip、pkg等。
打包流程
electron-builder 通过以下步骤完成打包:
创建打包器实例
首先,创建一个 MacPackager 实例,它继承自 PlatformPackager,用于处理 macOS 平台特有的打包逻辑。
export class MacPackager extends PlatformPackager<MacConfiguration> {
constructor(info: Packager) {
super(info, Platform.MAC)
}
// ...
}
定义默认目标
定义 macOS 平台的默认打包目标,如 dmg、zip、pkg 等。
get defaultTarget(): Array<string> {
return this.info.framework.macOsDefaultTargets
}
准备应用信息
在打包之前,需要准备应用信息,包括应用的名称、版本、版权信息等,并将其规范化以满足代码签名的要求。
protected prepareAppInfo(appInfo: AppInfo): AppInfo {
return new AppInfo(this.info, this.platformSpecificBuildOptions.bundleVersion, this.platformSpecificBuildOptions, true)
}
创建打包目标
根据配置中指定的目标格式,创建相应的打包目标。
createTargets(targets: Array<string>, mapper: (name: string, factory: (outDir: string)
Electron应用macOS平台打包全流程解析

最低0.47元/天 解锁文章
8272

被折叠的 条评论
为什么被折叠?



