即使禁用沙箱,CGEvent.tapCreate 也返回 nil

G4B*_*B3R 4 macos xcode swift

我有一个带有 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)
}
Run Code Online (Sandbox Code Playgroud)

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

小智 5

我有同样的问题,沙箱被禁用。

我使用“cgevent.tapcreate”来监听键盘事件。在 xode 中运行很好,但我的应用程序在归档后将无法运行。

然后我在苹果的官方文档中找到了以下几个字: doc link

已启用对辅助设备的访问。在 OS X v10.4 中,您可以使用系统偏好设置、通用访问面板、键盘视图启用此功能。

您应该申请访问辅助功能,代码使用swift 4:

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

    if accessEnabled == true {

    } else {

    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你