代码签名 (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 | 签名模式:none、adhoc 或 identity |
--identity | 代码签名证书(Identity)的完整名称 |
--entitlements | 授权文件(entitlements)的路径(例如:assets/zero-native.entitlements) |
--team-id | Apple 开发者团队 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.appChromium 应用
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 拦截并拒绝运行您的应用,请检查以下内容:
- CEF framework 是否已正确安装在
Contents/Frameworks目录中; - 每一个嵌套的辅助程序(helper executables)是否都已完成签名;
- 任何 CEF 版本变更后,打包程序是否已被完全重新构建。
DMG 镜像制作
创建用于分发的磁盘镜像文件:
bash
zig build dmg授权项 (Entitlements)
项目内置了 assets/zero-native.entitlements 作为签名授权的起点模板。您可以根据您应用的具体功能需求来自定义它(例如:网络请求、文件系统访问、摄像头访问权限等)。