Automator usa la ubicación actual del directorio

4

mi objetivo es usar Automator para abrir una aplicación con argumentos

open ./MyApp.app -arguments

ejecutando un Buddy.app que se puede compartir con Myapp.app (el Automator / workflow). ambas aplicaciones deben compartirse con cualquiera para que se ejecuten de inmediato.

la forma más sencilla de hacerlo, parece ser ejecutar Buddy.app desde la misma carpeta que MyApp.app. luego puedo mover el Buddy.app con MyApp.app a cualquier lugar y seguirán trabajando juntos

para configurar las ubicaciones relativas de los archivos en el script bash,

open "$(pwd)"/myapp.app -arguments

El único problema es que Automator utiliza el directorio de inicio en lugar del directorio de la aplicación. es decir, pwd es el directorio principal, y no la ubicación real del archivo.

en Automator la salida de

echo $(pwd)

es mi directorio de inicio, / Usuarios / Usuario

entonces la pregunta es, ¿cómo hacer que Automator (Buddy.app) detecte la ubicación de la carpeta actual y ejecute MyApp.app?

    
pregunta watermelon 04.04.2017 - 10:04

2 respuestas

1

Haga que su flujo de trabajo descubra su propio camino (más robusto)

Esto funciona siempre que el flujo de trabajo de Automator se encuentre en el mismo directorio como MyApp.app ; puede crear copias del flujo de trabajo o la aplicación a su discreción y reutilizar esas copias donde desee; nada tiene que ser único.

Pasos

Estos son los pasos para automatizar el inicio de MyApp.app :

  1. Abra el flujo de trabajo en Automator.

  2. Agrega una acción Ejecutar AppleScript . Elimine todo el código del interior y reemplácelo con las siguientes líneas:

    set AppleScript's text item delimiters to ":"
    set appPath to (text items 1 through -3 of (path to me as text) & {"MyApp.app"} as text)
    tell application "Finder" to open file appPath
    
  3. Guarde el flujo de trabajo de Automator en la misma carpeta que MyApp.app .

  4. Ejecuta el flujo de trabajo de Automator; debe lanzar MyApp.app .

Explicación

set AppleScript's text item delimiters to ":"

Esto significa "Cuidado, voy a dividir una cadena pronto; y quiero que uses el carácter : como límites divididos ".

path to me as text

Esto le indica al flujo de trabajo que determine la ruta a sí mismo; los componentes de la ruta están delimitados por dos puntos ( : ), que es un remanente de Classic Mac OS .

text items 1 through -3 of […] & {"MyApp.app"}

Esto corta la última parte de la ruta y agrega MyApp.app a la ruta.

[…] as text

Esto vuelve a unir el camino (nuevamente con : como delimitador).

tell application "Finder" to open file appPath

Por último, esta línea final hace que se inicie MyApp.app .

    
respondido por el Synoli 06.04.2017 - 20:51
0

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:

  1. Abre Terminal.app y ejecuta el siguiente comando:

    osascript -e 'id of app "'"$(mdfind MyApp.app)"'"'
    
  2. 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 ).

  3. Abra su flujo de trabajo en Automator.

  4. Agrega una acción Ejecutar el script de shell con el contenido:

    open -b com.example.MyApp
    
  5. 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 .

  6. 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 ".

    
respondido por el Synoli 06.04.2017 - 20:48

Lea otras preguntas en las etiquetas