@ electron/ osx 签名
代号为 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 剧本.