Mac M1环境下运行Rust GUI程序如何隐藏终端窗口?
Mac M1 下 Rust GUI 程序避免终端窗口弹出的解决方法
方法一:通过编译参数指定GUI程序属性
macOS默认将Rust编译的二进制标记为控制台程序,运行时会自动唤起终端。我们可以通过添加plist属性将其改为GUI程序:
- 在项目根目录创建
Info.plist文件,写入以下内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>LSUIElement</key> <true/> </dict> </plist>
LSUIElement设为true会让程序不显示Dock图标且不唤起终端,适合纯后台GUI程序;若需要保留Dock图标,将true改为false即可。
- 直接使用带链接参数的编译命令:
cargo rustc --target aarch64-apple-darwin --release -- -C link-arg=-Wl,-sectcreate,__TEXT,__info_plist,$(pwd)/Info.plist
方法二:通过build.rs自动注入配置
如果希望每次编译自动应用配置,可通过build脚本实现:
- 修改
Cargo.toml,添加build脚本配置:
[package] # 保留原有配置,新增以下行 build = "build.rs"
- 在项目根目录创建
build.rs文件:
fn main() { println!("cargo:rustc-link-arg=-Wl,-sectcreate,__TEXT,__info_plist,Info.plist"); }
- 确保
Info.plist已按方法一创建,然后正常编译:
cargo build --target aarch64-apple-darwin --release
方法三:打包成标准.app应用包
将程序打包成macOS原生的.app包,运行时不会唤起终端,同时支持Dock图标等系统特性:
- 安装cargo-bundle工具:
cargo install cargo-bundle
- 修改
Cargo.toml,添加打包配置(替换为你的应用信息):
[[bin]] name = "your_app_name" path = "src/main.rs" [package.metadata.bundle] name = "YourAppName" identifier = "com.yourdomain.yourapp" version = "0.1.0" # 可选:添加图标,需提前准备.icns格式图标文件 icon = ["assets/icon.icns"]
- 执行打包命令:
cargo bundle --target aarch64-apple-darwin --release
- 生成的.app包位于
target/aarch64-apple-darwin/release/bundle/osx/目录下,双击运行即可。
内容的提问来源于stack exchange,提问作者JimMosher
相关产品推荐
相关产品推荐

