揭秘 electron-builder:macOS 应用打包背后到底发生了什么?

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

大家好,我是徐徐。今天我们聊聊 electron-builder 中 macOS 如何打包的。

前言

我在后台收到留言说上一篇关于 electron-builder 解析的文章不够有深度,我就想了一下,要再细致一点就只能把每个平台的打包源码讲一下啰。 这促使我重新审视了这个话题,决定深入源码,为大家揭示 macOS 平台上 Electron 应用打包的全过程。 Electron 应用的 macOS 平台打包是一个涉及多个步骤的复杂过程,包括准备打包配置、执行打包、应用签名、notarization 等。

为什么 macOS 打包如此重要?

在我们开始技术探讨之前,先问问自己:为什么 macOS 平台的打包如此重要?随着 Apple 对安全性要求的不断提高,特别是从 macOS Catalina 开始,如果不正确处理打包和签名,你的应用可能根本无法在用户的 Mac 上运行。想象一下,你辛苦开发的应用被系统拒之门外的沮丧!这就是为什么我们需要深入了解 electron-builder 的工作原理。

准备阶段

在打包之前,需要确保 Electron 应用的 package.json 文件中包含了必要的字段,如 nameversionmain(入口脚本)等。此外,macOS 应用需要一个 build 配置,指定打包选项和签名信息。

配置文件

开发者可以在项目的 package.json 文件中定义 electron-builder 的配置,包括:

  • 图标 (icon):macOS 应用的图标路径。
  • 证书和签名 (mac):包含签名证书的路径和密码。
  • 应用信息 (appId):用于唯一标识应用的字符串。
  • 目标格式 (target):指定打包目标,如 dmgzippkg 等。

打包流程

electron-builder 通过以下步骤完成打包:

创建打包器实例

首先,创建一个 MacPackager 实例,它继承自 PlatformPackager,用于处理 macOS 平台特有的打包逻辑。

export class MacPackager extends PlatformPackager<MacConfiguration> {
   
   
  constructor(info: Packager) {
   
   
    super(info, Platform.MAC)
  }
  // ...
}

定义默认目标

定义 macOS 平台的默认打包目标,如 dmgzippkg 等。

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值