Kann nur AppleScript von Automator ausführen

Ich habe das folgende AppleScript, das die Bildlaufrichtung auf dem Trackpad umschaltet:

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

Dieses Skript wird ohne Probleme ausgeführt, wenn die Schaltfläche „Play“ in Automator verwendet wird, um es auszuführen. Wenn ich jedoch einen Dienst erstelle, der ihn ausführt, und dem Dienst eine Tastenkombination zuweist, kann er nicht über die Tastenkombination ausgeführt werden.

Wenn Sie es in einen tryBlock mit einigen Fehlerberichten einpacken, erhalten Sie Folgendes:

Automator Runner ist kein unterstützender Zugriff gestattet.

Fehlernummer-1728

Geben Sie hier die Bildbeschreibung ein

Ich habe Automator Runner.app gefunden und ihm mithilfe der hier zu findenden Anweisungen unterstützenden Zugriff gewährt .

Es wird jetzt mit einem aktivierten Kontrollkästchen in der Liste der Anwendungen mit unterstützendem Zugriff angezeigt:

Geben Sie hier die Bildbeschreibung ein

Das Problem besteht jedoch weiterhin. Ich erhalte weiterhin dieselbe Meldung, die mich darüber informiert, Automator Runner is not allowed assistive access.wenn ich versuche, das Skript mit dem Tastaturbefehl des Dienstes auszuführen, der das Skript ausführt.


Aktualisieren

Es ist mir gerade gelungen, dieses alternative Skript zu implementieren, um dasselbe zu erreichen, aber es funktioniert auch nur, wenn Automator den Fokus hat, und hat das gleiche Problem, wenn dies nicht der Fall ist:

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"
1728 ist Objekt nicht gefunden, also versuchen Sie vielleicht zu vereinfachen, bis Sie das nicht gefundene Objekt oder den Zugriffsfehler identifizieren.
@Tetsujin Jede Anleitung, die Sie dazu geben können, wäre sehr willkommen.
Um eine Formatierung zu erhalten, muss ich dies als "Antwort" tun, aber es ist immer noch nur eine "Fehlerbehebung", keine echte Lösung ...
Es scheint, dass ein anderer Benutzer hier auf ein ähnliches Problem gestoßen ist, das noch nicht gelöst ist: apple.stackexchange.com/questions/93567/…
Ich habe Automator dort nicht auf der Registerkarte „Datenschutz“ aufgeführt, daher kann ich es nicht aktivieren :/// Irgendwelche Ideen?
Gelöst: Ich habe die Automator-App in dieses Fenster gezogen ...

Antworten (6)

Wichtiger Hinweis zu AppleScript-Aktionen in Automator-Workflows.
Hoffentlich hilft das anderen, die nach einer Lösung suchen.

Assistiver Zugang

Wenn Ihr Skript Dinge wie tell application "System Events"das Abrufen von UI-Daten aus App-Fenstern oder das Senden virtueller Tastenanschläge usw. verwendet, ist "unterstützender Zugriff" erforderlich.

Dies kann in verschiedenen Versionen von Mac OS unterschiedlich heißen, ist aber im Allgemeinen in Systemeinstellungen > Sicherheit & Datenschutz > Datenschutz > Eingabehilfen unter „Zulassen, dass die folgenden Apps Ihren Computer steuern“ zu finden .

Wenn Sie den unterstützenden Zugriff für die Anwendungen Automator und Skripteditor aktivieren , können Ihre Workflows und Skripts von diesen Tools aus ausgeführt werden, jedoch nicht, wenn sie als eigenständige Apps gespeichert werden. Theoretisch sollte das Aktivieren des Zugriffs für jede App auch dazu führen, dass sie mit Systemereignissen kommuniziert.

Problem mit AppleScripts, die von Automator-Aktionen ausgeführt werden

Aber wie viele festgestellt haben , hat Automator oft Probleme beim Erstellen von Apps, denen assistierender Zugriff gewährt werden kann, wenn solche Apps AppleScript-Code enthalten. Ganz zu schweigen davon, dass Diensten solche Berechtigungen überhaupt nicht erteilt werden können , da es sich nicht um Apps handelt.

Problemumgehung

Sie können jedoch stattdessen eigenständige AppleScript-Apps aus der Skript-Editor- Anwendung erstellen und ihnen problemlos unterstützenden Zugriff gewähren.

Sie können solche Apps dann wie folgt als Teil eines Automator- oder Shell-Workflows ausführen:

AppleScript-Aktion in Automator

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

Shell-Skript
(kann auch aus einer Automator-Aktion stammen)

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

Dies funktioniert auch beim Erstellen von Diensten in Automator. Lassen Sie einfach Ihren Dienst die App ausführen, für die eine Berechtigung erteilt wurde, anstatt zu versuchen, dem Dienst selbst einen berechtigungserfordernden Code hinzuzufügen.

Beachten Sie, dass für den tell appAufruf weder die Erweiterung „.app“ noch ein Pfad erforderlich ist. Wenn Sie viele Apps mit demselben Namen haben, sollte es eine Möglichkeit geben, die App anhand ihrer Bundle-ID usw. abzurufen.

Andere IDEs

Ich bin mir nicht sicher, ob dies ein Automator-spezifisches Problem ist, da ich nicht versucht habe, ausgefallene AppleScripts von Apps aufzurufen, die mit anderen Tools als diesem und dem Skripteditor erstellt wurden. In jedem Fall sollte das obige für andere IDEs/Compiler/usw. funktionieren. sowie.

Neuaufbau Ihrer App

In den meisten Fällen erfordert das Bearbeiten und Neuerstellen einer gewährten App, dass ihr der Zugriff erneut gewährt wird. Es hilft also, alles gut im Automator/Script Editor zu testen, bevor Sie die eigenständige App erstellen, um sich den Ärger zu ersparen. Wenn Ihr Skript von einem größeren Projekt aufgerufen wird, das Sie routinemäßig neu kompilieren, ist es am besten, dieses Skript in eine eigene App umzuwandeln, um ihm einmalig Zugriff zu gewähren, und die App von Ihrem größeren Projekt aus auszuführen. Zumindest bis das größere Projekt abgeschlossen ist.

Für Apps, die von mehreren Skripts verwendet werden, können Sie sie an einem einheitlichen Ort aufbewahren, z. B. in einem benutzerdefinierten Ordner /Applications/Tools/Scripts . Denken Sie jedoch daran, dass jeder Code von Drittanbietern Apps starten und somit Ihre potenziell sensiblen Skripte aktivieren kann. Es ist wichtig, die Auswirkungen auf die Sicherheit zu berücksichtigen, wenn Sie Code erstellen, der den unterstützenden Zugriff verwendet.

Wenn die erneute Gewährung nicht funktioniert

Es gibt Zeiten, in denen das erneute Gewähren einer neu erstellten App nicht "dauert". In solchen Fällen löst es normalerweise das Umbenennen der App und das erneute Hinzufügen über die Systemeinstellungen. Sie sollten die App später wieder in ihren ursprünglichen Namen umbenennen können. Dies ist ein Fehler, bei dem Assistive Access seine Liste von Apps zwischenspeichert und der Dateiname und/oder Pfad irgendwie involviert sind. Wenn jemand weiß, wie man diesen Cache löscht, fügen Sie bitte einen Kommentar hinzu; es wäre sehr hilfreich.

Danke für die ausführlichen Kommentare. In meinem Fall könnte ich einen Safari-basierten Workflow ausführen lassen, indem ich einfach Zugriffsberechtigungen für Safari erteile.

Ich vermute, Sie haben möglicherweise nicht wirklich ein Problem, das "gedebuggt" werden könnte.
Lesen Sie diese Anleitung von macosxautomation.com, um zu erfahren, wie Applets, die ihre "Erlaubnis" zum Ausführen nicht dauerhaft behalten, von Mac OS X akzeptiert werden.

Der Trick besteht darin, eine spezielle ResourceRules-ignoring-Scripts.plist zu installieren, in der Sie Ihre App (let) signieren und registrieren. (Aber lesen Sie die WARNUNG auf dieser Webseite!)

Der Grund dafür ist, dass einige Apps Informationen "in sich selbst" speichern und daher beim nächsten Ausführen nicht identisch / erkannt werden.

(Aber wie auch immer: Auch wenn dir der Rat des Guides NICHT weiterhilft, könnte er dennoch für andere interessant sein ...)

Ich weiß, dass dies eine alte Frage ist, aber ich war gerade mit diesem Problem konfrontiert und habe es geschafft, es zu umgehen, also dachte ich, ich würde eine Antwort posten.

Ich hatte an anderer Stelle gelesen, dass das Hinzufügen Automator Runner.appzum Bereich „Datenschutz/Barrierefreiheit“ der Systemeinstellungen den Fehler nicht verhindern würde, also habe ich es nicht versucht, aber was für mich funktioniert hat, war das Einfügen des gesamten Workflows in ein neues Workflow-Dokument „Anwendung“. Ich habe das am selben Ort wie den Dienst gespeichert und dann einen neuen „Dienst“-Workflow erstellt, der nur eine Sache tat: die neue Anwendung ausführen, die ich gerade erstellt hatte.

Ich habe diese Anwendung dann zum Bereich „Datenschutz/Barrierefreiheit“ der Systemeinstellungen hinzugefügt. Wenn ich den Dienst jetzt ausführe, erhalte ich keinen Berechtigungsfehler.

Welche Version von OS X/macOS verwenden Sie?
Es ist macOS 10.13.6.

Keine Antwort, aber ...
Um zu versuchen, Fehler zu beheben, würde ich das Skript in seine Komponenten zerlegen, also nur grob aufteilen

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

& auf Fehler testen

Dann füge hinzu

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

Nochmal Überprüfen

& weiter, bis Sie den Fehlerpunkt gefunden haben

Eine Möglichkeit wäre, sys events & sys prefs in Ihrer aktuellen Running Order umzukehren, aber das ist nur ein Schuss ins Blaue.

Hoffentlich wird jemand mit besseren Applescript-Kenntnissen als ich eine bessere Lösung bereitstellen.

Vielen Dank für Ihren anhaltenden Input! Der erste tellBlock wird ausgeführt, ohne den Fehler zu verursachen. Es taucht auf, wenn der Block Systemereignisse und Systemeinstellungen hinzugefügt wird.

Bei der Arbeit an https://apple.stackexchange.com/a/436069/53510 bin ich auf dieses Problem gestoßen.

Für mich scheint die (teilweise, unvollständige) Lösung zu sein:

  1. Systemeinstellungen > Sicherheit & Datenschutz > Datenschutz > Barrierefreiheit
  2. Fügen Sie Ihre am häufigsten verwendeten Apps hinzu (diejenigen, die wahrscheinlich aktiv und „fokussiert“ sind, wenn Sie die Tastenkombination drücken oder auf andere Weise einen Dienst auslösen.
  3. Beenden Sie jede dieser Apps und öffnen Sie sie erneut.
  4. Versuchen Sie erneut, Ihren Dienst auszulösen (z. B. über eine Tastenkombination).
  5. Beachten Sie, wo es blockiert wird (z. B. wurde in meinem Fall das Fenster Systemeinstellungen geöffnet, aber nicht sichtbar, also habe ich auf das Symbol im Dock geklickt).
  6. Sehen Sie sich das Dialogfeld an, in dem Sie nach erhöhten Berechtigungen gefragt werden, und erteilen Sie diese.

Ich habe die Lösung gefunden!!! Ich fand, dass der beste Weg, diesen Fehler zu vermeiden, darin besteht, zuerst + zu verwenden und die Anwendung auf diese Weise hinzuzufügen. Dann versuchen Sie es auszuführen. (D. h. versuchen Sie nicht, es zuerst auszuführen. D. h. ziehen Sie es nicht zuerst per Drag & Drop hinein.)

Als letzte Lösung: Öffnen Sie die Systemeinstellungen. Entfernen Sie die App mit Minus. Sperren. Beenden Sie die Systemeinstellungen. Öffnen Sie die Systemeinstellungen erneut. App mit Pluszeichen hinzufügen. Sperren. Beenden Sie die Systemeinstellungen. Versuchen Sie dann, die App auszuführen. Nehmen Sie sich Zeit mit jedem dieser Schritte ... überstürzen Sie es nicht. Funktioniert immer noch nicht. Sie können einen Neustart und einige Abmelde-Anmeldungen mischen ... es wird irgendwann funktionieren ... klingt nach Wahnsinn, ich weiß ... aber es funktioniert.

Monterey 12.4.

Danke an SIMCC

Ich bin froh, dass es für Sie funktioniert hat, aber das sieht nicht nach einer richtigen Lösung aus.