Utilizar el identificador del paquete de la aplicación de destino (más flexible)
¿Piensa mantener un solo ejemplar de MyApp.app
en todo el sistema?
Si es así, puede aprovechar MyApp.app
's identificador del paquete, y tienen Servicios de lanzamiento resolver todos los detalles por ti.
Esta solución es bastante flexible; tiene la ventaja de que puedes poner tu flujo de trabajo de Automator donde quieras - no tiene que estar en el mismo lugar que MyApp.app
ni en ningún lugar fijo con respecto a ella.
Pasos
Estos son los pasos que quieres dar:
-
Abra Terminal.app y ejecute el siguiente comando:
osascript -e 'id of app "'"$(mdfind MyApp.app)"'"'
-
El paso anterior debería haber impreso una sola línea como resultado. Observe lo que dice esa línea (por ejemplo com.example.MyApp
).
-
Abra su flujo de trabajo en Automator.
-
Añade un Ejecutar Shell script acción con el contenido:
open -b com.example.MyApp
-
Guarde el flujo de trabajo de Automator en cualquier carpeta a su discreción - no es necesario ponerlo en una ubicación fija relativa a MyApp.app
.
-
Ejecute el flujo de trabajo de Automator; debería lanzarse MyApp.app
.
Explicación
Servicios de lanzamiento
Esta solución aprovecha una parte de MacOS llamada Servicios de lanzamiento, que mantener una base de datos de aplicaciones y sus propiedades en todo el sistema :
Cada vez que una nueva aplicación es conocida por el sistema (por ejemplo, cuando el usuario la arrastra desde un disco de instalación a la carpeta de aplicaciones), la aplicación se registra en Launch Services, que copia la información necesaria sobre la aplicación en su base de datos. Los Servicios de Lanzamiento pueden entonces utilizar esta información para determinar la aplicación preferida para abrir un determinado archivo de documento o URL.
El plan
El dato que nos interesa es el identificador del paquete, o ID del paquete.
Un desarrollador de aplicaciones suele asignar a cada una de ellas un ID de paquete (con suerte) único a nivel mundial. Podemos aprovechar esta singularidad si, y sólo si, no hay más de una aplicación con el mismo ID de paquete en todo nuestro sistema, y sólo una única copia de esa aplicación. No hay duplicados.
Descubrir el camino
El comando
mdfind MyApp.app
es sólo una forma elegante de ejecutar una búsqueda en Spotlight como un acceso directo de una sola vez con el fin de averiguar la trayectoria de la aplicación a partir de ahora. Necesitamos la ruta sólo una vez para extraer el identificador del paquete de la aplicación.
Spotlight volverá (con suerte) con algo así:
/Users/watermelon/foo/MyApp.app
Extracción de CFBundleIdentifier
Envolviendo la ruta actual de la aplicación en el siguiente comando AppleScript:
id of app "/Users/watermelon/foo/MyApp.app"
es simplemente una forma conveniente de **extraer el CFBundleIdentifier
** de la MyApp.app
paquete.
(También podría haber buscado el ID del paquete manualmente haciendo clic con el botón derecho del ratón sobre la aplicación en el Finder y eligiendo Mostrar el contenido del paquete , navegando hacia el Contents
subcarpeta y abrir Contents/Info.plist
en TextEdit, busque la clave que dice CFBundleIdentifier
y encontrar su String
valor una línea más abajo. Creo que esto es tedioso, por lo que siempre prefiero utilizar el programa AppleScript/ mdfind
fragmento).
Lanzar una aplicación por el ID del paquete
Por último, echemos un vistazo al comando que realmente va a utilizar en su flujo de trabajo de Automator:
open -b com.example.MyApp
Este comando es sólo una forma técnica de decir "Oye MacOS, eres buen amigo de launchd
¿verdad? ¿Puede usted hacer que se inicie esta aplicación ¿para mí? Ah, por cierto, nunca me he molestado en buscar la ruta completa. Lo que sí sé es que su CFBundleIdentifier
que es com.example.MyApp
; sólo hay que ir a preguntar Servicios de lanzamiento y ellos descubrirán el camino".
1 votos
A partir de MacOS 10.12, Automator.app se encuentra siempre en
/Applications
y protegido por SIP . Puede comprobarlo ejecutandogrep Automator /System/Library/Sandbox/rootless.conf
ols -ldAO@ /Applications/Automator.app
. Entonces, ¿por qué no codificar simplemente/Applications
?0 votos
Me doy cuenta de la ambigüedad de mi mensaje inicial y lo he cambiado para que quede más claro. quiero ejecutar myapp.app -argumentos desde cualquier lugar simplemente abriendo el automator.app/workflow
0 votos
Si entiendo bien la pregunta, su flujo de trabajo requeriría copiar myapp.app (o al menos un alias) a la ruta actual. Normalmente esto se hace al revés: la ruta actual (de, por ejemplo, un archivo/carpeta) se pasa a la aplicación como un argumento. pwd o ls no lo hará ¡ser copiado a $pwd para obtener el directorio de trabajo actual o un listado de contenido pero permanecer en /bin!
0 votos
@watermelon Gracias por aclarar y editar tu pregunta; aunque creo que todavía necesitamos más información para entender tus requisitos. Ayudaría si editas tu pregunta una vez más y proporcionas un ejemplo autocontenido. En mi siguiente comentario encontrarás mi propia interpretación de tus requisitos hasta el momento. Puede que esté completamente equivocado, y tal vez yo no entienda bien su requisito; sin embargo, si ese es el caso, le recomendaría que proporcionara un ejemplo corto y autocontenido en aras de la claridad.
1 votos
Mi interpretación: se comienza con un directorio
~/foo
y una aplicación~/foo/MyApp.app
. Su objetivo es para tener un flujo de trabajo de Automator que actúe como compañero deMyApp.app
y vive en el mismo directorio queMyApp.app
en todo momento. Quieres ser capaz de moverteMyApp.app
según su criterio, en la carpeta que desee, por ejemplo~/bar
- siempre y cuando el flujo de trabajo de los amigos viaje con él. Por último, se desea poder iniciar el flujo de trabajo de los amigos desde cualquier lugar, por ejemplo, desde el Finder, o utilizandoopen ~/bar/MyWorkflow.workflow
mientras estás dentro/tmp/meow
. ¿Correcto?0 votos
@Synoli parece que tienes una interpretación correcta :) Siempre y cuando el
Buddy.app
buscaMyApp.app
en una ubicación relativa, entonces pueden moverse juntos a cualquier lugar y seguir funcionando adecuadamente. He editado mi OP de nuevo.