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。还有一种模糊的方式。。。