You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:12:02