我的情况和这篇文章的一样……
https://users.rust-lang.org/t/running-rust-app-without-showing-the-terminal/41859
... 上面链接中的发帖者可以在 Windows 中运行 Rust 二进制文件,但随着二进制文件的打开,终端窗口也会打开。在那篇文章中,有人提到了一种解决方法,确实有帮助。
在我的 Mac M1 上,我使用以下方法编译 Rust 二进制文件...
cargo build --target aarch64-apple-darwin --release
...二进制 GUI 打开得很好,但终端也显示了出来。
如何防止终端打开?
在 macOS 上,如果您打开一个裸可执行文件,则它被认为是一个命令行程序,应该有一个终端。要制作一个没有终端的正确 GUI 应用程序,您需要创建一个
.app
包。最小可行结构
.app
实际上非常简单,不需要任何特殊工具来创建。创建此目录结构:出于开发目的,可执行文件可以是指向 Rust
target/
目录中可执行文件的符号链接或 shell 脚本(但您分发的应用程序应该是自包含的)。在该
Info.plist
文件中,你应该输入:plist
<dict>
由键值对组成,因此这里的字典中有两个条目;如果假设它们是用 JSON 编写的(你实际上不能这样做),它们看起来会像这样:<string>
(替换上例中的“your-executable-goes-here”)的值必须CFBundleExecutable
是您放入的可执行文件的文件名Contents/MacOS/
。<string>
的值(CFBundleIdentifier
替换上例中的“com.example.your-app-name”)应为您的应用程序以反向 DNS 名称形式的唯一标识符 — 也就是说,如果您拥有域名example.com
,则可以使用以 开头的标识符com.example.
。 重要的是CFBundleIdentifier
是唯一的(同一应用程序的不同版本除外)。如果您希望应用程序有一个图标,或者能够用来打开文档,那么您需要在
Info.plist
文件中放入更多内容。(在 macOS 上,打开的文档不是作为命令行参数传递的,而是作为传递到事件循环的事件传递的。)