@electron/osx-sign

中文文档
2.7.2发布于 2026/10/26BSD-2-ClauseES Module构建来源已验证近 30 天下载 3498.5万

代号为 Electron macOS 应用程序

中文使用文档
文档目录13 节
  1. 关于
  2. 安装
  3. 代码签名
  4. 先决条件
  5. 证书
  6. API 密码
  7. 用法实例
  8. 平面安装器包装
  9. API 使用情况
  10. 纯-贾瓦脚本包装
  11. 国 际
  12. 调试
  13. 测试

@ electron/ osx 签名

npm Test API docs

代号为 Electron macOS 应用程序

关于

@electron/osx-sign 尽量减少最终准备所需的额外工作 您的应用程序用于运输,为大多数应用程序提供在框外有效的选项. 可通过它的API获得额外的配置.

有两个主要功能通过这个软件包曝光:

  • 通过 macOS 程序签名 sign 函数。 在车盖下,这个用的是 codesign 函数.
  • 创建 .pkg 通过安装器包 flat 函数。 在车盖下,这个用的是 productbuild 函数.

安装

@electron/osx-sign 并可以相应配置:

您也可以安装 @electron/osx-sign 如果您的包装管道不涉及这些工具:

npm install --save-dev @electron/osx-sign

代码签名

本套装中实施的签名程序是基于Electron's的描述 代码签名指南。 。 。 .

先决条件

  • 您必须是注册会员 苹果开发者程序。 。 。 . 请注意,您可以被苹果公司收取费用,以便获得所需的证书.
  • 你一定有过 X代码 安装于 Mac App 存储器不建议下载您的 出于安全考虑,从其他第三方消息来源收到.
  • 您必须安装 Xcode 命令行工具 。 为了查查有没有, 尝试 xcode-select --install 并遵守指示.
  • 要在Mac App Store上分发您的应用程序, 您必须创建一个 Mac App App Store 连接。 。 。 .
  • 你必须给你的应用程序 一个独特的包 ID.
  • 您必须给您的应用程序一个版本号 .

证书

为了在Mac App Store内外分发您的应用程序, 在成为注册开发商后,您需要从苹果获得以下证书.

证书可以通过 证书、 身份和配置文件 在苹果开发者网站上或通过 Xcode 中的账户首选项。 。 。 .

为了在Mac App Store内部发行,您需要创建:

  • Mac App 分布 : 3rd Party Mac Developer Application: * (*)
  • Mac 安装器分布 : 3rd Party Mac Developer Installer: * (*)

用于Mac App Store外的分发 :

  • 开发者 ID 应用程序 : Developer ID Application: * (*)
  • 开发者 ID 安装器 : Developer ID Installer: * (*)

在您创建必要的认证之后, 下载并打开每个证书, 以便它们成为 安装在您的密钥链中。 我们建议在您的系统中安装它们 默认键链 那个 @electron/osx-sign 可以自动检测到它们.

[TIP] 苹果开发商证书往往以相干对来. 安装起来最简单 二者为后用. 然而,如果你只想在Mac App Store外发行, 不需要安装第三党Mac开发者,反之亦然.

API 密码

import { sign } = from '@electron/osx-sign'
const opts = {
  app: 'path/to/my.app'
};
sign(opts)
  .then(function () {
    // Application signed
  })
  .catch(function (err) {
    // Handle the error
  })

唯一的强制性选项 sign 一条通往你的路 .app 软件包. 大多数 Electron apps 的配置应该能用到框外. 完整的配置选项见 API 文档。 。 。 .

用法实例

Mac App Store 发行签名

import { sign } from '@electron/osx-sign'
const opts = {
  app: 'path/to/my.app',
  // optional parameters for additional customization
  platform: "mas", // should be auto-detected if your app was packaged for MAS via Packager or Forge
  type: "distribution", // defaults to "distribution" for submission to App Store Connect
  provisioningProfile: 'path/to/my.provisionprofile', // defaults to the current working directory
  keychain: 'my-keychain', // defaults to the system default login keychain
};
sign(opts)
  .then(function () {
    // Application signed
  })
  .catch(function (err) {
    // Handle the error
  })

麦克App 存储应用程序需要 提供配置 提交到 App Store 连接。 我们建议把配置图公布于众 放在当前工作目录和默认密钥链所安装的签名身份.

该应用程序预计不会在代号后运行,因为没有提供设备,它是 仅打算提交 App Store 连接。 自兹 @electron/osx-sign 添加条目 com.apple.developer.team-identifier 转到指定的应享权利文件的临时副本 (带有默认选项) preAutoEntitlements,),发行架构不能再直接运行.

要在代码签名后运行本地发行的应用代码, 您可以手动添加 ElectronTeamID 在你身边 Info.plist 财务报告和审定财务报表 com.apple.security.application-groups 输入 应享权利文件,并设定 preAutoEntitlements: false 页:1 @electron/osx-sign 为避免 这额外一点。 注意:"某些特性只允许在团队识别值匹配的应用程序之间使用" (单位:千美元)技术说明TN2415) (中文(简体) ).

或者,设置应用程序 type 改为 development 以编码您的应用程序的开发版本, 它可以运行在您的开发提供机器上。 Apps 签名开发 无法通过 App Store 连接提交.

签名 --deep

您可能包含在您的 Electron app 中的一些子资源可能需要与 --deep。 。 。 . 这通常不适用于整个电子软件,因此应适用于 刚刚 你的档案.

sign({
  app: 'path/to/my.app',
  optionsForFile: (filePath, { platform }) => {
    // The second argument provides additional context about the current signing
    // operation, such as the resolved `platform` ('darwin' or 'mas').

    // For our one specific file we can pass extra options to be merged
    // with the default options
    if (path.basename(filePath) === 'myStrangeFile.jar') {
      return {
        additionalArguments: ['--deep'],
      };
    }

    // Just use the default options for everything else
    return null;
  },
});

签名 Electron 遗留版本

@electron/osx-sign 与旧版本的Electron保持后向兼容,但 通常认为您是最新的稳定版本.

如果你正在运行一个更古老的无支持的Electron版本, 你应该通过在 version 选项

sign({
  app: 'path/to/my.app',
  version: '0.34.0',
});

平面安装器包装

此模块还处理平面安装器包的创建( P).pkg 安装者).

[注] 现代 .pkg 安装器也被命名为"平面"包,用于历史目的. 上一个 至 Mac OS X Leopard (10.5),安装包按等级排列 目录. OS X Leopard采用了新的平面包格式,用于现代 .pkg 安装器.

API 使用情况

import { flat } = '@electron/osx-sign'
flat({
  app: 'path/to/my.app'
})
  .then(function () {
    // Application flattened
  })
  .catch(function (err) {
    // Handle the error
  })

唯一的强制性选项 flat 一条通往你的路 .app 软件包. 完整的配置选项见 API 文档。 。 。 .

纯-贾瓦脚本包装

默认 flat 向苹果公司发射炮弹 pkgbuild编号 :productbuild 二进制. 通过 implementation: 'js' 切换到捆绑的纯 Java 脚本执行 典型的平面包格式 4 - 5× 较快 在真正的电子应用程序和工作 在任何平台上(包含Linux/Windows),用于未签名的软件包:

await flat({
  app: 'path/to/my.app',
  implementation: 'js',
});

联合来文的执行重新实施整个平装货堆——cpio有效载荷 存档 :Bom二进制格式 PackageInfo编号 :Distribution 文档和外部 xar 归档。 其产出根据本地工具进行核实 广泛的平等测试套件(spec/pkg-utils/: 未压缩的有效载荷为 字节相同, lsbom 每个字段的输出匹配, XML 文档是 字节-同声调 generator-version 属性。 运行 yarn bench 复制 机器上的性能比较.

关于与本地工具的故意差异的说明:

  • 有效载荷作为符合标准的多成员流被压缩,因此成员 可平行压缩。 压缩后输出大于 ~3% 苹果私人 zlib口味;被解压的内容相同.
  • 扩展属性不保存( 无 AppleDouble ) ._* 条目生成).
  • 应用程序 Info.plist 必须是 XML; 二进制属性列表被错误拒绝.
  • 硬链接文件作为独立副本存储,而不是复制方式 pkgbuilt 归档它们(Electron Apps使用同义链接,而不是硬链接).
  • 超过 4 GB 的单个文件被拒绝( 平面包 Bom 格式存储) 32-位大小; Size64 支持没有执行).
  • 使用 NFC 规范化( 组合) Unicode 名称的文件包装正确; 本地 pkgbuild 默默地将此类文件从有效载荷中省去.
  • 当一个签名 identity 提供已建软件包,并签名 productsign, (中文(简体) ), 这需要macOS.

国 际

@electron/osx-sign 还曝光了遗留下来的用于两个签名的指令行接口(CLI) 和安装器的生成。 然而,我们建议使用JavaScript API,因为它有更多的 完整 API 表面( 例如). optionsForFile 仅通过联合来文提供).

# install the package locally into devDependencies
npm install --save-dev @electron/osx-sign

# Sign a packaged .app bundle
npx electron-osx-sign path/to/my.app [options ...]

# Create a .pkg installer from a packaged .app bundle
npx electron-osx-flat path/to/my.app [options ...]

对于全部选项,请使用 --help 两个命令的旗帜.

调试

这个 debug 模块用于显示高级日志和信件. 如果你有问题 签署你的应用程序 @electron/osx-sign,运行您的签名脚本 页:1 DEBUG=electron-osx-sign* 环境变量.

测试

该项目的配置是为了在GitHub Actions上运行自动测试.

如果您想要手动测试模块, 您需要首先生成自签名证书 通过 spec/ci/generate-identity.sh 剧本.

版本与发布记录

@electron/osx-sign 共发布 24 个版本,首次发布于 2022/03/24;过去 12 个月发布了 9 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.7.2latest2026/10/2618 天前
2.7.12026/09/291 个月前
2.7.02026/08/192 个月前
2.6.22026/08/182 个月前
2.6.02026/07/183 个月前
2.5.02026/07/014 个月前

关于 @electron/osx-sign 的常见问题

@electron/osx-sign 是什么?

代号为 Electron macOS 应用程序

如何安装 @electron/osx-sign?

在项目目录运行 npm install @electron/osx-sign,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 electron-osx-flat、electron-osx-sign,可以用 npx electron-osx-flat 直接运行。

@electron/osx-sign 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/electron__osx-sign 是否存在。

@electron/osx-sign 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@electron/osx-sign 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.12.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@electron/osx-sign 可以商用吗?

@electron/osx-sign 使用 BSD-2-Clause 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@electron/osx-sign 的下载量有多少?

根据 npm 官方下载统计,@electron/osx-sign 在 2026/10/14 – 2026/11/12 这 30 天内被下载 34,984,515 次,日均约 1,166,151 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@electron/osx-sign 还在维护吗?

最新版本 2.7.2 发布于 2026/10/26(18 天前);至今共发布 24 个版本,其中过去 12 个月发布了 9 个;首次发布于 2022/03/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。