Solo puede ejecutar AppleScript desde Automator

7

Tengo el siguiente AppleScript que alterna la dirección de desplazamiento en el panel táctil:

tell application "System Preferences"
    activate
    set current pane to pane "com.apple.preference.trackpad"
end tell

tell application "System Events"
    tell process "System Preferences"
        click radio button "Scroll & Zoom" of tab group 1 of window "Trackpad"
        click checkbox 1 of tab group 1 of window "Trackpad"
    end tell
end tell

tell application "System Preferences"
    quit
end tell

Este script se ejecuta sin problemas cuando se utiliza el botón "reproducir" en Automator para ejecutarlo. Sin embargo, cuando hago un servicio que lo ejecuta y le asigno un atajo de teclado al servicio, no se ejecuta a través del atajo de teclado.

Al envolverlo en un trybloque con algunos informes de errores se obtiene lo siguiente:

Automator Runner no tiene permitido el acceso de asistencia.

Error número 1728

ingrese la descripción de la imagen aquí

Encontré Automator Runner.app y le di acceso de asistencia utilizando las instrucciones que se encuentran aquí .

Ahora aparece con una casilla marcada en la lista de aplicaciones con acceso de asistencia:

ingrese la descripción de la imagen aquí

Sin embargo, el problema persiste. Sigo recibiendo el mismo mensaje que me notifica que Automator Runner is not allowed assistive access.cuando intento ejecutar el script usando el comando del teclado del servicio que ejecuta el script.


Actualizar

Simplemente logré implementar este script alternativo para lograr lo mismo, pero también solo funciona cuando Automator tiene el foco y tiene el mismo problema cuando no:

tell application "System Preferences"
    reveal anchor "trackpadTab" of pane "com.apple.preference.trackpad"
end tell
tell application "System Events" to tell process "System Preferences"
    click checkbox 1 of tab group 1 of window 1
end tell
quit application "System Preferences"
Keyslinger
fuente
1728 es un objeto no encontrado, así que quizás intente simplificar hasta que identifique el objeto no encontrado o el error de acceso.
Tetsujin
@Tetsujin Le agradeceríamos cualquier orientación que pueda proporcionar sobre cómo se hace.
Keyslinger
para obtener algo de formato, tendré que hacer esto como una 'respuesta', pero sigue siendo solo 'solución de problemas', no es una solución verdadera ...
Tetsujin
Parece que otro usuario se encontró con un problema similar aquí que aún no se ha resuelto: apple.stackexchange.com/questions/93567/…
Keyslinger
No tengo Automator en la lista en la pestaña Privacidad, así que no puedo habilitarlo: /// ¿Alguna idea?
davidhq

Respuestas:

3

Nota importante sobre las acciones de AppleScript en los flujos de trabajo de Automator.
Esperemos que esto ayude a otros que buscan una solución.

Acceso de asistencia

Si su script usa cosas como tell application "System Events"obtener datos de la interfaz de usuario de las ventanas de la aplicación o enviar pulsaciones de teclas virtuales, etc., entonces requerirá "acceso de asistencia".

Esto se puede llamar diferentes cosas en diferentes versiones de Mac OS, pero generalmente se puede encontrar en Preferencias del sistema> Seguridad y privacidad> Privacidad> Accesibilidad , en "Permitir que las aplicaciones a continuación controlen su computadora" .

Habilitar el acceso de asistencia para las aplicaciones de 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 cualquier aplicación también debería permitirle hablar con System Events.

Problema con AppleScripts ejecutado desde acciones de Automator

Pero como muchos han descubierto , Automator a menudo tiene problemas para crear aplicaciones a las que se les puede otorgar acceso de asistencia, cuando tales aplicaciones contienen código AppleScript. Por no mencionar el hecho de que los servicios no se pueden conceder tales permisos en absoluto , ya que no son aplicaciones.

Solución alternativa

Sin embargo, puede crear aplicaciones AppleScript independientes desde la aplicación Script Editor en su lugar, y otorgarles acceso de asistencia sin problemas.

Luego puede ejecutar dichas aplicaciones como parte de un Automator o flujo de trabajo de shell, como este:

Acción 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 el código que requiere permiso al servicio en sí.

Tenga en cuenta que la tell appllamada no requiere la extensión ".app", ni siquiera una ruta. Si tiene muchas aplicaciones con el mismo nombre, debería haber una manera de obtener la aplicación por su identificador de paquete, etc.

Otros IDEs

No estoy seguro de si este es un problema específico de Automator, ya que no he intentado llamar a 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, editar y reconstruir una aplicación otorgada requiere que se le vuelva a otorgar acceso. Por lo tanto, es útil probar todo bien en Automator / Script Editor antes de compilar la aplicación independiente, para evitarle problemas. Si su secuencia de comandos es invocada por un proyecto más grande que recompila habitualmente, 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 complete el proyecto más grande.

Para las aplicaciones utilizadas por múltiples scripts, puede mantenerlas en un lugar consistente como una carpeta personalizada / Aplicaciones / Herramientas / Scripts . Sin embargo, recuerde que cualquier código de terceros puede iniciar aplicaciones y así activar sus scripts potencialmente confidenciales. Es importante tener en cuenta las implicaciones de seguridad al crear código que utiliza el acceso de asistencia.

Cuando volver a otorgar no funciona

Hay momentos 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 más adelante. Este es un error con la forma en que el Acceso de asistencia 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é, agregue un comentario; sería muy útil.

Beejor
fuente
1

Sospecho que en realidad no tienes un problema que podría ser "depurado".
Lea esta Guía de macosxautomation.com sobre cómo hacer que Mac OS X acepte los applets que no mantienen permanentemente su "permiso" para ejecutarse.

El truco consiste en instalar un ResourceRules-ignooring-Scripts.plist especial en el que firmas y registras tu aplicación (let). (¡Pero lea la ADVERTENCIA en esta página web!)

La razón es que algunas aplicaciones guardan información "en sí mismas" y, por lo tanto, no serán idénticas / reconocidas la próxima vez que se ejecuten.

(Pero de todos modos: incluso si el consejo de la Guía NO lo ayuda , aún podría ser de interés para otros ...)

clemsam lang
fuente
1

Sé que esta es una vieja pregunta, pero estaba enfrentando este problema en este momento y logré solucionarlo, así que pensé en publicar una respuesta.

Había leído en otra parte que agregar Automator Runner.appal panel Privacidad / Accesibilidad de Preferencias del Sistema no evitaría el error, así que no lo intenté, pero lo que funcionó para mí fue pegar todo el flujo de trabajo en un nuevo documento de flujo de trabajo de "Aplicación". Lo guardé en la misma ubicación que el servicio y luego creé un nuevo flujo de trabajo "Servicio" que solo hizo 1 cosa: ejecutar la nueva aplicación que acababa de crear.

Luego agregué esa aplicación al panel Privacidad / Accesibilidad de Preferencias del Sistema. Ahora, cuando ejecuto el servicio, no obtengo el error de permisos.

hepcat72
fuente
¿Qué versión de OS X / macOS está ejecutando?
user3439894
Es macOS 10.13.6.
hepcat72
0

No es una respuesta, pero ...
Para intentar depurar, deconstruiría la secuencia de comandos a sus componentes, por lo que me dividiría aproximadamente

tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.trackpad"
end tell

& prueba de cualquier error

Luego añade

tell application "System Events"
    tell process "System Preferences"
         click radio button "Scroll & Zoom" of tab group 1 of window "Trackpad"
    end tell
end tell

revisar otra vez

y adelante hasta encontrar el punto de falla

Una posibilidad sería revertir los eventos del sistema y las preferencias del sistema en su orden de ejecución actual, pero eso es solo una oportunidad en la oscuridad.

Con suerte, alguien con mejores chops de applecript que yo proporcionaré una mejor solución.

Tetsujin
fuente
¡Muchas gracias por su continuo aporte! El primer tellbloque se ejecuta sin causar el error. Emerge cuando se agrega el bloque Eventos del sistema y Preferencias del sistema.
Keyslinger