Есть ли способ программно определить, разрешено ли запускать приложение в настройках безопасности и конфиденциальности в 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.Он запускается с правами пользователя.