#bundle #cargo-toml #cargo #installer #executable #applications #macos

app cargo-bundle

将 Rust 可执行文件封装成操作系统特定的应用程序包

8 个版本 (重大更新)

0.6.1 2024年8月17日
0.6.0 2022年3月22日
0.5.0 2020年6月21日
0.4.0 2018年10月19日
0.0.0 2016年3月22日

#39Cargo 插件

Download history 565/week @ 2024-05-04 548/week @ 2024-05-11 641/week @ 2024-05-18 524/week @ 2024-05-25 424/week @ 2024-06-01 383/week @ 2024-06-08 335/week @ 2024-06-15 356/week @ 2024-06-22 379/week @ 2024-06-29 516/week @ 2024-07-06 469/week @ 2024-07-13 605/week @ 2024-07-20 532/week @ 2024-07-27 442/week @ 2024-08-03 400/week @ 2024-08-10 796/week @ 2024-08-17

每月 2,254 次下载

MIT/Apache 协议

160KB
3.5K SLoC

Cargo bundle

Build Status

将 Rust 可执行文件封装成操作系统特定的应用程序包

关于

cargo-bundle 是一个工具,用于生成使用 cargo 构建的 GUI 可执行文件的安装程序或应用程序包。它可以创建适用于 Mac OS X 和 iOS 的 .app 应用程序包,适用于 Linux 的 .deb 软件包,以及适用于 Windows 的 .msi 安装程序(请注意,iOS 和 Windows 的支持仍然是实验性的)。创建适用于 Linux 的 .rpm 软件包和适用于 Android 的 .apk 软件包的支持仍在等待中。

要安装 cargo bundle,请运行 cargo install cargo-bundle。这将把在 crates.io 上发布的最新版本的 cargo-bundle 作为子命令添加到您的默认 cargo 安装中。

要开始使用 cargo bundle,请将 [package.metadata.bundle] 部分添加到您的项目 Cargo.toml 文件中。此部分描述了生成的包的各种属性,例如其名称、图标、描述、版权以及您需要生成额外数据的任何包装脚本。完整的清单格式如下。

为当前操作系统构建一个捆绑包,只需在项目目录(其中放置了Cargo.toml)中运行cargo bundle即可。如果您想创建一个发布版本捆绑包,必须在您的调用中添加--release标志。要为另一个操作系统交叉编译并捆绑应用程序,添加适当的--target标志,就像您为cargo build做的那样。

标志

--all-features           Build a bundle with all crate features.
--bin <NAME>             Bundle the specified binary
--example <NAME>         Bundle the specified example
--features <FEATURES>    Set crate features for the bundle. Eg: `--features "f1 f2"`
--format <FORMAT>        Which bundle format to produce [possible values: deb, ios, msi, osx, rpm]
-h, --help                   Prints help information
--no-default-features    Build a bundle without the default crate features.
--profile <NAME>         Build a bundle from a target build using the given profile
--release                Build a bundle from a target built in release mode
--target <TRIPLE>        Build a bundle for the target triple

目标

aarch64-unknown-linux-gnu	ARM64 Linux (kernel 4.1, glibc 2.17+) 1
i686-pc-windows-gnu	        32-bit MinGW (Windows 7+) 2 3
i686-pc-windows-msvc	    32-bit MSVC (Windows 7+) 2 3
i686-unknown-linux-gnu	    32-bit Linux (kernel 3.2+, glibc 2.17+) 3
x86_64-apple-darwin	        64-bit macOS (10.12+, Sierra+)
x86_64-pc-windows-gnu	    64-bit MinGW (Windows 7+) 2
x86_64-pc-windows-msvc	    64-bit MSVC (Windows 7+) 2
x86_64-unknown-linux-gnu	64-bit Linux (kernel 3.2+, glibc 2.17+)

捆绑清单格式

[package.metadata.bundle]部分有几个字段。

通用设置

这些设置适用于所有(或大多数)操作系统捆绑包。

  • name:构建的应用程序的名称。如果不存在,则将使用Cargo.toml文件中bin目标下的name值。
  • identifier:[必需] 一个以反向DNS形式唯一标识您的应用程序的字符串(例如,"com.example.appname""io.github.username.project")。对于OS X和iOS,这用作捆绑包的CFBundleIdentifier值;对于Windows,它将被散列以创建应用程序GUID。
  • icon:[可选] 用来表示您的应用程序的图标。这应该是一个文件路径或glob的数组(包含各种大小/格式的图像);cargo-bundle将自动在不同平台之间转换所需的图像格式。支持的格式包括ICNS、ICO、PNG以及可以被image包解码的任何格式。用于高分辨率显示(例如,Retina)的图标应在扩展名之前带有@2x(见下例)。
  • version:[可选] 应用程序的版本。如果不存在,则将使用您的Cargo.toml文件中的version值。
  • resources:[可选] 要复制到捆绑包资源部分的文件或目录列表。支持glob。
  • script:[可选] 这是一个保留字段;目前它没有用于任何目的,但可能用于在捆绑捆绑包时运行脚本(例如,下载文件、压缩和加密等)。
  • copyright:[可选] 这包含与您的应用程序相关的版权字符串。
  • category:[可选] 这是什么类型的应用程序。这可以是一个人类可读的字符串(例如,"Puzzle game"),或Mac OS X LSApplicationCategoryType值(例如,"public.app-category.puzzle-games"),或GNOME桌面文件分类名称(例如,"LogicGame"),cargo-bundle将自动根据不同平台进行转换。
  • short_description:[可选] 应用程序的简短、一行描述。如果不存在,则使用您 Cargo.toml 文件中的 description 值。
  • long_description:[可选] 应用程序的较长、多行描述。

注意:description[package] 部分也是必需的。

针对 Linux 的特定设置

这些设置仅在打包与 Linux 兼容的包(目前仅支持 deb)时使用。

  • linux_mime_types:表示 MIME 类型的字符串列表。如果存在,这些将分配给 .desktop 文件的 MimeType 字段。
  • linux_exec_args:在 .desktop 文件的 Exec 字段中插入到二进制名称之后的单个字符串。例如,如果二进制名称为 my_program,并且 linux_exec_args = "%f",则 Exec 字段将为 Exec = my_program %f。更多信息请参阅 规范
  • linux_use_terminal:表示应用程序是控制台应用程序还是 GUI 应用程序的布尔变量,默认设置为 false。

针对 Debian 的特定设置

这些设置仅在打包 deb 包时使用。

  • deb_depends:表示此包依赖的其他包(例如共享库)的字符串列表。如果存在,这将为 deb 包控制文件中的 Depends: 字段形成。

针对 Mac OS X 的特定设置

这些设置仅在打包 osx 包时使用。

  • osx_frameworks:表示需要与应用程序一起打包的任何 Mac OS X 框架的字符串列表。每个字符串可以是框架的名称(不带 .framework 扩展名,例如 "SDL2"),在这种情况下,cargo-bundle 将在标准安装位置(~/Library/Frameworks//Library/Frameworks//Network/Library/Frameworks/)中搜索该框架,或者是一个特定框架捆绑包的路径(例如 ./data/frameworks/SDL2.framework)。请注意,此设置仅使 cargo-bundle 将指定的框架复制到 OS X 应用程序捆绑包中(位于 Foobar.app/Contents/Frameworks/);您仍然负责(1)安排编译的二进制文件链接到这些框架(例如,通过在 build.rs 脚本中发出类似 cargo rustc -C link-lib=framework=SDL2 的行),以及(2)在二进制文件中嵌入正确的 rpath(例如,通过编译后运行 install_name_tool -add_rpath "@executable_path/../Frameworks" path/to/binary)。

  • osx_minimum_system_version:表示捆绑的应用程序支持的最低Mac OS X版本的版本字符串(例如:"10.11")。如果您正在使用此配置字段,您可能还希望您的 build.rs 脚本输出 cargo:rustc-env=MACOSX_DEPLOYMENT_TARGET=10.11(或您想要的任何版本号),以确保编译的二进制文件具有相同的最低版本。

  • osx_url_schemes:表示应用程序处理的URL方案的字符串列表。

  • 注意:GitHub Actions和Bitbucket Pipelines都提供免费的Apple MacOS构建运行程序/容器。

示例 Cargo.toml

[package]
name = "example"
# ...other fields...

[package.metadata.bundle]
name = "ExampleApplication"
identifier = "com.doe.exampleapplication"
icon = ["32x32.png", "128x128.png", "[email protected]"]
version = "1.0.0"
resources = ["assets", "images/**/*.png", "secrets/public_key.txt"]
copyright = "Copyright (c) Jane Doe 2016. All rights reserved."
category = "Developer Tool"
short_description = "An example application."
long_description = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.  Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
"""
deb_depends = ["libgl1-mesa-glx", "libsdl2-2.0-0 (>= 2.0.5)"]
osx_frameworks = ["SDL2"]
osx_url_schemes = ["com.doe.exampleapplication"]

贡献

cargo-bundle 有志于成为一个包容性的项目,并欢迎任何人的贡献。请遵守Rust行为准则。

状态

非常早期的alpha版本。预期 [package.metadata.bundle] 部分的格式将会改变,且没有稳定性保证。

许可协议

本程序许可协议为Apache软件许可协议或MIT许可协议。

依赖

~14-26MB
~452K SLoC