【问题标题】:How to prompt for accessibility features in a macOS app (from the AppDelegate)?如何提示 macOS 应用程序中的辅助功能(来自 AppDelegate)?
【发布时间】:2022-01-28 14:12:29
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 您是否在隐私设置中为您的应用启用了辅助功能?一旦允许它不会再次提示
  • 我确实在设置中允许了它。不管它再次提示,我去检查一下,我已经给了它许可。提示总是在构建和运行时弹出
  • 我在 macOS Monterey 12.2 上,它第一次提示访问,我启用了可访问性。第二次启动不提示访问,按键被捕获。我通过 Xcode 直接运行源代码
  • @RTXGamer 感谢您提供此信息。原来,这是一个 macOS 错误(检查答案)

标签: swift macos cocoa appkit keystroke


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多