如何提示 macOS 应用程序中的辅助功能(来自 AppDelegate)?

How to prompt for accessibility features in a macOS app (from the AppDelegate)?

我正在构建一个需要监控全局击键的 macOS 应用程序。所以全局事件侦听器将是:

NSEvent.addGlobalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown) { (event) in
          print(event.keyCode)
}

但这并没有像 中提到的那样。我确实通过添加以下内容尝试了线程中给出的答案:

let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String : true]
let accessEnabled = AXIsProcessTrustedWithOptions(options)
      

if !accessEnabled {
   print("Access Not Enabled")
} else {
   print("Access Granted")
}

这会提示对话框请求访问,但由于它是一个异步过程,提供访问仍然不会将线程移动到我可以监视击键的位置。此外,这个对话框会在每次启动应用程序时弹出,如何轻松地策划这种优雅的可访问性请求,因为据我搜索,任何地方都没有合适的文档。

我意识到这是一个 Xcode 错误。如果 SwiftUI 预览提供程序 运行 与实际构建同时进行,则会导致与 macOS 的可访问性权限混淆。

清理派生数据目录后,应用程序按预期工作。你可以用

rm -rf ~/Library/Developer/Xcode/DerivedData