AppleScript `activ` из приложения Sandboxed не выводит окно на передний план - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь открыть Системные настройки из приложения macOS в песочнице, чтобы пользователь мог вручную включить определенную настройку.

AppleScript activate

Выводит приложение на передний план, при необходимости запуская его.

Я использую macOS 10.13.6 и Xcode 10.0.Цель развертывания установлена ​​на OS X 10.11.

Я запускаю следующий AppleScript из изолированного приложения:

let script = """
             tell application "System Preferences"
                 activate
                 set current pane to pane id "com.apple.preferences.extensions"
             end tell
             """
let appleScript = NSAppleScript(source: script)
var errorInfo: NSDictionary? = nil
appleScript?.executeAndReturnError(&errorInfo)

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

<key>com.apple.security.scripting-targets</key>
<dict>
    <key>com.apple.systempreferences</key>
    <array>
        <string>preferencepane.reveal</string>
    </array>
</dict>

Это несколько работает, когда я добавляю Право.Приложение «Системные настройки» запускается, если оно закрыто, и открывает правильную панель.

Словарь errorInfo равен нулю и не содержит информации об ошибке.

В консоли отображается сообщение , котороевозможно, не относится к журналу спама :

AppleEvents: получено сообщение о мах, которое не было сложного типа, как ожидалось в getMemoryReference.

System Preferences window does not activate or come to foreground.

Однако приложение не активирует .Окно «Системные настройки» не выходит вперед.Приложение переходит на правильную вкладку, но не выходит на первый план в качестве документов для состояния activate.Он остается за любыми другими окнами переднего плана.

В случае, если системные настройки закрыты, приложение запускается.Но окно не будет добавлено на экран на переднем плане или фона, пока вы не нажмете значок док-станции.Затем откроется окно, уже перейдя на правильную панель.

Почему приложение не активируется?

Существуют ли другие необходимые права на песочницу, которые позволят активировать окно «Системные настройки»?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Мне кажется ошибкой, что команда активации не разрешена из вашего скрипта.Тем не менее, в простом тестовом приложении я подтвердил, что даже при воспроизведении описанного вами поведения проблему можно обойти, используя вместо этого NSWorkspace для запуска системных настроек.Эта процедура имеет побочный эффект активации приложения, если оно уже запущено.Итак, добавьте код, подобный этому до того, как ваш AppleScript выполнит:

NSWorkspace.shared.launchApplication(withBundleIdentifier: "com.apple.systempreferences", options: [], additionalEventParamDescriptor: nil, launchIdentifier: nil)

Что-то еще странное: если вы оставите в скрипте «активировать», это может вызватьзапущенное приложение для повторной активации.Таким образом, полный обходной путь, по-видимому, требует добавления чего-то похожего в коде выше и удаления «активации» из скрипта.

0 голосов
/ 20 сентября 2018

Я предлагаю вам сделать следующее (это было проверено мной на MacOS Mojave и работает как задумано).

  1. Открыть Script Editor
  2. Вставить в него свой код скрипта(без внешних кавычек, конечно)
  3. Сохраните его как приложение
  4. Перейдите в место в Finder, где вы его сохранили, и правой кнопкой мыши нажмите "Показать содержимое пакета ".
  5. Перейти к содержанию и открыть Info.plist в Xcode
  6. Проверить права, используемые этим приложением, в частности Конфиденциальность - AppleEvents Отправка Описание использования (NSAppleEventsUsageDescription).
  7. Воспроизведите это в своем приложении, но, пожалуйста, не используйте все права, которые приложение Applescript использует по умолчанию, только те, которые вам действительно нужны.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...