Estou com a mesma situação deste post...
https://users.rust-lang.org/t/running-rust-app-without-showing-the-terminal/41859
... onde o pôster no link acima pode executar o binário Rust no Windows, mas junto com o binário, uma janela do Terminal também abre. Naquela postagem, alguém mencionou uma solução alternativa, que ajudou.
No meu Mac M1 eu compilo o binário Rust com...
cargo build --target aarch64-apple-darwin --release
... e a interface gráfica binária abre normalmente, mas o Terminal também é exibido.
Como faço para impedir que o Terminal abra?
No macOS, se você abrir um arquivo executável vazio, ele será considerado um programa de linha de comando que deve obter um terminal. Para criar um aplicativo GUI adequado sem terminal, você precisa criar um
.app
bundle.A estrutura mínima viável para um
.app
é, na verdade, bem simples e não requer nenhuma ferramenta especial para ser criada. Crie esta estrutura de diretório:Para fins de desenvolvimento, o executável pode ser um link simbólico ou script de shell que se refere ao executável no seu
target/
diretório Rust (mas um aplicativo que você está distribuindo deve ser autocontido).No
Info.plist
arquivo, você deve colocar:Um plist
<dict>
é composto de pares chave-valor, então há duas entradas no dict aqui; se hipoteticamente elas fossem escritas em JSON (na verdade, você não pode fazer isso), elas se pareceriam com:O
<string>
valor paraCFBundleExecutable
(substituindo "seu-executável-vai-aqui" no exemplo acima) deve ser o nome do arquivo executável que você colocou emContents/MacOS/
.O
<string>
valor paraCFBundleIdentifier
(substituindo "com.example.your-app-name" no exemplo acima) deve ser um identificador exclusivo para seu aplicativo na forma de um nome DNS reverso — ou seja, se você possui o nome de domínio,example.com
então você pode usar identificadores começando comcom.example.
. É importante que oCFBundleIdentifier
seja exclusivo (exceto para versões diferentes do mesmo aplicativo).Se você deseja que seu aplicativo tenha um ícone ou possa ser usado para abrir documentos, será necessário colocar mais coisas no
Info.plist
arquivo. (No macOS, documentos abertos não são passados como argumentos de linha de comando, mas como eventos entregues ao loop de eventos.)