Mi objetivo es incluir en un archivo zip lo que equivale a un acceso directo, en lugar de decirles a mis clientes que abran Terminal y ejecuten un script de shell.
Mi despliegue esencialmente se ve así:
$ unzip Deliverable.zip 
$ cd Deliverable; ls
app.jar run.sh
Guión en run.sh:
#!/bin/sh
java -jar app.jar
Hay mucho más en el directorio; basta con decir que necesito ejecutar el script desde el directorio Entregable ya que necesito acceder a las rutas relativas a él. Sin embargo, no puedo garantizar dónde se abrirá un cliente Deliverable.zip(podría ser el directorio de inicio, podría estar justo en el directorio de Descargas, etc.)
Encontré esto que describe cómo crear un nuevo flujo de trabajo en Automator, luego guardarlo como una aplicación para iniciar un script de shell. Traté de hacer eso para envolver run.shpero dice que no puede encontrar run.sh.
Alguien sugirió que usara AppleScript y también me envió un enlace sobre cómo usar Applecript para cambiar al directorio actual; hay una "acción" de applecript en el automatizador; así que hice un nuevo flujo de trabajo con eso y lo guardé como una aplicación. Así es como se ve:
El código:
on run {input, parameters}
    tell application "Finder"
        set current_path to container of (path to me) as alias
    end tell
    do shell script "java -jar app.jar" 
    return input
end run
Y este es el error que obtengo cuando lo ejecuto:
Vamos, esto debería ser bastante simple. ¿Qué estoy haciendo mal aquí?
fuente



Respuestas:
Cambie el nombre de su archivo .sh a .command y puede cd al directorio en el que se encuentra el archivo .command con lo siguiente al comienzo del archivo:
fuente
Puedo ver un par de cosas mal allí.
En primer lugar, ha abierto un flujo de trabajo y no una aplicación.
Debe elegir Aplicación cuando realice su selección para el tipo de archivo Automator.
Y el código que tiene no funcionará como espera, ya que no ha cambiado el directorio. (discos compactos).
En el código tal como lo tiene, todo lo que está haciendo es obtener la ruta como un alias y almacenarla en la variable current_path y en un formato inadecuado para los comandos unix.
Pero no lo usas.
Por lo tanto, el directorio actual probablemente sea su carpeta de inicio
En esta etapa no se sabe lo que está tratando de lanzar.
Si lo ejecuto como lo tienes, me sale.
Lo cual tiene sentido ya que no tengo Java instalado. Pero si lo hiciera, no esperaría que encontrara el archivo correcto.
El Applescript debe verse así.
En mi ejemplo
Cd a la ruta POSIX del alias en la variable current_path
es decir, desde "alias" Macintosh HD: Aplicaciones: "" a "/ Aplicaciones /"
El se
quoted form ofescapa de la ruta utilizando comillas.He usado el comando / bin / ls y lo canalizo al abierto en TextEdit stdin como una demostración aquí para que pueda probar si está llegando al área que espera.
Usarías algo como;
actualizar:
Otra forma es simplemente usar Applescript puro.
fuente
ls | opencódigo definitivamente abre el directorio que quiero, lo cual es genial. Pero cuando llamo a abrirClient.app, obtengo:LSOpenURLsWithRole() failed with error -10665 for the file <path-to-Client.app>- algunas búsquedas de lo que significa este error sugirieron un problema de permiso, lo verifiqué y+xse establecieron las banderas. También probé esto , y eso no funcionó (con el mismo error).Client.appdesde Finder (hacer doble clic) también genera la misma ventana emergente de error de PowerPC.I call open Client.app¿Es esta la aplicación Automator? Por lo que entiendo en el automator tiene el código AppleScript:do shell script "cd " & quoted form of (POSIX path of current_path) & " ;\"java -jar app.jar\"". Entonces, ¿dónde estás usando elopencomando? que hasta donde yo entiendo lo que estás haciendo, no necesitas usarlo. Los clientes usarán doble clic en la aplicación y la aplicación ejecutará java$ open Client.appy haciendo doble clic. Su versión con invocaciónls | open -fefunciona, pero cuando la cambiojava -jar app.jarme da ese error.do shell script "cd " & quoted form of (POSIX path of current_path) & " ; " & quoted form of "java -jar app.jar"Camino al guión
En su AppleScript, debe cambiar el directorio de trabajo actual (cwd) antes de emitir el comando java. Haga esto con una línea AppleScript como:
El
&&es importante. Sicdtiene éxito, eljavacomando se iniciará dentro del cwd correcto . Sicdfalla, eljavacomando no se ejecutará.Los problemas que probablemente encontrará incluyen:
cd; los usuarios tendrán carpetas y espacios con nombres extraños en sus rutas.cdpuede fallar; envuelva su AppleScript en un bloque de prueba para detectar algunos errores y advertir al usuario.perl
Personalmente, usaría un script perl corto en lugar de un script bash.
Hay formas mucho mejores de escribir este fragmento de Perl, pero esto debería funcionar.
Aplicación automatizadora
El mejor enfoque es resolver los problemas con su enfoque de Automator. La respuesta de @ markhunte discute cómo arreglar el camino y crear una aplicación . Esto debería llevarte la mayor parte del camino.
Consulte también la ruta de AppleScript en relación con la ubicación del script .
appify: crea la aplicación Mac más simple posible desde un script de shell
Alternativamente, puede usar el script de aplicación de Thomas Aylott para agrupar su script de shell en una aplicación OS X. El artículo de Mathias Bynen explica cómo usar el script, cómo crear aplicaciones simples de Mac a partir de scripts de shell .
Las mejoras aportadas por la comunidad a este script están disponibles:
Firma de código
Una vez que haya creado su paquete de aplicaciones, debe estar firmado por código. Se iniciará una aplicación con código firmado sin requerir que sus clientes deshabiliten Gatekeeper.
Código de firmar su aplicación utilizando su ID de desarrollador de Apple y el
codesigncomando:Obtenga más información sobre la firma de código en el sitio para desarrolladores de Apple.
fuente
Use Platypus : "Platypus es una herramienta para desarrolladores de OS X que crea aplicaciones nativas de Mac a partir de scripts interpretados ..."
fuente
Se puede cambiar
run.sharun.commandy conseguir que el usuario haga doble clic en él?fuente
cd ~), lo que provocó que fallara.Aquí está mi opinión sobre lo que entendí que estás tratando de lograr. El código es largo sin aliento a propósito.
Todo lo que necesita hacer es copiar el código en el Editor de Applescript, hacer los cambios que desee y guardarlo como una aplicación.
En cuanto al diálogo sobre la aplicación PowerPC no compatible, no lo sé. ¿Puedes ejecutarlo desde la línea de comando? Comprobaría eso para confirmar que la aplicación funciona primero.
fuente