如何在Mac OSX中隐藏终端窗口?

6
我有一个跨平台应用程序,可以在Windows、Linux、Android和Mac上运行。它在所有平台上都使用g++编译。
对于Windows,我创建了一个安装程序,并通过添加链接器标志来消除终端窗口:
-Wl,--subsystem,windows

我希望在Mac上找到类似的选项。当我从GUI打开可执行文件时,如何摆脱控制台窗口?

这个问题与如何在Mac OS(gcc编译器)中隐藏控制台窗口?相似,只是我的应用程序不是守护程序。

谢谢。


4
你的应用程序是如何启动的?通常在Mac上,如果通过双击图标启动应用程序,不会出现终端窗口(因此也不需要隐藏终端窗口)。 - Jeremy Friesner
4
除非该程序只是一个Unix可执行文件,否则双击其图标将启动终端并将其路径作为命令(从而运行它)。Matferib 应该做的是在他的可执行文件周围构建一个应用程序包。 - Ken Thomases
1个回答

16

根据您的描述,您正在构建一个类Unix可执行文件。在OS X上,这些文件将始终在终端窗口中启动。您在OS X上的选择有:

  • 按照上面链接的帖子所述作为守护进程运行
  • 作为Unix可执行文件在终端中运行
  • 创建一个最小的OS X应用程序包装器并作为OS X应用程序运行

在大多数情况下,您可以通过使用Apple的Bundle编程指南中的说明创建适当的Bundle来为类Unix可执行文件创建包装器(跳过iOS部分,查看Mac bundle信息)。

基本目录结构如下:

MyApp.app/
  Contents/
    Info.plist
  MacOS/
    executable
  Resources/
    MyApp.icns

您的未经修改的可执行文件可以放在 MacOS 目录中,并且您需要使用 plist 编辑工具或编辑器在 Info.plist 中设置以下密钥:

  • CFBundleIdentifier - 应用程序的 id,以反向 DNS 表示法表示 (com.mycompany.myapp)
  • CFBundleDisplayName - 应用程序的人类可读名称 (MyApp)
  • CFBundleName - 应用程序的短名称(通常与应用程序和可执行文件名称相同)
  • CFBundleVersion - 您的版本号,采用 X.Y[.Z] 形式
  • CFBundlePackageType - 包类型,应为应用程序的 APPL
  • CFBundleExecutable - 您的可执行文件名称
  • CFBundleSignature - 旧版 Apple 签名(4 个字符代码,理论上应该向 Apple 注册)

最简单的 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>CFBundleDisplayName</key>
    <string>MyApp</string>
    <key>CFBundleExecutable</key>
    <string>a.out</string>
    <key>CFBundleIdentifier</key>
    <string>com.mycompany.myapp</string>
    <key>CFBundleName</key>
    <string>MyApp</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleSignature</key>
    <string>FOOZ</string>
    <key>CFBundleVersion</key>
    <string>1.0</string>
</dict>
</plist>

(以上示例使用a.out作为可执行文件,该文件将位于MyApp.app/Contents/MacOS/a.out中)

如果您不在意图标,则可以省略图标资源,将使用默认应用程序图标。


经过大量调查,似乎这是唯一的方法。对于我的应用程序来说,情况变得更加复杂,因为它将文件保存到其中一个内部文件夹中。所以我想我必须创建一个包装器来包装我的文件库,并在Mac的情况下将其保存到其他地方。感谢您的答案。 - Matferib
1
是的,在 Mac 上这有点棘手。通常,您需要考虑保存在用户的 ~/Library/Application Support/ 文件夹中,以符合正常的 Mac 行为。 - gaige

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接