我正在制作一个 macOS 应用程序,它应该从服务器获取一些字符串,然后将该字符串粘贴到当前聚焦的应用程序中。为了实现这一点,我使用粘贴板,然后使用 CGEvent 模拟 CMD + V 按键按下
func copyToClipboard(_ string: String) {
let pasteboard = NSPasteboard.general
pasteboard.clearContents()
pasteboard.setString(string, forType: .string)
}
func simulateCmdVKeyPress() {
let source = CGEventSource(stateID: CGEventSourceStateID.hidSystemState)
// Command Key Down
if let cmdKeyDown = CGEvent(keyboardEventSource: source, virtualKey: 0x37, keyDown: true) {
cmdKeyDown.flags = CGEventFlags.maskCommand
cmdKeyDown.post(tap: CGEventTapLocation.cghidEventTap)
}
// 'V' Key Down and Up
if let vKeyDown = CGEvent(keyboardEventSource: source, virtualKey: 0x09, keyDown: true),
let vKeyUp = CGEvent(keyboardEventSource: source, virtualKey: 0x09, keyDown: false) {
vKeyDown.flags = CGEventFlags.maskCommand
vKeyDown.post(tap: CGEventTapLocation.cghidEventTap)
vKeyUp.post(tap: CGEventTapLocation.cghidEventTap)
}
// Command Key Up
if let cmdKeyUp = CGEvent(keyboardEventSource: source, virtualKey: 0x37, keyDown: false) {
cmdKeyUp.post(tap: CGEventTapLocation.cghidEventTap)
Thread.sleep(forTimeInterval: 0.1) // Small delay to ensure Command key state is cleared
}
}
在调试中它工作正常。但是当我存档并解压该应用程序时,它停止工作。似乎缺少某些许可或权利。在发布模式下,无论是在沙盒中还是在没有沙盒的情况下,它都无法工作。请帮忙。
我已经找到原因了。不可能为两个不同文件夹中的同一应用程序授予相同的访问权限。因此,当您向位于特定文件夹中的应用程序授予可访问权限,然后从不同的文件夹中使用相同的捆绑包 ID 运行该应用程序时,第二个应用程序将不会获得可访问权限,甚至永远不会请求它。