Utilice el identificador de paquete de la aplicación de destino (más flexible)
¿Planea mantener solo una copia única de MyApp.app
en todo el sistema?
Si es así, puedes aprovechar el paquete identificador de MyApp.app
y hacer que Launch Services descubra todos los detalles esenciales para ti.
Esta solución es bastante flexible; tiene la ventaja de que puede colocar su flujo de trabajo de Automator donde quiera , no tiene que estar en la misma ubicación que MyApp.app
, ni en ninguna ubicación fija relativa a él.
Pasos
Estos son los pasos que desea seguir:
-
Abre Terminal.app y ejecuta el siguiente comando:
osascript -e 'id of app "'"$(mdfind MyApp.app)"'"'
-
El paso anterior debería haber impreso una sola línea como resultado. Note lo que dice esa línea (por ejemplo, com.example.MyApp
).
-
Abra su flujo de trabajo en Automator.
-
Agrega una acción Ejecutar el script de shell 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 colocarlo en una ubicación fija relativa a MyApp.app
.
-
Ejecuta el flujo de trabajo de Automator; debe lanzar MyApp.app
.
Explicación
Servicios de lanzamiento
Esta solución aprovecha una parte de macOS llamada Launch Services, que mantendrá una base de datos de aplicaciones y sus propiedades en todo el sistema :
Cada vez que el sistema conoce una nueva aplicación (por ejemplo, cuando el usuario la arrastra desde un disco de instalación a la carpeta Aplicaciones), la aplicación se registra en los Servicios de lanzamiento, que copia la información necesaria sobre la aplicación en su base de datos. Los Servicios de inicio pueden usar esta información para determinar la aplicación preferida para abrir un archivo de documento o URL.
El plan
La información que nos interesa es el identificador del paquete, o el ID del paquete.
Un desarrollador de aplicaciones generalmente asigna a cada una de sus aplicaciones una ID de paquete única global (con suerte). Podemos aprovechar esta singularidad si y solo si no hay más de una aplicación con el mismo ID de paquete en todo nuestro sistema, y solo una copia de esa aplicación. No hay duplicados.
Averiguar el camino
El comando
mdfind MyApp.app
es solo una forma elegante de ejecutar una búsqueda de Spotlight como acceso directo de una sola vez para descubrir la ruta de la aplicación a partir de ahora. Necesitamos la ruta solo una vez para extraer el identificador del paquete de la aplicación.
Spotlight (con suerte) volverá con algo como esto:
/Users/watermelon/foo/MyApp.app
Extracción de CFBundleIdentifier
Envolviendo la ruta actual de la aplicación en el siguiente comando de AppleScript:
id of app "/Users/watermelon/foo/MyApp.app"
es simplemente una forma conveniente de ** extraer el CFBundleIdentifier
** del paquete MyApp.app
.
(También podría haber buscado el ID del paquete manualmente haciendo clic con el botón derecho en la aplicación en el Finder, seleccionando Mostrar contenido del paquete , navegando a la subcarpeta Contents
y abriendo Contents/Info.plist
en TextEdit, busque la clave que dice CFBundleIdentifier
y encuentre su valor String
una línea más abajo. Creo que esto es tedioso, por lo tanto, siempre prefiero usar el fragmento de código AppleScript / mdfind
.)
Iniciar una aplicación por ID de paquete
Finalmente, echemos un vistazo al comando que realmente vas a usar en tu flujo de trabajo de Automator:
open -b com.example.MyApp
Este comando es solo una forma técnica de decir "hola macOS, eres un buen amigo con launchd
, ¿verdad? ¿Puedes hacer que lance esta aplicación para mí? Oh, por cierto, nunca me molesté en buscar el camino completo hacia él. Lo que sí sé es su CFBundleIdentifier
, que es com.example.MyApp
; solo ve a preguntar Servicios de lanzamiento y descubrirán el camino ".