Nota importante sobre las acciones de AppleScript en los flujos de trabajo de Automator.
Esperamos que esto ayude a otros que buscan una solución.
Acceso de asistencia
Si su secuencia de comandos usa elementos como tell application "System Events"
para obtener datos de la IU desde las ventanas de la aplicación o para enviar pulsaciones virtuales, etc., se requerirá un "acceso de asistencia".
Esto puede llamarse cosas diferentes en diferentes versiones de Mac OS, pero generalmente se puede encontrar en Preferencias del sistema > Seguridad y amp; Privacidad > Privacidad > Accesibilidad , en "Permita que las aplicaciones a continuación controlen su computadora" .
La habilitación del acceso de asistencia para las aplicaciones Automator y Script Editor permitirá que sus flujos de trabajo y scripts se ejecuten desde esas herramientas, pero no cuando se guardan como aplicaciones independientes. En teoría, habilitar el acceso para la aplicación cualquier también debería permitirle hablar con los eventos del sistema.
Problema con AppleScripts ejecutados desde Automator Actions
Pero como muchos han descubierto , Automator a menudo tiene problemas para crear aplicaciones que se puede otorgar acceso de asistencia, cuando dichas aplicaciones contienen código AppleScript. Sin mencionar el hecho de que a los servicios no se les pueden otorgar tales permisos en absoluto , ya que no son aplicaciones.
Solución
Sin embargo, puede crear aplicaciones AppleScript independientes desde la aplicación Script Editor y otorgarles acceso de asistencia sin problemas.
Luego, puede ejecutar dichas aplicaciones como parte de un Automator o flujo de trabajo de shell, como esto:
Acción de AppleScript en Automator
do shell script "osascript -e 'tell application \"My Granted App Name\" to activate'"
Shell Script
(también puede ser de una acción de Automator)
osascript -e 'tell application "My Granted App Name" to activate'
Esto también funciona para crear servicios en Automator. Simplemente haga que su servicio ejecute la aplicación con permiso otorgado, en lugar de intentar agregar un código que requiera permiso al servicio en sí.
Tenga en cuenta que la llamada tell app
no requiere la extensión ".app", ni siquiera una ruta. Si tiene muchas aplicaciones con el mismo nombre, debería haber una forma de obtener la aplicación por su identificador de paquete, etc.
Otros IDE
No estoy seguro de si este es un problema específico de Automator, ya que no he intentado llamar AppleScripts sofisticados desde aplicaciones creadas con herramientas distintas a eso y Script Editor. De cualquier manera, lo anterior debería funcionar para otros IDE / compiladores / etc. también.
Reconstruyendo tu aplicación
En la mayoría de los casos, la edición y reconstrucción de una aplicación otorgada requiere que se vuelva a otorgar el acceso. Por lo tanto, es útil probar todo bien en Automator / Script Editor antes que cree la aplicación independiente, para evitarle problemas. Si un proyecto más grande invoca su secuencia de comandos de forma rutinaria, es mejor convertir esa secuencia de comandos en su propia aplicación para otorgarle acceso una vez, y ejecutar la aplicación desde su proyecto más grande. Al menos hasta que se finalice el proyecto más grande.
Para las aplicaciones utilizadas por varios scripts, puede mantenerlos en un lugar consistente como una carpeta personalizada / Applications / Tools / Scripts . Sin embargo, recuerde que cualquier código de terceros puede iniciar aplicaciones y así activar sus scripts potencialmente sensibles. Es importante tener en cuenta las implicaciones de seguridad al crear un código que utiliza el acceso de asistencia.
Cuando la nueva concesión no funciona
Hay veces en que volver a otorgar una aplicación reconstruida no "toma". En tales casos, cambiar el nombre de la aplicación y volver a agregarla a través de Preferencias del Sistema generalmente resuelve esto. Debería poder cambiar el nombre de la aplicación a su original en un momento posterior. Este es un error por el cual Assistive Access almacena en caché su lista de aplicaciones, y el nombre de archivo y / o la ruta están involucrados de alguna manera. Si alguien sabe cómo borrar este caché, por favor agregue un comentario; sería muy útil.