AXUIElementCopyAttributeValues返回kAXErrorAPIDisabled问题求助
解决
kAXErrorAPIDisabled错误的方案 首先明确说:kAXErrorAPIDisabled确实意味着辅助功能API被系统禁用了,这是macOS从Mojave开始加强隐私保护后的常见问题,Catalina 10.15.7的权限管控更严格,咱们一步步来解决:
第一步:手动开启辅助功能权限
打开「系统偏好设置」→「安全性与隐私」→「隐私」标签页→左侧选择「辅助功能」,然后在右侧列表里找到你的应用(如果是Xcode调试阶段,也可以直接勾选Xcode),把对应的复选框打勾。
⚠️ 注意:勾选后最好重启你的应用或者Xcode,不然权限可能不会立即生效。第二步:在代码中主动检查并请求权限
不能直接硬调用辅助功能API,要先确认权限状态。可以用AXIsProcessTrustedWithOptions()函数来检查并触发系统的权限请求弹窗,示例代码如下:NSDictionary *options = @{(id)AXTrustedCheckOptionPrompt: @YES}; BOOL isTrusted = AXIsProcessTrustedWithOptions((CFDictionaryRef)options); if (!isTrusted) { // 权限未授予,这里可以提示用户去系统设置开启,或者等待用户授权 NSLog(@"请在系统设置中开启辅助功能权限"); return; } // 之后再调用你的AXUIElementCopyAttributeValues代码 CFArrayRef windows; AXError result = AXUIElementCopyAttributeValues(self.elementRef, kAXWindowsAttribute, 0, 100, &windows);第三步:配置Info.plist权限描述
在你的项目Info.plist中添加NSAccessibilityUsageDescription键,值填写你需要使用辅助功能的原因(比如"需要获取窗口信息来提供更好的用户体验")。这个描述会在系统弹出权限请求时显示给用户,让用户明白为什么要授权,提高授权成功率。调试时的小坑
如果是用Xcode调试,有时候会遇到权限勾选后仍然报错的情况,这时候可以试试:- 完全退出Xcode和你的应用,重新打开
- 去「辅助功能」列表里先取消勾选,再重新勾选一次
- 确认你的应用签名是有效的(调试阶段Xcode自动签名一般没问题)
内容的提问来源于stack exchange,提问作者Honeybadger
相关产品推荐
相关产品推荐

