ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Electron Forge 之 maker-pkg:构建 macOS .pkg 安装包的完整指南

Electron Forge 之 maker-pkg:构建 macOS .pkg 安装包的完整指南 开发工具桌面应用前端构建【免费下载链接】forge:electron: A complete tool for building and publishing Electron applications项目地址https://gitcode.com/gh_mirrors/fo/forge点击查看免费下载electron-forge/maker-pkg是 Electron Forge 官方提供的 macOS 安装包生成器它将已打包好的 Electron 应用制作为.pkg扁平安装包flat package installer既可用于上传 Mac App StoreMAS 上架也可作为 macOS 用户的替代分发方式。读完本文你将掌握maker-pkg的安装、配置、安装脚本注入、签名与公证notarization以及调试方法并了解其底层实现原理。一、什么是 .pkg 安装包.pkg是 macOS 平台的标准安装包格式。Electron Forge 的 pkg maker 会调用 Apple 官方工具链把一个已经过electron-packager打包的.app应用封装为可双击安装的.pkg文件用户双击后即可通过系统安装向导完成安装默认安装到/Applications。该格式在历史上也被称为扁平安装包在 Mac OS X Leopard10.5之前安装包以分层目录形式组织Leopard 引入了现代.pkg所使用的扁平包格式。苹果官方对扁平包规范的文档化程度较低如需深入其内部结构可以参考社区文章如 Stéphane Sudre 的Flat Package Format - The missing documentation与 MacTech 的The Flat Package系列。本文档对应的官方用法说明见 docs/config/makers/pkg.mdx包源码见 packages/maker/pkg核心实现位于 MakerPKG.ts。二、使用前提与平台限制maker-pkg有两个硬性限制只能在 macOS 机器上构建源码中通过isSupportedOnCurrentPlatform()直接检查process.platform darwin见 MakerPKG.ts因此在 Linux、Windows 主机上该 maker 会被判定为不可用。只能面向darwin或mas平台目标defaultPlatforms定义为[darwin, mas]。make()方法第一步会调用isValidTargetPlatform()做校验若传入其他平台如win32会直接抛出错误The pkg maker only supports targeting mas and darwin builds. You provided win32.对应测试用例见 MakerPKG.spec.ts。其中mas平台意味着目标是 Mac App Store 发布darwin则对应常规的开发者签名分发。三、安装在项目根目录执行npm install --save-dev electron-forge/maker-pkg当前仓库中该包的版本为 8.0.1见 package.json其运行时依赖为electron-forge/maker-base、electron-forge/shared-types、electron/notarize与electron/osx-signNode.js 版本要求 22.13.0。四、基础配置在forge.config.js或package.json的config.forge字段的makers数组中注册该 maker// forge.config.js module.exports { makers: [ { name: electron-forge/maker-pkg, config: { keychain: my-secret-ci-keychain } } ] };与所有 maker 一样config既可以是对象也可以是一个接收当前目标架构arch并返回配置对象的函数见 docs/config/makers/index.mdx 中的通用写法。上例中的keychain常用于 CI 环境当签名证书存放在自定义钥匙串keychain中而非系统默认钥匙串时指定其名称即可让签名工具正确查找证书。五、MakerPKGConfig 完整配置项所有配置项均为可选项完整定义见 Config.ts。下表汇总了每个字段的作用与默认值配置项类型说明默认值namestring生成的.pkg文件名不含扩展名${appName}-${packageJSON.version}-${targetArch}identitystring签名使用的证书名称即钥匙串中的证书标识按平台从指定或系统默认钥匙串中自动选择identityValidationboolean是否在指定钥匙串中校验所提供的签名身份trueinstallstring应用的安装目标路径/Applicationskeychainstring签名证书所在的钥匙串名称系统默认钥匙串scriptsstring包含 preinstall / postinstall 脚本的目录路径无name控制产物文件名若不设置产物文件名由应用名、版本号与目标架构三部分组成。例如应用名为My Test App、版本为1.2.3、目标架构为arm64时默认文件名为My Test App-1.2.3-arm64.pkg。这一行为被测试用例明确验证见 MakerPKG.spec.ts。scripts注入安装前后脚本maker-pkg支持在应用安装前、后分别执行一个 bash 脚本。你可以利用preinstall脚本做依赖检查、清理旧版本等准备工作利用postinstall脚本做权限调整、注册启动项等收尾工作。使用它们需要满足三个条件脚本文件必须具有执行权限如chmod x脚本文件不能带扩展名即文件名为preinstall、postinstall而不是preinstall.sh两个脚本必须位于同一目录中。推荐的做法是在项目根目录下建一个scripts文件夹my-app ├─── forge.config.js └─── scripts ├── postinstall └── preinstall然后在配置中把scripts指向该目录注意使用node:path解析绝对路径保证相对定位正确const path require(node:path); module.exports { makers: [ { name: electron-forge/maker-pkg, config: { scripts: path.join(__dirname, scripts) } } ] };六、底层实现make() 的执行流程MakerPKG继承自MakerBase见 packages/maker/base/src/Maker.ts其make()方法在 MakerPKG.ts 中实现了完整流程大致分为四步平台校验拒绝darwin/mas之外的所有目标平台。确定输出路径产物写入${makeDir}/pkg/${targetArch}/${name}.pkg。其中makeDir是 Forge 分配的产品输出目录targetArch单独作为子目录目的是避免多个并行 maker如同时构建不同架构之间产物互相冲突。这一行为同样有测试覆盖见 MakerPKG.spec.ts。调用flat()封装安装包flat来自electron/osx-sign它接收一个合并后的配置对象{ ...this.config, app, pkg, platform }其中app指向打包产物${dir}/${appName}.apppkg为输出路径platform为当前目标平台。条件公证notarization当同时满足「配置了identity签名身份」且「forgeConfig.packagerConfig.osxNotarize已配置」两个条件时调用electron/notarize的notarize()对生成的.pkg进行 Apple 公证并把osxNotarize的全部配置透传额外追加appPath: outPath指向产物。公证的条件逻辑在测试中有清晰印证只有 identity 与osxNotarize同时存在时才触发公证缺任何一个都不会调用见 MakerPKG.spec.ts。这意味着仅配置osxNotarize如在packagerConfig中设置了osxNotarize与 Apple ID但未设置identity则不会对.pkg公证若要发布到 Mac App Store 或进行 Gatekeeper 友好的分发两者应同时配置。七、签名与公证实践macOS 分发与上架绕不开代码签名与公证。在使用maker-pkg时签名工作实际上由flat()底层完成——它会使用identity、keychain、identityValidation、install等配置进行签名与安装路径设置。CI 场景下常见组合如下module.exports { packagerConfig: { osxNotarize: { appleId: meexample.com, appleIdPassword: keychain:AC_PASSWORD, teamId: TEAM123 } }, makers: [ { name: electron-forge/maker-pkg, config: { identity: Developer ID Installer: My Company (XXXXXXXXXX), keychain: my-secret-ci-keychain, identityValidation: true, install: /Applications } } ] };需要说明的是appleIdPassword使用keychain:...引用式写法可避免把密码明文写进配置。公证过程需要联网提交给 Apple 服务请确保 CI 环境网络可达且 Apple ID 已开启双重认证所需的 app 专用密码。八、调试与日志.pkg安装器本身运行于 macOS 系统安装框架其日志统一记录在系统安装日志中日志文件路径/var/log/install.log图形界面查看使用 macOS 自带的Console.app实用工具若需要排查签名阶段的问题可为本 maker 开启底层签名库的调试输出DEBUGelectron-osx-sign* electron-forge make该环境变量会输出electron-osx-sign的详细日志帮助定位证书选择、签名失败等常见问题。九、验证与测试仓库中 MakerPKG.spec.ts 使用 Vitest 对该 maker 做了 mock 化的单元测试覆盖以下关键行为可作为理解其契约的参考默认参数透传flat收到app、pkg含My Test App-1.2.3-arch.pkg、platform按架构分目录输出产物避免并行 maker 冲突非法平台win32抛出明确错误公证的触发条件identity 与osxNotarize缺一不可。十、总结electron-forge/maker-pkg把「打包.app→ 生成.pkg安装包 → 按需公证」这条 macOS 发布链路浓缩为一个 maker 配置。在 macOS 主机上、面向darwin/mas平台运行时你只需要在makers数组中登记该 maker并视需要配置keychain、identity、scripts等选项即可获得可直接分发或上架的.pkg产物。若需要更多 maker 的对比与通用配置方式可参考 docs/config/makers/index.mdx 与 docs/config/configuration.mdx。赞分享开发工具桌面应用前端构建【免费下载链接】forge:electron: A complete tool for building and publishing Electron applications项目地址https://gitcode.com/gh_mirrors/fo/forge点击查看免费下载相关推荐LWM三步部署百万字符长对话机器人Scan Attention实战调优LWM三步部署百万字符长对话机器人Scan Attention实战调优 LWMLarge World Model是面向百万级上下文的多模态自回归模型它的开发工具桌面应用前端构建App-Store-Connect-CLI macOS PKG 发布指南用 --pkg 上传预构建 macOS 安装包App Store Connect CLI macOS PKG 发布指南用 pkg 上传预构建 macOS 安装包 asc publish testflighElectron Forge 使用 electron-forge/maker-snap 构建 Snap 分发包完整指南Electron Forge 使用 electron forge/maker snap 构建 Snap 分发包完整指南 electron forge/mak开发工具桌面应用前端构建上一篇Airbnb的Mavericks项目Android开发的未来下一篇Retrofit2-Kotlinx-Serialization-Converter 项目推荐创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表