MacOS,运行打包的应用和运行包的可执行文件之间的区别。

有人可以详细解释在OSX中以以下方式运行捆绑应用程序之间的区别吗:

  • 双击它
  • 在Spotlight中搜索并运行它
  • 打开 /Application/MyApp.app

或者只是在终端中运行其可执行文件:

  • $ /Application/MyApp.app/Contents/MacOS/myapp (可执行二进制文件)
1个回答

在大多数情况下,它们没有区别。然而,在每个应用程序包中都有一个Info.plist文件,其中包含有关应用程序的信息,这对Mac OS X(主要是它处理的文件类型等)非常有用。 但是,Info.plist文件还可以包含应用程序运行所需的环境信息。例如,Info.plist文件可以包含需要在可执行文件启动之前设置的环境变量。如果您自己在命令行上启动可执行文件,则这些变量将不会被设置,应用程序的行为可能会有所不同。 编辑:再详细解释一下,如果您右键单击一个应用程序并选择“显示包内容”,然后进入“Contents:MacOS”并双击该目录中的可执行图标,您也将绕过启动服务,并且Info.plist文件中的信息将被忽略。因此,您可以在Finder中执行与命令行相同的操作(当然不包括命令行选项)。

2我曾认为info.plist在所有情况下都会被读取(即使从命令行调用)。您有反面的参考或示例吗? - nohillside
2如果您在命令行上直接运行可执行文件(正如OP所要求的),则新进程是由Shell创建的,不考虑启动服务或Info.plist文件中的设置。一种演示的方法是创建一个Shell脚本,将您的主目录写入syslog,然后使用Platypus将其嵌入到应用程序包中。然后编辑Info.plist文件以覆盖$HOME环境变量。当您“启动”应用程序时,覆盖文本将显示在syslog中。但如果您在应用程序包中的命令行上运行可执行文件,它将把您的主目录写入syslog中。 - ithos67
还有一件可以包含在内容中的事情:国际化(将文本字符串翻译成其他语言)。 - WGroleau
@WGroleau 这只是捆绑包中的众多内容之一,仅仅提到这个并不是一个好主意。我认为你需要更详细地解释什么是捆绑包。例如,可以参考苹果的《捆绑包编程指南》(https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/Introduction/Introduction.html)。 - mmmmmm
其他的已经在答案中提到了。 - WGroleau