macOS差异在Finder和Terminal中运行的应用程序?

时间:2019-04-09 18:45:58

标签: c++ macos terminal

我正在使用Qt Creator开发C ++应用程序。当我在Finder中查看时,会看到以下输出:

    build-XMLMPAM-Desktop_Qt_5_11_2_clang_64bit-Debug

此文件夹包含目标文件“ moc” cpp文件。在取景器中,我看到了该应用程序:

    XMLMPAM.app

虽然我可以从Finder启动它,但是当我打开终端时,它实际上是一个文件夹。包含文件和子文件夹。

要从终端启动应用程序,我必须输入:

    ~/build-XMLMPAM-Desktop_Qt_5_11_2_clang_64bit-Debug/XMLMPAM.app/Contents/MacOS/XMLMPAM

我正在从应用程序报告CWD:

从终端或Qt Creator调试器启动时:

    CWD:  /Users/Simon/build-XMLMPAM-Desktop_Qt_5_11_2_clang_64bit-Debug/XMLMPAM.app/Contents/MacOS

从Finder启动时:

    CWD:  /

我对此感到困惑,这是怎么回事?

1 个答案:

答案 0 :(得分:4)

XMLMPAM.app这样的macOS应用程序确实是一个文件夹。在Apple术语中,它称为 bundle 。这是具有操作系统和其他实用程序可以识别的特定结构的目录。实际的可执行程序文件位于捆绑软件的Contents / MacOS子文件夹内。那是Finder定位它的地方。 Finder假装它是一个内聚的“文件”,但是您也可以通过右键单击“显示包内容”进入捆绑软件。

如果要从终端模拟Finder行为,请运行open XMLMPAM.appopen -a XMLMPAM

如果要获取包的路径或其中的任何文件,可以使用NSBundle class的方法。例如:NSBundle.mainBundle.executableURL.path应该为您提供应用程序可执行文件的完整路径。