代码之家  ›  专栏  ›  技术社区  ›  Dmitry Serov

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

  •  1
  • Dmitry Serov  · 技术社区  · 6 年前

    是否有一种方法可以通过编程确定是否允许在macOS的安全和隐私设置中启动应用程序?

    我正在尝试以静默方式启动一个从Cocoa应用程序中从web下载的.app,但是如果用户不允许来自Mac应用程序商店之外的应用程序,我的应用程序将无法启动,并出现一个对话框,建议用户更改其设置。我想知道应用程序是否能成功启动,如果不能,请自己打开安全和隐私设置,以便用户更改它们。

    基本上,我在寻找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 . 这个对象不仅不允许我检查应用程序是否已成功启动,而且还要求我 尝试
    • 开源开放(2)的替代方案大多已经过时,不能反映安全设置的变化,允许用户阻止非Mac应用商店应用程序的启动。遗憾的是,最初的open(2)不是开源的。
    • spctl -a /path/to/app.app 如果根据安全和隐私设置不允许启动应用程序,将正确返回3。但如果应用程序需要root权限才能运行(而我正在启动的应用程序需要),它也会返回3,因此我不能使用此方法。

    LaunchServices Security )或系统数据库(类似于 /var/db/SystemPolicyConfiguration/KextPolicy )为了检查应用程序是否可以成功启动,必须对其进行查询。

    1 回复  |  直到 6 年前
        1
  •  0
  •   pointum    6 年前

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

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

    推荐文章