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.sh
pero 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 of
escapa 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 | open
có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+x
se establecieron las banderas. También probé esto , y eso no funcionó (con el mismo error).Client.app
desde 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 elopen
comando? 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.app
y haciendo doble clic. Su versión con invocaciónls | open -fe
funciona, pero cuando la cambiojava -jar app.jar
me 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. Sicd
tiene éxito, eljava
comando se iniciará dentro del cwd correcto . Sicd
falla, eljava
comando no se ejecutará.Los problemas que probablemente encontrará incluyen:
cd
; los usuarios tendrán carpetas y espacios con nombres extraños en sus rutas.cd
puede 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
codesign
comando: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.sh
arun.command
y 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