如何提示 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
我正在构建一个需要监控全局击键的 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