Può eseguire solo AppleScript da Automator

6

Ho il seguente AppleScript che alterna la direzione di scorrimento sul trackpad:

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

Questo script viene eseguito senza problemi quando viene utilizzato il pulsante "Riproduci" in Automator per eseguirlo. Tuttavia, quando creo un servizio che lo esegue e assegnato una scorciatoia da tastiera al servizio, non riesce a essere eseguito tramite la scorciatoia da tastiera.

Il wrapping in un blocco try con alcune segnalazioni di errore restituisce quanto segue:

Automator Runner is not allowed assistive access.

Error number-1728

HotrovatoAutomatorRunner.appeglihodatoaccessodiassistenzautilizzandoleistruzionitrovate qui .

Ora appare con una casella selezionata nell'elenco delle applicazioni con accesso assistito:

Tuttavia,ilproblemapersiste.ContinuoariceverelostessomessaggiochemiinformacheAutomatorRunnerisnotallowedassistiveaccess.quandoprovoaeseguireloscriptutilizzandoilcomandodatastieradelserviziocheesegueloscript.

Aggiornamento

Sonoappenariuscitoaimplementarequestoscriptalternativoperrealizzarelastessacosa,mafunzionaanchesoloquandoAutomatorhailfocusehalostessoproblemaquandononlofa:

tellapplication"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"
    
posta Keyslinger 07.09.2014 - 20:34
fonte

4 risposte

2

Important note regarding AppleScript actions in Automator workflows.
Hopefully this helps others who are looking for a fix.

Accesso assistito

Se il tuo script usa cose come tell application "System Events" per ottenere dati di UI da finestre di app o inviare sequenze di tasti virtuali, ecc., allora richiederà "accesso di assistenza".

Questo può essere chiamato cose diverse in diverse versioni di Mac OS, ma generalmente si può trovare in Preferenze di Sistema > Sicurezza e amp; Privacy > Privacy > Accessibilità , in "Consenti alle app in basso di controllare il tuo computer" .

Abilitare l'accesso assistivo per le applicazioni Automator e Script Editor consentirà ai flussi di lavoro e agli script di essere eseguiti da tali strumenti, ma non quando vengono salvati come app autonome. In teoria, abilitare l'accesso per qualsiasi app dovrebbe anche lasciarlo parlare con System Events.

Problema con AppleScript eseguito da Automator Actions

Ma come molti hanno scoperto , Automator spesso ha problemi a creare app a cui può essere concesso l'accesso assistito, quando tali app contengono codice AppleScript. Per non parlare del fatto che non è possibile concedere tali servizi a tutti , poiché non sono app.

Soluzione

Tuttavia, puoi creare app AppleScript standalone dall'applicazione Script Editor e concedere loro l'accesso assistivo senza problemi.

Puoi quindi eseguire tali app come parte di un Automator o di un workflow della shell, come questo:

Azione di AppleScript in Automator

do shell script "osascript -e 'tell application \"My Granted App Name\" to activate'"

Shell Script
(può anche provenire da un'azione di Automator)

osascript -e 'tell application "My Granted App Name" to activate'

Questo funziona anche per la creazione di servizi in Automator. Fai in modo che il tuo servizio esegua l'app concessa in base alle autorizzazioni piuttosto che provare ad aggiungere il codice che richiede l'autorizzazione al servizio stesso.

Tieni presente che la chiamata a tell app non richiede l'estensione ".app" o persino un percorso. Se hai molte app con lo stesso nome, dovrebbe esserci un modo per ottenere l'app tramite il suo identificatore di bundle, ecc.

Altri IDE

Non sono sicuro che si tratti di un problema specifico di Automator, dal momento che non ho provato a chiamare AppleScript di fantasia da app create con strumenti diversi da quello e Script Editor. In entrambi i casi, quanto sopra dovrebbe funzionare per altri IDE / compilatori / ecc. pure.

Ricostruzione della tua app

Nella maggior parte dei casi, la modifica e la ricostruzione di un'app concessa richiedono che venga nuovamente concesso l'accesso. Quindi aiuta a testare tutto bene in Automator / Script Editor prima hai creato l'app standalone, per risparmiarti il problema. Se il tuo script è chiamato da un progetto più ampio che ricompili di routine, è meglio trasformare quello script nella sua app per concederne l'accesso una volta, ed eseguire l'app dal tuo progetto più grande. Almeno fino alla conclusione del progetto più grande.

Per le app utilizzate da più script, puoi tenerle in un posto coerente come una cartella / Applicazioni / Strumenti / Script personalizzata. Tuttavia, ricorda che qualsiasi codice di terze parti può avviare app e quindi attivare i tuoi script potenzialmente sensibili. È importante considerare le implicazioni sulla sicurezza durante la creazione di codice che utilizza l'accesso assistito.

Quando ri-concessione non funziona

Ci sono momenti in cui la ri-concessione di un'app ricostruita non "prende". In questi casi, rinominare l'app e riaggiungerla tramite le Preferenze di sistema solitamente risolve questo problema. Dovresti essere in grado di rinominare l'app sul suo originale in un secondo momento. Questo è un bug relativo al modo in cui Assistive Access memorizza nella cache il proprio elenco di app e il nome file e / o il percorso sono in qualche modo coinvolti. Se qualcuno sa come cancellare questa cache, per favore aggiungi un commento; sarebbe molto utile.

    
risposta data 21.12.2018 - 07:25
fonte
1

Sospetto che potresti non avere un problema che potrebbe essere "debugato".
Leggi questa Guida da macosxautomation.com su come avere applet che non mantengono permanentemente il loro " permesso "per essere eseguito, essere accettato da Mac OS X.

Trick è di installare uno speciale ResourceRules-ignoring-Scripts.plist che firmi e registri la tua app (let) in. (Ma leggi l'AVVERTENZA su questa pagina Web!)

Il motivo è che alcune app salvano le informazioni "in se stesse" e quindi non saranno identiche / riconosciute la prossima volta che vengono eseguite.

(Ma comunque: anche se il consiglio della Guida non ti NON ti aiuta , potrebbe comunque interessare ad altri ...)

    
risposta data 22.12.2015 - 17:35
fonte
1

So che questa è una vecchia domanda, ma ora mi trovavo di fronte a questo problema e sono riuscito a risolverlo, quindi ho pensato di pubblicare una risposta.

Ho letto altrove che aggiungere Automator Runner.app al pannello Privacy / Accessibilità delle Preferenze di Sistema non avrebbe impedito l'errore, quindi non l'ho provato, ma quello che ha funzionato per me è stato incollare l'intero flusso di lavoro in un nuovo Documento del flusso di lavoro "Applicazione". L'ho salvato nella stessa posizione del servizio e poi ho creato un nuovo flusso di lavoro "Servizio" che ha fatto solo 1 cosa: lancia la nuova applicazione che avevo appena creato.

Ho quindi aggiunto questa applicazione al pannello Privacy / Accessibilità delle Preferenze di Sistema. Ora, quando eseguo il servizio, non ottengo l'errore di autorizzazione.

    
risposta data 31.07.2018 - 18:24
fonte
0

Non una risposta, ma ...
Per provare a eseguire il debug, vorrei decostruire lo script per i suoi componenti, in modo da suddividerlo approssimativamente in

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

& prova per qualsiasi errore

Quindi aggiungi

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

controlla di nuovo

& avanti fino a trovare il punto di errore

Una possibilità sarebbe quella di invertire gli eventi sys & sys prefs nel tuo attuale ordine di esecuzione, ma è solo un colpo al buio.

Si spera che qualcuno con migliori costolette di mele che io fornisca una soluzione migliore.

    
risposta data 07.09.2014 - 22:24
fonte

Leggi altre domande sui tag