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

问题描述 投票:2回答:1

我有一个带有快速桥的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 apps运行CGEventTapCreate的权限?

swift xcode macos
1个回答
1
投票

我遇到了同样的问题并禁用了沙盒。

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

然后我在apple的官方文档中找到了以下单词: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 {

    }
}

希望能帮助到你

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