是否可以通过编程方式确定是否允许在macOS的“安全和隐私”设置中启动应用?
我试图以静默方式启动从Cocoa应用程序中从网络下载的.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
}
我尝试过的事情:
[NSWorkspace.sharedWorkpace launchApplicationAtURL:options:configuration:error]
返回NSRunningApplication
的实例。该对象不仅不允许我检查应用程序是否已成功启动,而且还要求我尝试启动应用程序以查看会发生什么,而不是事先执行检查,即我需要什么spctl -a /path/to/app.app
将正确返回3。但是,如果应用程序需要root特权才能运行(我正在启动的应用程序也需要运行),它还会返回3,因此我无法使用此方法。必须查询某些系统框架(可能是LaunchServices
或Security
)或系统数据库(类似于/var/db/SystemPolicyConfiguration/KextPolicy
),以便检查应用程序是否可以成功启动。
我的应用未经过沙箱测试,也未通过Mac App Store分发。它以用户权限运行。
答案 0 :(得分:0)
尝试使用spctl --assess --raw app.app
。
--raw
除了提供退出代码外,还提供XML输出。我找不到这些值的文档,但它们可能包含您需要的信息。