Estoy creando una aplicación para macOS que requiere monitorear las pulsaciones de teclas globales. Entonces, el detector de eventos global sería:
NSEvent.addGlobalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown) { (event) in print(event.keyCode) }Pero esto no hace nada como se menciona en este hilo . Intenté la respuesta dada en el hilo agregando:
let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String : true] let accessEnabled = AXIsProcessTrustedWithOptions(options) if !accessEnabled { print("Access Not Enabled") } else { print("Access Granted") }Esto hace que el cuadro de diálogo solicite acceso, pero dado que es un proceso asíncrono, otorgar acceso aún no mueve el hilo a un punto en el que pueda monitorear las pulsaciones de teclas. Además, este cuadro de diálogo aparece en cada lanzamiento de la aplicación, cómo curar esta elegante solicitud de accesibilidad sin problemas, ya que no hay documentación adecuada en ninguna parte, por lo que busqué.
Me di cuenta de que esto es un error de Xcode. Esto se produce si el proveedor de vista previa de SwiftUI se ejecuta simultáneamente con la compilación real, lo que provoca cierta confusión con los permisos de accesibilidad con macOS.
La aplicación funciona como se esperaba después de limpiar el directorio de datos derivados. Puedes hacer eso con
rm -rf ~/Library/Developer/Xcode/DerivedData