Die MacOS-Anwendung wird nicht gestartet, wenn Sie darauf doppelklicken, aber sie wird vom Terminal aus gestartet

Ich habe ein (GUI) Python-Skript geschrieben, das eine externe Datei und ein Modul (in einem Ordner) erfordert. Um dieses Skript zur Verteilung an andere zu packen, verwende ich die folgende Anwendungsdateistruktur:

└── Contents
    ├── Info.plist
    └── MacOS
        ├── colors.py
        ├── MainScript.py
        └── <module>
            ├── <module files>

Info.plist sieht so aus:

<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>MainScript.py</string>
</dict>
</plist>

MainScript.py beginnt mit #!/usr/bin/env python3und wurde mit ausführbar gemacht chmod +x.

Wenn ich auf die .app doppelklicke, erscheint sie kurzzeitig im Dock und verschwindet dann. Der seltsame Teil ist, dass es open MyApp.appim umschließenden Ordner korrekt funktioniert (sowie ./MainScript.py im MacOS-Ordner). Was mache ich falsch?

Willkommen bei Ask Different. Das Paketieren ist unter macOS eine etwas komplizierte Situation, daher ist es hier im Allgemeinen ein Thema, wenn es sich um etwas handelt, das ein Systemadministrator oder eine motivierte Schrift tun könnte. Ich habe Ihre andere Frage zu SO migriert, da es wirklich um die Programmierung geht. Vielen Dank, dass Sie eine detaillierte / gut dokumentierte Frage gestellt haben. Lesen Sie auf jeden Fall das Hilfezentrum und Ask Different Meta, wenn Sie versucht sind, nach externen Ressourcen zu fragen (z. B. gute Bücher über Verpackungen usw.). Diese werden geschlossen, wenn sie nicht den Community-Standards entsprechen für eine nützliche Empfehlung. Dieser ist in Ordnung, also +1

Antworten (1)

Ich würde versuchen, ein Tool wie Platypus zu verwenden, um das Anwendungspaket zusammenzustellen.

Es ist möglicherweise einfacher einzugrenzen, welcher Teil der Konsolenprotokollfehler relevant ist, wenn Sie Ihr handgefertigtes App-Bundle unterscheiden und es mit dem vergleichen können, das das Tool für Sie zusammenstellt.