Objective c CGEventTapCreate在macOS Mojave中返回null

Objective c CGEventTapCreate在macOS Mojave中返回null,objective-c,macos,macos-mojave,cgeventtap,Objective C,Macos,Macos Mojave,Cgeventtap,我完全被已经工作了很多年的逻辑所束缚。我用它来听键盘事件(热键),而应用程序是在后台 CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, CGEventMaskB

我完全被已经工作了很多年的逻辑所束缚。我用它来听键盘事件(热键),而应用程序是在后台

CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap,
                            kCGHeadInsertEventTap,
                            kCGEventTapOptionDefault,
                            CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(kCGEventFlagsChanged),
                            myCGEventCallback,
                            nil);

if (!eventTap) {
    printf("error: event tap register failed\n");
    return false;
}

代码没有改变,在mojave的最新更新之前,这已经运行了很长时间。我怎样才能找出原因呢?有人知道我怎样才能让它再次工作吗?

经过一番战斗后,它开始工作了。将此添加到您的info.plist:

  <key>NSAppleEventsUsageDescription</key>
  <string></string>
nsappleeventsagedescription
然后转到您的系统首选项->安全->隐私->可访问性,并确保您的应用程序已存在并已选中


如果它已经存在,并且这种情况持续发生,请将其删除,然后再次添加。每次重建应用程序时,我都必须这样做…

应该总是提到源代码。这是因为您是一个活动筛选器(
kcgeventtaptiondefault
),您可以通过将
kcgeventtaptiondefault
替换为
listenly
将其更改为
listenly=1
模式