2015-02-23 40 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