2015-02-23 2 views
5

Это загадка для меня:MacOS: Информация о версии для не поставляется/Unix исполняемые файлы

  • для пачек/Каркасы версия лежит в Info.plist
  • для старых приложений он лежит в вилке ресурсов

Но сегодня я нашел исполняемый файл (LaunchDaemon), который является новым, не имеет ресурса fork, не имеет Info.plist и имеет версию 1.0.0.1110 согласно правой панели в Finder. Вопрос в том, откуда взялась версия?

+0

Версия поставляется с информационного слоя исполняемого файла, расположенного на этом пути. /Applications/AppName.app/Contents/Info.Plist –

+0

внимательно прочитайте мой вопрос. Это не приложение в комплекте. например,/usr/bin/grep (но grep не имеет информации о версии) –

+0

В каком каталоге находится ваш LaunchDaemon? Кажется, у меня нет OS X Yosemite. –

ответ

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.

Вы можете проверить, что происходит с программой LaunchDaemon, на которую вы ссылаетесь, просмотрев вывод otool -lV path/to/whatever.

+0

да, это так. Я нашел. в качестве вывода otool нет самого Info.plist, но в grep есть секция __info_plist. Спасибо, что поделились эзотерическими знаниями. –

+0

Это полезно знать. Интересно, почему Apple не беспокоится о внедрении plist во всех своих двоичных файлах? Мне кажется странным, что информация о версии недоступна для большинства из них. – TheDarkKnight

+0

В большинстве случаев они могут вставлять Info.plist. Как указано в моей ссылке, это необходимо для подписи кода. Просто они не могут включать номер версии во всех них. Каким будет использование номера версии? –

1

Демонстрационные файлы launchd и launchctl являются единственными одиночными бинарниками, которые сообщают номер версии в Finder, насколько я могу судить.

С Mac OS X and iOS Internals, он описывает запуск запуска программ как непосредственно ядро ​​и «имени -/SBIN/запуск программ - закодировано в качестве переменной 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. еще один смутный способ ... –

Смежные вопросы