确定是否允许在 macOS 中启动应用



有没有办法以编程方式确定是否允许在macOS的"安全和隐私"设置中启动应用程序?

我正在尝试静默启动从 Cocoa 应用程序内从 Web 下载的.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(2) 替代方案大多已经过时,并且没有反映允许用户阻止非 Mac App Store 应用程序启动的"安全和设置"的变化。不幸的是,最初的 open(2) 不是开源的。
  • 如果不允许根据安全和隐私设置启动应用程序,spctl -a /path/to/app.app将正确返回 3。但是,如果应用程序需要root权限才能运行(并且我正在启动的应用程序需要),它也返回3,因此我无法使用此方法。

必须有一些系统框架(可能是LaunchServicesSecurity)或系统数据库(类似于/var/db/SystemPolicyConfiguration/KextPolicy),必须查询以检查应用程序是否可以成功启动。

我的应用程序未沙盒化,也不会通过 Mac App Store 分发。它以用户权限运行。

尝试使用spctl --assess --raw app.app.

除了退出代码之外,--raw还提供 XML 输出。我找不到这些值的文档,但它们可能包含您需要的信息。

相关内容

  • 没有找到相关文章

最新更新