2015-02-23 32 views
5

这是我的一个谜:的MacOS:版本信息不捆绑/ UNIX可执行

  • 用于捆绑/框架版本的Info.plist
  • 奠定了它在资源派生奠定了旧的应用程序

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

+0

该版本来自位于此路径中的可执行文件的信息plist。 /Applications/AppName.app/Contents/Info.Plist – 2015-02-23 09:50:24

+0

请认真阅读我的问题。它不是一个捆绑应用程序。像/ usr/bin/grep(但grep没有版本信息) – 2015-02-23 09:54:26

+0

你的'LaunchDaemon'在哪个目录?我似乎没有一个在OS X优胜美地。 – 2015-02-23 13:42:31

回答

4

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

通过-sectcreate __TEXT __info_plist path/to/Info.plistld或等同地将-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程序。

+0

是的,情况就是这样。我发现。作为otool的输出,没有Info.plist本身,但grep中有sectname __info_plist。感谢您分享深奥的知识 – 2015-02-24 11:27:11

+0

这很好。我想知道为什么苹果公司不会在所有的二进制文件中嵌入plist;对我来说,似乎很奇怪,版本信息不适用于大多数版本。 – TheDarkKnight 2015-02-24 11:36:26

+0

他们可能会很好地嵌入Info.plist。正如我的链接所暗示的那样,代码签名是必要的。只是它们可能不包含所有这些版本号。你会对版本号有什么用处? – 2015-02-24 11:51:31

1

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

Mac OS X and iOS Internals,它描述为内核和直接抵的launchd的启动“名字 -/sbin目录/的launchd - 是硬编码为变量init_program_name”。

我怀疑版本号也是以Finder知道要显示的方式进行硬编码的,否则Finder会将其视为一个特殊的已知案例。

如果使用“内容”命令,你也可以看到在二进制,这于我而言,是2.0.0在约塞米蒂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 
+0

它不适用于我的服务。它显示版本1.0,但它的确适用于launchd。一个更模糊的方式... – 2015-02-24 11:28:18