La aplicación MacOS no se inicia cuando se hace doble clic, pero se inicia desde la terminal

He escrito un script Python (GUI) que requiere un archivo externo y un módulo (en una carpeta). Para empaquetar este script para distribuirlo a otros, estoy usando la siguiente estructura de archivos de aplicación:

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

Info.plist se ve así:

<!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 comienza con #!/usr/bin/env python3y se hizo ejecutable con chmod +x.

Cuando hago doble clic en la aplicación, aparece momentáneamente en el muelle y luego desaparece. La parte extraña es que open MyApp.appfunciona correctamente cuando está en la carpeta adjunta (así como ./MainScript.py cuando está en la carpeta MacOS). ¿Qué estoy haciendo mal?

Bienvenido a Preguntar Diferente. El empaquetado es una situación algo complicada en macOS, por lo que, en general, es un tema aquí si es algo que un administrador del sistema o una escritura motivada podría hacer. Migré su otra pregunta a SO ya que realmente es la programación como el punto principal. Gracias por hacer una pregunta detallada / bien documentada. Asegúrese de leer el centro de ayuda y Pregunte a Different Meta si tiene la tentación de preguntar sobre recursos fuera del sitio (por ejemplo, buenos libros sobre empaques, etc.) - esos se cierran si no están a la altura de los estándares de la comunidad para una recomendación útil. Este esta bien asi que +1

Respuestas (1)

Una cosa que intentaría es usar una herramienta como Platypus para ayudar a ensamblar el paquete de aplicaciones.

Puede ser más fácil reducir qué parte de los errores de registro de la consola son relevantes si puede diferenciar su paquete de aplicaciones hecho a mano y compararlo con el que la herramienta ensambla para usted.