我有一个简单的代码片段(不是MVC),如下所示
# include <Cocoa/cocoa.h>
int main(argc, *argv[]) {
[NSApplication sharedApplication]
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyUpMask handler:^(NSEvent *evt){ .... }]
[NSApp run]
}
当编译为命令行二进制并运行时,全局事件监视在允许程序进入系统首选项后工作 - &gt;隐私和安全;然后我将它打包成一个.app,并运行它,即使在允许隐私和应用程序的应用程序之后,全局监视器也停止了工作。安全。
我是Cocoa的新手,为了为打包的应用程序实现一个简单的全局监视器,我还需要做什么?
答案 0 :(得分:1)
然后我把它打包成一个.app
您是将CLI程序放在应用程序包中还是重新开始使用新的图形Cocoa应用程序?
我建议您使用Xcode的项目窗口创建一个新的GUI应用程序,然后使用以下代码段作为您的applicationDidFinishLaunching:implementation:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
Boolean isTrusted = AXIsProcessTrustedWithOptions(CFDictionaryCreate(NULL, (const void*[]){ kAXTrustedCheckOptionPrompt }, (const void*[]){ kCFBooleanTrue }, 1, NULL, NULL));
if(isTrusted)
{
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyUpMask handler:^(NSEvent *evt){ NSLog(@"Received NSKeyUp event."); }];
}
}
这将自动打开“系统首选项”窗格,允许用户选择应该信任您的应用程序。 AXIsProcessTrustedWithOptions需要OS X 10.9(Mavericks)。
<强>更新强>
调试全局事件监视器时,“支持辅助设备”存在一些缺陷: