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):
- La URL lanza la aplicación que contiene AppleScript
- AppleScript lanza un shell script que bifurca el
dotnet MyApp.dll $1
en un nuevo proceso 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.