Может запускать AppleScript только из Automator

У меня есть следующий AppleScript, который переключает направление прокрутки на трекпаде:

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

Этот скрипт запускается без проблем, когда для его выполнения используется кнопка «play» в Automator. Однако, когда я создаю службу, которая ее запускает, и назначаю ей сочетание клавиш, она не запускается с помощью сочетания клавиш.

Обернув его в tryблок с некоторыми сообщениями об ошибках, вы получите следующее:

Automator Runner не имеет вспомогательного доступа.

Номер ошибки-1728

введите описание изображения здесь

Я нашел Automator Runner.app и предоставил ему вспомогательный доступ, используя инструкции, найденные здесь .

Теперь оно отображается с установленным флажком в списке приложений со вспомогательным доступом:

введите описание изображения здесь

Однако проблема остается. Я продолжаю получать то же сообщение, уведомляющее меня, что Automator Runner is not allowed assistive access.при попытке запустить скрипт с помощью клавиатурной команды службы, которая запускает скрипт.


Обновлять

Мне только что удалось реализовать этот альтернативный скрипт, чтобы выполнить то же самое, но он также работает только тогда, когда Automator имеет фокус и имеет ту же проблему, когда он не работает:

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 — объект не найден, поэтому, возможно, попробуйте упростить, пока не определите ненайденный объект или ошибку доступа.
@Tetsujin Будем очень признательны за любые рекомендации, которые вы можете дать, как это сделать.
чтобы получить некоторое форматирование, мне придется сделать это как «ответ», но это все еще только «устранение неполадок», а не истинное решение ...
Похоже, что другой пользователь столкнулся с аналогичной проблемой, которая еще не решена: apple.stackexchange.com/questions/93567/…
У меня нет Automator в списке на вкладке «Конфиденциальность», поэтому я не могу его включить /// Есть идеи?
Решено: я перетащил приложение Automator в это окно...

Ответы (6)

Важное примечание относительно действий AppleScript в рабочих процессах Automator.
Надеюсь, это поможет другим, кто ищет исправление.

Вспомогательный доступ

Если ваш сценарий использует такие вещи, как tell application "System Events"получение данных пользовательского интерфейса из окон приложений или отправка виртуальных нажатий клавиш и т. д., то ему потребуется «вспомогательный доступ».

Это может называться по-разному в разных версиях Mac OS, но обычно его можно найти в « Системные настройки» > «Безопасность и конфиденциальность» > «Конфиденциальность» > «Специальные возможности» в разделе «Разрешить приложениям, указанным ниже, управлять вашим компьютером» .

Включение вспомогательного доступа для приложений Automator и Script Editor позволит запускать ваши рабочие процессы и сценарии из этих инструментов, но не при сохранении в виде отдельных приложений. Теоретически, включение доступа для любого приложения должно также позволить ему общаться с системными событиями.

Проблема с запуском AppleScripts из Automator Actions

Но , как многие обнаружили , у Automator часто возникают проблемы с созданием приложений, которым может быть предоставлен вспомогательный доступ, когда такие приложения содержат код AppleScript. Не говоря уже о том, что сервисы вообще не могут получить такие разрешения , поскольку они не являются приложениями.

Обходной путь

Однако вместо этого вы можете создавать автономные приложения AppleScript из приложения «Редактор сценариев» и без проблем предоставлять им вспомогательный доступ.

Затем вы можете запускать такие приложения как часть рабочего процесса Automator или оболочки, например:

Действие AppleScript в Automator

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

Сценарий оболочки
(также может быть из действия Automator)

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

Это также работает для создания сервисов в Automator. Просто пусть ваша служба запускает приложение с предоставленным разрешением, а не пытается добавить код, требующий разрешения, в саму службу.

Обратите внимание, что tell appдля вызова не требуется расширение «.app» или даже путь. Если у вас много приложений с одинаковым именем, должен быть способ получить приложение по его идентификатору пакета и т. д.

Другие IDE

Я не уверен, что это проблема, характерная для Automator, поскольку я не пробовал вызывать причудливые сценарии AppleScript из приложений, созданных с помощью других инструментов, кроме этого, и редактора сценариев. В любом случае вышеизложенное должно работать для других IDE/компиляторов/и т.д. также.

Повторная сборка вашего приложения

В большинстве случаев для редактирования и повторной сборки предоставленного приложения требуется повторный доступ к нему. Таким образом, это помогает хорошо протестировать все в Automator/Script Editor, прежде чем создавать отдельное приложение, чтобы избавить вас от проблем. Если ваш скрипт вызывается более крупным проектом, который вы регулярно перекомпилируете, лучше всего превратить этот скрипт в собственное приложение, предоставить ему доступ один раз и запустить приложение из вашего более крупного проекта. По крайней мере, пока не будет завершен более крупный проект.

Приложения, используемые несколькими сценариями, можно хранить в едином месте, например в пользовательской папке /Applications/Tools/Scripts . Однако помните, что любой сторонний код может запускать приложения и тем самым активировать ваши потенциально конфиденциальные сценарии. При создании кода, использующего вспомогательный доступ, важно учитывать последствия для безопасности.

Когда повторное предоставление не работает

Бывают случаи, когда повторное предоставление перестроенного приложения не «принимает». В таких случаях это обычно решает переименование приложения и его повторное добавление через Системные настройки. Позже вы сможете переименовать приложение обратно в исходное. Это ошибка в том, как Assistive Access кэширует свой список приложений, и имя файла и/или путь каким-то образом задействованы. Если кто-нибудь знает, как очистить этот кеш, добавьте комментарий; это было бы очень полезно.

Спасибо за подробные комментарии. В моем случае я мог бы запустить рабочий процесс на основе Safari, просто предоставив разрешения доступа для Safari.

Я подозреваю, что у вас может не быть проблемы, которую можно было бы «отладить».
Прочтите это руководство с сайта macosxautomation.com о том, как сделать так, чтобы апплеты, которые не сохраняют свое «разрешение» на запуск постоянно, были приняты Mac OS X.

Хитрость заключается в установке специального ResourceRules-ignoring-Scripts.plist , в котором вы подписываете и регистрируете свое приложение (let). (Но прочитайте ПРЕДУПРЕЖДЕНИЕ на этой веб-странице!)

Причина в том, что некоторые приложения сохраняют информацию «в себе» и, следовательно, не будут идентичны/распознаны при следующем запуске.

(Но в любом случае: даже если совет Гида вам НЕ поможет , он все равно может быть интересен другим...)

Я знаю, что это старый вопрос, но я столкнулся с этой проблемой только сейчас, и мне удалось ее обойти, поэтому я решил опубликовать ответ.

Я где-то читал, что добавление Automator Runner.appна панель «Конфиденциальность/Доступность» Системных настроек не предотвратит ошибку, поэтому я не пробовал, но мне помогло вставить весь рабочий процесс в новый документ рабочего процесса «Приложение». Я сохранил его в том же месте, что и сервис, а затем создал новый рабочий процесс «Сервис», который делал только одну вещь: запускал только что созданное новое приложение.

Затем я добавил это приложение на панель «Конфиденциальность/Доступность» Системных настроек. Теперь, когда я запускаю службу, я не получаю ошибку разрешений.

Какая версия OS X/macOS у вас установлена?
Это macOS 10.13.6.

Не ответ, но...
Чтобы попытаться отладить, я бы разобрал скрипт на его компоненты, поэтому грубо разделил только на

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"
    end tell
end tell

Проверьте еще раз

и далее, пока не найдете точку сбоя

Одной из возможностей было бы изменить системные события и системные настройки в вашем текущем порядке выполнения, но это всего лишь выстрел в темноту.

Надеюсь, кто-то с лучшими отбивными applescript, чем я, предоставит лучшее решение.

Большое спасибо за ваш постоянный вклад! Первый tellблок выполняется, не вызывая ошибки. Он появляется при добавлении блока «Системные события и системные настройки».

При работе на https://apple.stackexchange.com/a/436069/53510 я столкнулся с этой проблемой.

Для меня (частичное, несовершенное) решение выглядит следующим образом:

  1. Системные настройки > Безопасность и конфиденциальность > Конфиденциальность > Специальные возможности
  2. Добавьте свои наиболее часто используемые приложения (те, которые, вероятно, будут активны и «сосредоточены», когда вы нажимаете сочетание клавиш или иным образом запускаете службу.
  3. Закройте и снова откройте каждое из этих приложений.
  4. Попробуйте снова запустить службу (например, с помощью сочетания клавиш).
  5. Обратите внимание, где он блокируется (например, в моем случае окно «Системные настройки» было открыто, но не было видно, поэтому я щелкнул значок в Dock)
  6. Посмотрите диалоговое окно с запросом на повышенные разрешения и предоставьте их.

Я нашел решение!!! Я обнаружил, что лучший способ избежать этой ошибки — использовать знак + и сначала добавить приложение таким образом. Тогда попробуйте запустить его. (Т.е. не пытайтесь запустить его первым. Т.е. не перетаскивайте туда сначала.)

В крайнем случае исправление: откройте системные настройки. Удалите приложение с минусом. Замок. Выйдите из системных настроек. Снова откройте системные настройки. Добавьте приложение со знаком плюс. Замок. Выйдите из системных настроек. Затем попробуйте запустить приложение. Не торопитесь с каждым из этих шагов... не торопитесь. Все еще не работает. Вы можете смешать перезагрузку и несколько выходов из системы ... в конечном итоге это сработает ... звучит как безумие, я знаю ... но это работает.

Монтерей 12.4.

Благодаря SIMCC

Рад, что это сработало для вас, но это не похоже на правильное решение.