Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MacOS:未捆绑/unix可执行文件的版本信息_Macos_Finder_Info.plist_Mach O_Spotlight - Fatal编程技术网

MacOS:未捆绑/unix可执行文件的版本信息

MacOS:未捆绑/unix可执行文件的版本信息,macos,finder,info.plist,mach-o,spotlight,Macos,Finder,Info.plist,Mach O,Spotlight,这对我来说是个难题: 对于捆绑包/框架,版本位于Info.plist中 对于旧的应用程序,它位于资源分叉中 但今天我发现了一个可执行文件(LaunchDaemon),它是新的,没有资源分叉,没有Info.plist,根据Finder中的右窗格,它的版本是1.0.0.1110。问题是版本来源于哪里?据我所知,launchd和launchctl二进制文件似乎是在Finder中报告版本号的唯一二进制文件 从中,它将启动描述为直接由内核启动,“name--/sbin/launchd--硬编码为变量i

这对我来说是个难题:

  • 对于捆绑包/框架,版本位于Info.plist中
  • 对于旧的应用程序,它位于资源分叉中

但今天我发现了一个可执行文件(LaunchDaemon),它是新的,没有资源分叉,没有Info.plist,根据Finder中的右窗格,它的版本是1.0.0.1110。问题是版本来源于哪里?

据我所知,launchd和launchctl二进制文件似乎是在Finder中报告版本号的唯一二进制文件

从中,它将启动描述为直接由内核启动,“name--/sbin/launchd--硬编码为变量init_program_name”

我怀疑版本号也是硬编码的,Finder知道显示什么,否则Finder会将其视为一个特殊的已知情况

如果使用“what”命令,还可以在二进制文件中看到版本号,在我的例子中,约塞米蒂10.10.2上的版本号是2.0.0:

$ what /sbin/launchd

/sbin/launchd
PROGRAM:launchd  PROJECT:libxpc-559.10.3
VERSION:Darwin System Bootstrapper 2.0.0: Wed Nov 12 18:47:07 PST 2014; root:libxpc_executables-559.10.3~1/launchd/RELEASE_X86_64

我不知道您所指的具体LaunchDaemon程序,但对于一般情况,可以在链接时将Info.plist嵌入到可执行文件中

-sectcreate-TEXT-info-plist path/to/info.plist
传递给
ld
,或者等效地,将
-Wl,-sectcreate,\uu TEXT,\uu info-plist,path/to/info.plist
传递给编译器

这是苹果公司在年发布的文件


通过查看
otool-lV path/to/which

的输出,可以检查您所指的LaunchDaemon程序是否存在这种情况。该版本来自此路径中可执行文件的信息列表/Applications/AppName.app/Contents/Info.plist请仔细阅读我的问题。它不是捆绑的应用程序。像/usr/bin/grep(但grep没有版本信息)您的
LaunchDaemon
在哪个目录下?“我在OS X Yosemite上似乎没有一个。”MarkSetchell,我相信OP指的是/sbin/launchdyes,事实就是这样。我找到了。作为otool的输出,没有Info.plist本身,但grep中有sectname\uuuu Info\uplist。谢谢你分享这些深奥的知识。我想知道苹果为什么不在所有二进制文件中嵌入plist;我觉得奇怪的是,他们中的大多数人都没有版本信息。他们很可能会在大多数人中嵌入info.plist。正如我的链接所提到的,代码签名是必要的。只是它们可能并不都包含版本号。您将如何使用版本号?或者您可以在项目的生成设置中将二进制文件中的
创建\u INFOPLIST\u节设置设置为
,而不是
-sectcreate
选项。@0xced,您需要将
INFOPLIST\u文件
设置为
path/to/Info.plist
。它不适用于我的服务。它显示了版本1.0,但实际上它适用于launchd。还有一种模糊的方式。。。