macOS检测辅助功能的AXIsProcessTrustedWithOptions
macOS检测辅助功能的AXIsProcessTrustedWithOptions

macOS检测辅助功能的AXIsProcessTrustedWithOptions

AXIsProcessTrustedWithOptions 是 macOS 中辅助功能 (Accessibility) API 的一部分,用于检测并请求应用是否被授予了“辅助功能”权限(例如监听键盘输入、操作其他 App 窗口等)。

基本用法

func AXIsProcessTrustedWithOptions(_ options: CFDictionary?) -> Bool

检查进程是否被系统“辅助功能”授信,可选地弹出系统提示框,引导用户去“设置 > 辅助功能”中添加权限。

需要导入ApplicationServices框架:

import ApplicationServices

参数配置:option,一个可选的 CFDictionary,可以传入一些设置键值,目前常用的是:

let options: [String: Any] = [kAXTrustedCheckOptionPrompt.takeRetainedValue() as String: true]

kAXTrustedCheckOptionPrompt 是个特殊的 key,当设置为 true 时,macOS 会弹出系统设置引导框,引导用户前往“系统设置 -> 辅助功能”中勾选 App。

返回值:AXIsProcessTrustedWithOptions返回true,表示当前应用已被用户授予“辅助功能”权限;返回 false表示没有权限,可能需要引导用户手动开启。

使用示例

import ApplicationServices

func checkAccessibilityPermission() -> Bool {
    let options = [kAXTrustedCheckOptionPrompt.takeRetainedValue() as String: true] as CFDictionary
    return AXIsProcessTrustedWithOptions(options)
}

当返回true后,在继续调用需要“辅助功能”的方法,否则不去调用方法。

使用场景

在需要获取“辅助功能”时,使用该函数并获取用户授权。

如果不授权 “辅助功能”,则无法实现AX APIs等需要辅助权限的方法。

在App Sandbox的项目(新项目)中,调用该方法不会弹出系统设置引导框,可以使用NSWorkspace打开“系统设置”-“辅助功能”的窗口:

Button(action: {
    if let url = URL(string: "x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility") {
            NSWorkspace.shared.open(url)
        }
},label:  {
    Text("Open Settings")
}

注意事项

1、macOS Ventura 及之后,用户必须手动授权 App;

2、必须关闭App Sandbox和Hardened Runtime权限,才能弹出检测提示框,否则无法弹出提示框;

3、权限授予后,用户需要重启应用;

4、建议 App 在启动时调用一次该函数,以引导用户开启权限。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注