打包与发布约 8 分钟
打包成带图标的 App
原始的 Mach-O 文件没有 Dock 图标。用 cargo-packager 包装该二进制文件,得到 .app、.AppImage 或 setup .exe。
原始的 Mach-O 文件没有 Dock 图标。请用 cargo-packager 来包装该二进制文件。配置:Config。CLI:docs.rs/cargo-packager。
cargo install cargo-packager --locked
生成 .icns
用一张 1024 的 PNG 生成 .icns,然后再打包。传入的是 .icns,而不是 1024 的 PNG —— cargo-packager 曾以 No matching IconType 拒绝过 1024 的 PNG。
mkdir AppIcon.iconset
sips -z 16 16 icon-1024.png --out AppIcon.iconset/icon_16x16.png
sips -z 32 32 icon-1024.png --out AppIcon.iconset/icon_16x16@2x.png
sips -z 32 32 icon-1024.png --out AppIcon.iconset/icon_32x32.png
sips -z 64 64 icon-1024.png --out AppIcon.iconset/icon_32x32@2x.png
sips -z 128 128 icon-1024.png --out AppIcon.iconset/icon_128x128.png
sips -z 256 256 icon-1024.png --out AppIcon.iconset/icon_128x128@2x.png
sips -z 256 256 icon-1024.png --out AppIcon.iconset/icon_256x256.png
sips -z 512 512 icon-1024.png --out AppIcon.iconset/icon_256x256@2x.png
sips -z 512 512 icon-1024.png --out AppIcon.iconset/icon_512x512.png
sips -z 1024 1024 icon-1024.png --out AppIcon.iconset/icon_512x512@2x.png
iconutil -c icns AppIcon.iconset -o AppIcon.icns
packager.json
Bun(单个二进制文件):
{
"productName": "My App",
"version": "0.1.0",
"identifier": "dev.example.app",
"binariesDir": "dist",
"outDir": "bundle",
"binaries": [{ "path": "app", "main": true }],
"icons": ["AppIcon.icns"],
"formats": ["app"]
}
cargo packager --release --config packager.json
open "bundle/My App.app"
Hermes 需要把 .node 放在 exe 旁边。请把它列为第二个二进制文件,而非资源。资源放在 Contents/Resources。dlopen 会在 Contents/MacOS 中查找。
{
"binaries": [
{ "path": "gpuix-hermes", "main": true },
{ "path": "gpuix-native.darwin-arm64.node", "main": false }
]
}
formats 仅针对宿主操作系统:
| OS | formats |
输出 |
|---|---|---|
| macOS | "app",然后 "dmg" |
.app,可选的 .dmg |
| Windows | "nsis" |
setup .exe |
| Linux | "appimage" |
.AppImage |
输出文件名
使用 productName: "My App"、version: "0.1.0" 以及 binaries: [{ "path": "app", "main": true }] 时,packager 会写出:
| OS | formats |
outDir(bundle/)中的文件 |
|---|---|---|
| macOS | "app" |
My App.app,签名后再生成 My App.app.tar.gz + My App.app.tar.gz.sig |
| Linux | "appimage" |
app_0.1.0_x86_64.AppImage + .sig |
| Windows | "nsis" |
app_0.1.0_x64-setup.exe + .sig |
–release 是什么
Packager 只构建宿主操作系统。请在 macOS、Linux 与 Windows 上分别运行。
--release 是 packager 的 profile(在 binariesDir 中查找 release 二进制)。它不是 cargo build --release。当设置了签名相关的环境变量时,签名会自动进行。来源:cargo-packager CLI。
加上自动更新
签名只需执行一次,接下来就可以让应用自我更新。见自动更新。