2015-02-23 8 views
5

Es ist ein Puzzle für mich:MacOS: Versionsinfo für nicht gebündelt/Unix-Executables

  • für Bundles/Frameworks Version in Info.plist
  • für alte Anwendungen legt sie in Ressource-Zweig legt

Aber heute habe ich eine ausführbare Datei (LaunchDaemon) gefunden, die neu ist, keine Ressourcenzweig hat, keine Info.plist hat und die Version 1.0.0.1110 gemäß dem rechten Fenster im Finder hat. Die Frage ist, woher stammt die Version?

+0

Die Version stammt aus dem Info-Plist der ausführbaren Datei in diesem Pfad. /Applications/AppName.app/Contents/Info.Plist –

+0

Bitte lesen Sie meine Frage aufmerksam. Es ist keine gebündelte Anwendung. wie/usr/bin/grep (aber grep hat keine Versionsinformationen) –

+0

In welchem ​​Verzeichnis befindet sich Ihr 'LaunchDaemon'? Ich habe anscheinend keine auf OS X Yosemite. –

Antwort

4

Ich weiß nicht, über das spezifische LaunchDaemon-Programm, auf das Sie sich beziehen, aber für den allgemeinen Fall ist es möglich, eine Info.plist zur Linkzeit in eine ausführbare Datei einzubetten.

Übergeben Sie -sectcreate __TEXT __info_plist path/to/Info.plist an ld oder, gleichwertig, übergeben Sie -Wl,-sectcreate,__TEXT,__info_plist,path/to/Info.plist an den Compiler.

Dies wird von Apple in Code Signing Guide: Code Signing Tasks – Adding an Info.plist to Single-File Tools dokumentiert.

Sie können überprüfen, ob das mit dem LaunchDaemon-Programm, auf das Sie sich beziehen, geschieht, indem Sie auf die Ausgabe von otool -lV path/to/whatever schauen.

+0

Ja, das ist der Fall. Ich fand. Als Ausgabe von otool gibt es keine Info.plist selbst, aber es gibt Sektenname __info_plist in grep. Danke für das Teilen des esoterischen Wissens –

+0

Das ist gut zu wissen. Ich frage mich, warum Apple sich nicht die Mühe macht, alle seine Binärdateien in ein Programm einzubetten. Es scheint mir seltsam zu sein, dass Versionsinformationen für die meisten von ihnen nicht verfügbar sind. – TheDarkKnight

+0

Sie könnten sehr gut eine Info.plist in die meisten einbetten. Wie mit meinem Link angedeutet, ist es notwendig, Code zu signieren. Es ist nur so, dass sie in allen keine Versionsnummer enthalten. Was nützt Ihnen die Versionsnummer? –

1

Die Binärdateien launchd und launchctl scheinen die einzigen einzelnen Binärdateien zu sein, die die Versionsnummer im Finder melden, soweit ich das beurteilen kann.

Von Mac OS X and iOS Internals, es beschreibt die Inbetriebnahme von launchd als direkt vom Kernel zu sein und die "Name -/sbin/launchd - ist hart wie die Variable init_program_name codiert".

Ich vermute, dass die Versionsnummer auch in einer Weise hart-codiert ist, in der Finder weiß, was angezeigt wird, andernfalls behandelt Finder dies als einen speziellen bekannten Fall.

Wenn Sie das ‚was‘ Befehl verwenden, können Sie auch die Versionsnummer in der binären sehen, die in meinem Fall 2.0.0 auf Yosemite 10.10.2 ist:

$ 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

Es funktioniert nicht für meinen Dienst. Es zeigt Version 1.0, aber tatsächlich funktioniert es für launchd. noch ein vager Weg ... –