Skip to content

代码签名 (Code Signing)

对您的 zero-native 应用进行代码签名和公证,以便进行分发。

macOS 签名

使用 Developer ID 对应用包进行签名:

bash
zero-native package --target macos --signing identity --identity "Developer ID Application: Your Name"

签名模式

模式描述
none不进行签名(默认值)
adhoc适用于本地测试的临时签名(Ad-hoc)
identity使用指定的证书标识符进行签名(需要配合 --identity 使用)

签名参数

参数描述
--signing签名模式:noneadhocidentity
--identity代码签名证书(Identity)的完整名称
--entitlements授权文件(entitlements)的路径(例如:assets/zero-native.entitlements
--team-idApple 开发者团队 ID (Team ID)

应用公证 (Notarization)

框架仓库中包含了一个 zig build notarize 辅助程序,可用于本地发布的测试:

bash
zig build notarize

生成后的应用在打包时应使用 zero-native package --target macos --signing identity ...,除非它们添加了自己的公证构建步骤。该辅助程序不会直接调用 xcrun notarytool。在创建签名包后,请手动将其提交进行公证:

bash
xcrun notarytool submit zig-out/package/your-app.zip --apple-id "you@example.com" --team-id "TEAMID" --password "@keychain:AC_PASSWORD" --wait
xcrun stapler staple zig-out/package/your-app.app

Chromium 应用

Chromium 类型的应用包会在 .app 内部包含 Chromium Embedded Framework.framework。为了确保应用二进制文件、辅助可执行文件以及嵌入的 framework 都使用相同的分发证书进行覆盖,您应该在捆绑完 CEF 之后,再对最终的包进行代码签名与公证。

bash
zero-native cef install --version <pinned-version>
zig build
zero-native package --target macos --signing identity --identity "Developer ID Application: Your Name"
hdiutil create -volname "Your App" -srcfolder zig-out/package/your-app.app -ov -format UDZO zig-out/package/your-app.dmg

建议在 app.zon 中配置 .web_engine = "chromium".cef = .{ .dir = "third_party/cef/macos", .auto_install = false } 以应用正常的签名路径。-Dweb-engine--web-engine-Dcef-dir 以及 --cef-dir 仍然可以用来临时覆盖相关配置。

如果 macOS 的 Gatekeeper 拦截并拒绝运行您的应用,请检查以下内容:

  1. CEF framework 是否已正确安装在 Contents/Frameworks 目录中;
  2. 每一个嵌套的辅助程序(helper executables)是否都已完成签名;
  3. 任何 CEF 版本变更后,打包程序是否已被完全重新构建。

DMG 镜像制作

创建用于分发的磁盘镜像文件:

bash
zig build dmg

授权项 (Entitlements)

项目内置了 assets/zero-native.entitlements 作为签名授权的起点模板。您可以根据您应用的具体功能需求来自定义它(例如:网络请求、文件系统访问、摄像头访问权限等)。