2 votos

Lanzamiento del ejecutable de .NET Core cuando se abre una URL personalizada

Tengo una aplicación .NET Core que necesita ser abierta desde una URL personalizada. Se le pasaría algo como myapp:<base64 params> y esto tendría que abrir la aplicación.

Actualmente, tengo una configuración más o menos así (soy principalmente un desarrollador de Windows y realmente no he tocado Mac en absoluto, Linux estoy más familiarizado con, pero todavía no se siente cómodo trabajando en):

  1. La URL lanza la aplicación que contiene AppleScript
  2. AppleScript lanza un shell script que bifurca el dotnet MyApp.dll $1 en un nuevo proceso
  3. MyApp.dll lanza con el parámetro suministrado

El problema parece ser el lanzador de AppleScript, ya que al lanzar el shell script manualmente con los parámetros la aplicación se abre y funciona normalmente. Pero al lanzar la URL desde un navegador (Chrome) el icono aparece y desaparece rápidamente en el dock, y el programa no se ejecuta. No tengo ni idea de cómo depurar algo así ya que nunca he trabajado propiamente con un Mac y no sé si hay un visor de eventos o algo por el estilo (normalmente comprobar el visor de eventos sería mi paso 1 en Windows).

Los scripts que estoy utilizando:

AppleScript (que luego se convierte en una aplicación utilizando el exportador incorporado):

on open location this_URL
    do shell script "/Library/MyApp/Launcher " & this_URL
end open location

He editado el Info.plist de la aplicación generada para añadir el gestor de URLs personalizadas:

...
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.myapp.urlhandler</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string>
        </array>
    </dict>
</array>
...

El shell script (sin extensión sh) que se utiliza para lanzar la dll:

#!/usr/bin/env bash
( ( ( dotnet /Library/MyApp/AppFiles/MyApp.dll $1 ) & ) & )

Nota al margen: El shell script se bifurca una vez más de lo que debería ser necesario, pero sin la bifurcación extra se rompe .NET por alguna razón. También hay que añadir el & después de la $1 parece causar problemas con el manejo de argumentos de .NET.

He comprobado que todos los archivos están en los lugares correctos, y al cortar el AppleScript se ejecuta normalmente, pero no estoy seguro de cómo depurar los problemas del AppleScript. Yo tenía que trabajar antes de que el AppleScript lanzaría directamente la DLL, pero que causó una ventana de la consola que matar a la aplicación cuando se cierra, y tratando de bifurcarse en allí no parecía funcionar.

¿Existe una forma mejor de hacer esto o una solución que pueda utilizar para lanzar la aplicación desde una URL personalizada sin los bits de shell y/o AppleScript?

ACTUALIZACIÓN: Resuelto según mi respuesta de abajo. SE no me deja aceptarlo hasta dentro de 2 días.

2voto

Riccorbypro Puntos 21

Así que resulta que a Apple no le gusta que tengas varias copias de una aplicación como copias de seguridad.

Por lo general, cuando estoy haciendo este tipo de trabajo ejecutable / paquete, guardo copias de seguridad, tales como BAK1_Package.exe , BAK2_Package.exe etc.

Parece que si tienes más de un .app registrado en un manejador de URL en cualquier lugar en su sistema, entonces el Mac utiliza uno de ellos, y no específicamente el que está en la carpeta de Aplicaciones. Así que cuando intenté lanzar la URL, en lugar de lanzar la aplicación más reciente que estaba colocada dentro de la carpeta de Aplicaciones, estaba lanzando la primera que estaba en la carpeta _BACKUP en mi escritorio.

Para cualquier otra persona que se encuentre con un problema similar a este: asegúrese de que sólo tiene un .app registrado en ese controlador de URL.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X