更改代码和新版本后,MacOS Accessibility API 无法工作(Xcode/Swift 模拟键盘输入)

问题描述 投票:0回答:3

我找到了这段代码,并一直用于一个应用程序,该应用程序将蓝牙激光距离测量设备的测量结果粘贴到聚焦的应用程序中。

当我第一次运行它时,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)
}
swift xcode macos accessibility
3个回答
1
投票

如果您只需取消选中并重新选中权限框,然后重新运行您的应用程序,它应该可以工作。

辅助功能权限仅适用于已批准的应用程序,但您构建了系统已识别为不同的新版本(读取:不受信任),但旧版本仍已批准,因此该框保持选中状态。


0
投票

我已经在那里度过了很多次了。
最终,我解决了它,希望它能解决你遇到的同样的问题。


您可能尚未在 macOS 应用程序上设置

App Sandbox

Go to project setting -> Signing & Capabilities -> + Capability -> Add App Sandbox.

在 Xcode 项目的

Signing & Capability
选项卡上看起来像这样:

(选中/关闭哪些选项并不重要)

参加聚会太晚了,但至少在 2023 年它对我有用。

我想这可能是您遇到的稍微不同的问题,
但我希望它可以帮助其他开发人员处理问题。


0
投票

这实际上是由于签名证书在不同版本之间发生变化。请参阅这篇文章。当它发生变化时,macOS 会认为它是一个新应用程序(即使它具有相同的名称、捆绑包 ID 等),因此拥有自己的一组权限。

然而,苹果似乎并没有理会这种情况,也没有在隐私设置屏幕中实现对这种情况的处理,只显示最先获得许可的最旧版本......然后你必须手动删除它并再次调用权限授予。

TL;DR -> 确保始终使用相同的证书进行签名,并且权限将保留。

© www.soinside.com 2019 - 2024. All rights reserved.