macOS Big Sur 11.5版本Accessibility API是否故障?调用返回错误-25204
问题原因分析
你返回的错误码-25204对应Accessibility框架的kAXErrorNotAuthorized,含义是当前进程未获得系统辅助功能权限,无法调用AX相关API。
macOS 11.5的调整点
Big Sur 11.5确实对Accessibility API的权限校验逻辑做了收紧:
- 11.0及更早版本中,应用只要在辅助功能列表中被勾选过,后续小幅修改二进制(比如Xcode调试编译)后权限仍然生效
- 11.5版本后,只要应用的二进制哈希发生变化,系统会自动撤销该应用之前的辅助功能授权,需要重新手动授权才能生效,即使是同一个bundle ID的应用也不例外
修复步骤
- 先添加权限预校验逻辑,在调用任何AXAPI之前先调用
AXIsProcessTrusted()判断当前进程是否已经获得授权,未授权的话可以直接弹出系统权限引导,避免后续调用失败
示例校验代码:if (!AXIsProcessTrusted()) { NSLog(@"未获得辅助功能权限,请前往系统设置授权"); // 可选:直接跳转到辅助功能设置页 [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"]]; return; } - 打开「系统设置→隐私与安全性→辅助功能」,找到你当前运行的应用(如果是直接在Xcode中启动调试,需要找Xcode),先取消勾选,再重新勾选,然后重启应用再测试
- 如果你的应用开启了沙盒,需要在 entitlements 文件中添加临时权限配置:
com.apple.security.temporary-exception.apple-events,值设为你要控制的应用的bundle ID,或者设为*适配所有应用
代码优化建议
你当前写死PID的方式容易出错,Xcode每次重启PID都会变化,可以用系统API动态获取前台应用的PID:
NSRunningApplication *frontApp = [[NSWorkspace sharedWorkspace] frontmostApplication]; pid_t frontPid = frontApp.processIdentifier; AXUIElementRef frontMostApp = AXUIElementCreateApplication(frontPid);
内容的提问来源于stack exchange,提问作者Antony
相关产品推荐
相关产品推荐

