Определите, разрешено ли запускать приложение в macOS - PullRequest
0 голосов
/ 25 декабря 2018

Есть ли способ программно определить, разрешено ли запускать приложение в настройках безопасности и конфиденциальности в macOS?

Я пытаюсь запустить .app, загруженный из Интернета изнутри, в режиме без вывода сообщений.Приложение какао, но если пользователь не разрешает приложения из-за пределов Mac App Store, мое приложение просто не сможет запуститься с диалоговым окном, рекомендующим пользователю изменить свои настройки.Я хотел бы знать, будет ли приложение успешно запущено, и если нет, откройте настройки безопасности и конфиденциальности, чтобы пользователи могли их изменять.

В основном я ищу функцию AppIsAllowedToLaunch:

if (AppIsAllowedToLaunch(appURL)) {
  // open the app at appURL
} else {
  // open Security & Privacy settings, inform the user that they should change settings
}

Что я пробовал:

  • open (2) всегда возвращает с нулевым кодом выхода, независимо от того, успешно запущено приложение или нет
  • [NSWorkspace.sharedWorkpace launchApplicationAtURL:options:configuration:error]возвращает экземпляр NSRunningApplication.Этот объект не только не позволяет мне проверить, было ли приложение успешно запущено, но также требует, чтобы я попытался запустить приложение, чтобы увидеть, что происходит, вместо того, чтобы выполнить проверку заранее, что и являетсяМне нужно
  • Альтернативы open-source open (2) в основном устарели и не отражают изменений в настройках безопасности и настроек, которые позволяют пользователям блокировать запуск приложений, не относящихся к Mac App Store.Оригинальный open (2), к сожалению, не имеет открытого источника.
  • spctl -a /path/to/app.app вернет 3 правильно, если приложение не разрешено запускать в соответствии с настройками безопасности и конфиденциальности.Но он также возвращает 3, если приложению требуются привилегии root для запуска (а запускаемое мной приложение), поэтому я не могу использовать этот метод.

Должна быть какая-то системная структура (возможно, LaunchServices или Security) или системная база данных (похожая на /var/db/SystemPolicyConfiguration/KextPolicy), которая должна быть запрошена для проверки возможности успешного запуска приложения.

Мое приложение не помещено в изолированную программную среду и не распространяетсячерез Mac App Store.Он запускается с правами пользователя.

1 Ответ

0 голосов
/ 25 декабря 2018

Попробуйте использовать spctl --assess --raw app.app.

--raw обеспечивает вывод XML в дополнение к коду выхода.Я не смог найти документацию для этих значений, но они могут содержать информацию, которая вам нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...