MacOS, Unterschiede zwischen dem Ausführen einer gebündelten App und dem Ausführen der ausführbaren Datei des Bündels

Kann jemand die Unterschiede in OSX zwischen dem Ausführen einer gebündelten Anwendung erläutern, indem er einen der folgenden Schritte ausführt:

  • doppelklicken Sie darauf
  • Suchen Sie danach und führen Sie es im Rampenlicht aus
  • Öffnen Sie /Application/MyApp.app

oder führen Sie einfach die ausführbare Datei im Terminal aus:

  • $ /Application/MyApp.app/Contents/MacOS/myapp (die ausführbare Binärdatei)

Antworten (1)

In den meisten Fällen gibt es keinen Unterschied. In jedem App-Bundle befindet sich jedoch eine Info.plist-Datei, die Informationen über die App enthält, die (hauptsächlich) für Mac OS X nützlich sind (die Dateitypen, die sie verarbeitet, usw.).

Aber die Info.plist-Datei kann auch Informationen über die Umgebung enthalten, in der die App ausgeführt werden muss. Beispielsweise kann die Info.plist-Datei Umgebungsvariablen enthalten, die festgelegt werden müssen, bevor die ausführbare Datei gestartet wird. Wenn Sie die ausführbare Datei selbst (auf der Befehlszeile) starten, werden diese Variablen nicht festgelegt und das Verhalten der App kann anders sein.

BEARBEITEN: Um dies etwas weiter auszuführen, wenn Sie mit der rechten Maustaste auf eine App und "Paketinhalt anzeigen" klicken, dann zu "Inhalt: MacOS" navigieren und auf das ausführbare Symbol in diesem Verzeichnis doppelklicken, werden Sie auch den Start umgehen Dienste und Informationen in der Datei Info.plist werden ignoriert. Sie können also im Finder das tun, was Sie auf der Befehlszeile tun (natürlich ohne Befehlszeilenoptionen).

Ich hatte den Eindruck, dass info.plist in allen Fällen gelesen wird (auch wenn es von der Befehlszeile aus aufgerufen wird). Haben Sie eine Referenz oder ein Beispiel, das das Gegenteil zeigt?
Wenn Sie die ausführbare Datei direkt in der Befehlszeile ausführen (wie vom OP gefordert), wird der neue Prozess von der Shell ohne Rücksicht auf Launch Services oder die Einstellungen in der Datei „Info.plist“ erstellt. Eine Möglichkeit, dies zu demonstrieren, besteht darin, ein Shell-Skript zu erstellen, das Ihr Home-Verzeichnis in Syslog schreibt, und es dann mit Platypus in ein App-Bundle einzubetten. Bearbeiten Sie dann die Datei „Info.plist“, um die Umgebungsvariable „$HOME“ zu überschreiben. Wenn Sie die App starten , wird Ihr überschriebener Text im Syslog angezeigt. Wenn Sie jedoch die ausführbare Datei im Bundle über die Befehlszeile ausführen, wird Ihr Home-Verzeichnis in das Syslog geschrieben.
Was noch im Inhalt sein kann: Internationalisierung (Übersetzungen von Textstrings in andere Sprachen).
@WGroleau, das ist nur eines von vielen Dingen, die im Bundle enthalten sein können. Es ist keine gute Idee, das nur zu erwähnen. Ich denke, Sie müssen viel mehr erklären, was ein Bündel ist. zB Apples Bundle Programming Guide
Andere werden bereits in der Antwort erwähnt.