macOS 差异在“访达”和“终端”中运行应用程序

macOS differences running application in Finder and Terminal?

本文关键字:终端 应用程序 运行 访达 macOS      更新时间:2023-10-16

我正在使用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

从"访达"启动时:

    CWD:  /

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

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

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

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