MacOS:非 bundled/unix 可执行文件的版本信息

MacOS: Version info for not bundled/unix executables

这对我来说是一个难题:

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

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

Mac OS X and iOS Internals 开始,它将 launchd 的启动描述为直接由内核启动,并且“name -- /sbin/launchd -- 被硬编码为变量 init_program_name".

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

如果您使用 'what' 命令,您还可以在二进制文件中看到版本号,在我的例子中,它是 2.0.0 on Yosemite 10.10.2:

$ 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 程序,但对于一般情况,可以在 link 时将 Info.plist 嵌入到可执行文件中。

-sectcreate __TEXT __info_plist path/to/Info.plist 传递给 ld,或者等效地,将 -Wl,-sectcreate,__TEXT,__info_plist,path/to/Info.plist 传递给编译器。

Apple 在 Code Signing Guide: Code Signing Tasks – Adding an Info.plist to Single-File Tools 中对此进行了记录。

您可以通过查看 otool -lV path/to/whatever.

的输出来检查您所指的 LaunchDaemon 程序是否正在发生这种情况