bongocat在macos上键盘无响应是因缺少输入监控和辅助功能权限,需手动在“系统设置→隐私与安全性”中分别勾选这两项授权,且沙盒配置须与权限声明协同生效。

macOS 应用要访问键盘、鼠标等输入设备,不是靠“文件路径权限”或“沙盒书签”,而是依赖系统级隐私授权机制——核心是 输入监控(Input Monitoring) 和 辅助功能(Accessibility) 权限。这两类权限独立于 App Sandbox 文件访问控制,但必须与沙盒配置协同生效。
输入监控权限:让应用“看到”按键和点击
这是键盘响应类应用(如 BongoCat、自定义快捷键工具、输入法增强组件)最关键的权限。它允许应用监听全局键盘和鼠标事件:
- 必须在 Info.plist 中声明
NSAppleEventsUsageDescription(若使用 Apple Events)和NSPrivacyAccessedAPITypes(macOS 12+),其中包含InputMonitoring类型及对应用途描述 - 首次调用
CGEvent.tapCreate(...)或类似 API 时,系统自动弹出授权对话框;用户拒绝后,后续调用返回 nil 或失败 - 授权状态可编程检测:
AXIsProcessTrustedWithOptions([kAXTrustedCheckOptionPrompt: false] as CFDictionary)返回false表示未授权 - 注意:该权限不通过 Entitlements 文件配置,也不受沙盒容器限制,但沙盒应用仍需用户手动开启(系统设置 → 隐私与安全性 → 输入监控)
辅助功能权限:补充控制能力
部分输入行为(如模拟按键、聚焦窗口、接管光标)需辅助功能权限支持:
- Info.plist 中需添加
NSAccessibilityUsageDescription描述用途(例如:“用于在游戏内实现快捷指令触发”) - 运行时可通过
AXIsProcessTrusted()检查是否已获授权 - 若未授权,可引导用户跳转至系统偏好设置:
NSWorkspace.shared.open(URL(string: "x-apple://com.apple.preference.security?section=Privacy&anchor=Accessibility")!) - 即使启用了 App Sandbox,此权限也必须单独授予——沙盒本身不限制该能力,但系统强制要求用户知情同意
沙盒配置与输入权限的协同要点
沙盒本身不直接管理输入设备访问,但错误的沙盒配置可能导致授权流程中断或功能降级:
- 确保
com.apple.security.app-sandbox在 entitlements 中设为true,否则上架会被拒;但沙盒启用后,不会阻止输入监控授权弹窗出现 - 不要在 entitlements 中误加
com.apple.security.temporary-exception.iokit-get-properties等底层硬件权限——现代 macOS 不允许沙盒应用绕过隐私框架直接读取 HID 设备 - 若应用同时需要访问用户文件(如记录按键日志到 Documents),则需额外配置
com.apple.security.files.user-selected.read-write并走 NSOpenPanel 流程,与输入权限分开处理 - 签名必须完整:修改 Info.plist 或 entitlements 后,需重新 codesign,否则权限声明不被系统识别
调试与验证方法
快速确认输入权限是否就位:
- 打开“系统设置 → 隐私与安全性 → 输入监控”和“辅助功能”,查找你的 App 名称,确认勾选状态
- 终端执行:
tccutil reset Accessibility com.yourcompany.yourapp可重置授权,方便测试首次引导流程 - 控制台中过滤关键词
AXIS、CGEvent、TCC,查看是否有拒绝日志(如Denied access to service: kTCCServiceAccessibility) - 沙盒应用若在授权后仍无响应,检查是否在非主线程调用事件监听 API——部分 API 要求在主线程初始化











