这对我来说很难:
但是今天我发现了一个新的可执行文件(LaunchDaemon),它没有资源分支,没有Info.plist,并且根据Finder中的右窗格有1.0.0.1110版本。问题是版本来自哪里?
答案 0 :(得分:4)
我不知道您所指的具体LaunchDaemon程序,但对于一般情况,可以在链接时将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程序是否正在发生这种情况。
答案 1 :(得分:1)
就我所知,launchd和launchctl二进制文件似乎是唯一报告Finder版本号的单独二进制文件。
从Mac OS X and iOS Internals开始,它描述了启动直接由内核启动,“名称 - / sbin / launchd - 被硬编码为变量init_program_name ”。
我怀疑版本号也是以Finder知道要显示的内容的方式进行硬编码,否则Finder会将此视为特殊情况。
如果您使用'what'命令,您还可以看到二进制文件中的版本号,在我的例子中,在Yosemite 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