跳到主要内容

打包与发布约 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。

加上自动更新

签名只需执行一次,接下来就可以让应用自我更新。见自动更新。