這是我的一個謎:的MacOS:版本信息不捆綁/ UNIX可執行
- 用於捆綁/框架版本的Info.plist
- 奠定了它在資源派生奠定了舊的應用程序
但今天我發現一個新的可執行文件(LaunchDaemon),根據Finder中的右窗格,沒有資源分支,沒有Info.plist,並且版本爲1.0.0.1110。問題是版本來源於哪裏?
這是我的一個謎:的MacOS:版本信息不捆綁/ UNIX可執行
但今天我發現一個新的可執行文件(LaunchDaemon),根據Finder中的右窗格,沒有資源分支,沒有Info.plist,並且版本爲1.0.0.1110。問題是版本來源於哪裏?
我不知道關於您所指的特定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程序。
是的,情況就是這樣。我發現。作爲otool的輸出,沒有Info.plist本身,但grep中有sectname __info_plist。感謝您分享深奧的知識 – 2015-02-24 11:27:11
這很好。我想知道爲什麼蘋果公司不會在所有的二進制文件中嵌入plist;對我來說,似乎很奇怪,版本信息不適用於大多數版本。 – TheDarkKnight 2015-02-24 11:36:26
他們可能會很好地嵌入Info.plist。正如我的鏈接所暗示的那樣,代碼簽名是必要的。只是它們可能不包含所有這些版本號。你會對版本號有什麼用處? – 2015-02-24 11:51:31
據我所知,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
它不適用於我的服務。它顯示版本1.0,但它的確適用於launchd。一個更模糊的方式... – 2015-02-24 11:28:18
該版本來自位於此路徑中的可執行文件的信息plist。 /Applications/AppName.app/Contents/Info.Plist – 2015-02-23 09:50:24
請認真閱讀我的問題。它不是一個捆綁應用程序。像/ usr/bin/grep(但grep沒有版本信息) – 2015-02-23 09:54:26
你的'LaunchDaemon'在哪個目錄?我似乎沒有一個在OS X優勝美地。 – 2015-02-23 13:42:31