Einfügen des Shell-Skripts in das .app-Bundle

Ich versuche, ein Shell-Skript in ein Anwendungspaket zu integrieren, sodass das Shell-Skript ausgeführt wird, wenn ich opendas Paket verwende, und nicht die ausführbare Datei, die dort eingefügt wird.

Insbesondere versuche ich, einige Umgebungseinstellungen vorzunehmen, bevor ich die Binärdatei ausführe, z. B. das Setzen von Umgebungsvariablen (ich habe bereits versucht, die Umgebungsvariablen einfach in die Info.plist einzufügen, was nicht funktioniert hat, vermutlich weil MATLAB dumm ist), und wann ich cdin das Bundle und führe mein Skript manuell aus, ( ./StartMATLAB) es funktioniert; Das Programm wird gestartet und die Umgebungsvariablen werden erkannt.

open MATLAB_R2011b.appWenn ich jedoch im Finder auf die .app doppelklicke oder sie anrufe , schlägt es fehl. Wenn ich openvon der Kommandozeile aus anrufe bekomme ich:

LSOpenURLsWithRole() failed with error -10810 for the file /Applications/MATLAB_R2011b.app

Ich habe vergeblich versucht, mit der Info.plist herumzuspielen, aber ich bin nicht allzu vertraut damit, wie sie zusammengesetzt sind. Weiß jemand, warum ich opendieses Bundle nicht kann?

Danke!

BEARBEITEN: Die Info.plist für das Programm, das ich zu bearbeiten versuche, scheint eine Menge Java-bezogenes Zeug zu haben. Ich habe versucht, es zu entfernen, aber bisher kein Glück. Ich denke, das Problem liegt möglicherweise bei der .plist-Datei, da sie im Gegensatz zu jeder anderen ausführbaren Datei ein Java-basiertes Programm erwartet

Hat jemand anderes das Gefühl, dass dies eine Entwicklungsfrage ist, die besser für Stack Overflow geeignet ist?
Ich war mir nicht sicher, da es nicht speziell um Programmierung geht, aber es ist sehr Mac-bezogen

Antworten (3)

Dies funktioniert nicht für eine signierte App, aber hier ist, wie ich das zum Laufen bringen konnte:

  1. Erstellen Sie eine Kopie der App, die Sie ändern möchten, falls etwas schief geht. ( Dim Finder) Für mein Beispiel hier habe ich die Nicht-App-Store-Version von VectorDesigner modifiziert

  2. Im Terminal,cd /Applications/VectorDesigner.app/Contents/MacOS

  3. mv VectorDesigner VectorDesigner\ copy(Ersetzen Sie hier den Namen Ihrer App

  4. pico VectorDesigner(oder Ihren bevorzugten Editor) und fügen Sie den Inhalt Ihres Skripts hinzu.

    Ich habe dieses Skript verwendet

     #!/bin/sh
     osascript -e "tell Application \"Finder\" to display alert \"Hello World\""
     /Applications/VectorDesigner.app/Contents/MacOS/VectorDesigner\ copy
    

    Wichtig ist, dass die letzte Zeile die umbenannte ausführbare Datei aufruft.

  5. chmod a+x VectorDesigner

Wenn ich jetzt auf das VectorDesigner-Symbol doppelklicke, erhalte ich das "Hello World"-Fenster, dann wird das ursprüngliche Programm gestartet.

Das ist genau das, was ich oben für MATLAB getan habe, aber es schlägt stillschweigend fehl, wenn ich auf das Symbol doppelklicke (manchmal hüpft ein MATLAB-Symbol für immer im Dock, aber wenn ich darauf klicke, verschwindet es sofort) und wenn ich es openverwende schlägt mit dem oben gezeigten Fehler fehl.

Sie müssen wahrscheinlich die Dateiberechtigungen ändern, das scheint das Problem zu sein.

Terminal öffnen:

chmod +x /Applications/MATLAB_R2011b.app/Contents/MacOS/MATLAB_R2011b
Mein Gedanke auch, aber das Festlegen der Ausführungsberechtigung war Schritt 5 in einer anderen Antwort, und das OP berichtete, dass er all diese Schritte ausprobiert habe.
Ja, ich habe es bereits als ausführbar festgelegt.

Wie wäre es, anstatt das Skript in das App-Bundle zu „schleudern“, wie wäre es umgekehrt?

  1. Erstellen Sie ein Shell-Skript, das die gewünschte Umgebung einstellt, und startet dann die ursprüngliche App ( openz. B. mit). Du sagtest, das funktioniert schon.
  2. Betten Sie das Shell-Skript mit Platypus in ein neues App-Bundle ein.
  3. (optional) Betten Sie die ursprüngliche App in Ihr neues App-Bundle ein und lassen Sie Ihr Skript sie von dort aus starten.