swift - CGEvent.tapCreate 返回 nil 即使禁用了沙箱

标签 swift xcode macos

我有一个带有 swift 桥接器的 C 文件,我可以为我的 macos 程序调用它,它工作正常。

但是它有一个函数 CGEventTapCreate 只能在终端中使用 sudo 才能工作,否则它会返回 null,就是这样。

所以我将 C 代码移植到 Swift,但是该函数仍然返回 nil,因为它没有特权。常见的解决方案是禁用沙盒,但问题仍然存在。

let eventTap : CFMachPort? =
    CGEvent.tapCreate ( tap: CGEventTapLocation.cgSessionEventTap
                      , place: .headInsertEventTap
                      , options: CGEventTapOptions.defaultTap
                      , eventsOfInterest: mask
                      , callback: myCGEventCallback
                      , userInfo: nil )

if eventTap == nil { -- always enter here
    print("[Swift] Failed to create event tap :(")
    exit(1)
}

TL;DR:如何授予 macOS 应用程序运行 CGEventTapCreate 的权限?

最佳答案

我遇到了同样的问题,沙箱被禁用了。

我使用“cgevent.tapcreate”来监听键盘事件。在 xode 中运行没问题,但我的应用程序在存档后无法运行。

然后在apple的官方文档中找到了下面这句话: doc link

Access for assistive devices is enabled. In OS X v10.4, you can enable this feature using System Preferences, Universal Access panel, Keyboard view.

辅助功能需要申请权限,代码使用swift 4:

func acquirePrivileges() {
    let trusted = kAXTrustedCheckOptionPrompt.takeUnretainedValue()
    let privOptions = [trusted: true] as CFDictionary
    let accessEnabled = AXIsProcessTrustedWithOptions(privOptions)

    if accessEnabled == true {

    } else {

    }
}

希望对你有帮助

关于swift - CGEvent.tapCreate 返回 nil 即使禁用了沙箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49916822/

相关文章:

ios - UITableViewCell 右侧的边框不可见

ios - 一次关闭 2 个 View Controller

iphone - 为什么这只是有时有效? (UITextView辞职第一响应者问题)

macos - 带有命令行输入重定向的 NSTask

objective-c - 向 MainWindow 添加 View 或窗口

swift - 如何创建子类对象?

ios - 在 Web View 中解包带有 "loadHTMLString"的可选值时意外发现 nil

ios - 拖动单元格时如何在 UITableViewCell 中隐藏阴影

ios - 我有隐藏文本字段的问题

macos - 无代码 kext 加载问题