我找到了这段代码,并一直用于一个应用程序,该应用程序将蓝牙激光距离测量设备的测量结果粘贴到聚焦的应用程序中。
当我第一次运行它时,MacOS 提示我允许它使用辅助功能,我同意了。然后它就会像怀疑的那样工作。 但是,如果我更改代码中的某些内容并重新编译它,它就不再起作用。然后,我首先必须从“首选项/安全/隐私/可访问性”中删除我的应用程序,然后再次运行它。然后它再次请求许可并起作用。
知道我在这里做错了什么吗?我是个初学者,只是再次开始编码,因为我需要一个适用于该设备的 Mac 应用程序。
func pasteMatchStyle() {
/*Source: https://stackoverflow.com/questions/40096457/swift-macos-how-to-paste-into-another-application?noredirect=1&lq=1
*/
let event1 = CGEvent(keyboardEventSource: nil, virtualKey: 0x09, keyDown: true) // opt-shft-cmd-v down
event1?.flags = [CGEventFlags.maskCommand, CGEventFlags.maskShift, CGEventFlags.maskAlternate]
event1?.post(tap: CGEventTapLocation.cghidEventTap)
let event2 = CGEvent(keyboardEventSource: nil, virtualKey: 0x09, keyDown: false) // opt-shf-cmd-v up
event2?.post(tap: CGEventTapLocation.cghidEventTap)
}
如果您只需取消选中并重新选中权限框,然后重新运行您的应用程序,它应该可以工作。
辅助功能权限仅适用于已批准的应用程序,但您构建了系统已识别为不同的新版本(读取:不受信任),但旧版本仍已批准,因此该框保持选中状态。
这实际上是由于签名证书在不同版本之间发生变化。请参阅这篇文章。当它发生变化时,macOS 会认为它是一个新应用程序(即使它具有相同的名称、捆绑包 ID 等),因此拥有自己的一组权限。
然而,苹果似乎并没有理会这种情况,也没有在隐私设置屏幕中实现对这种情况的处理,只显示最先获得许可的最旧版本......然后你必须手动删除它并再次调用权限授予。
TL;DR -> 确保始终使用相同的证书进行签名,并且权限将保留。