1

我有一个启动守护程序,我希望它在每次应用程序启动时运行一个函数。

我目前NSWorkspace用于检查应用程序的启动。

/Library/LaunchDaemons/中的 parasited.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>parasited</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/parasited</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>OnDemand</key>
    <false/>
</dict>
</plist>

寄生的main.m

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        [[[NSWorkspace sharedWorkspace]notificationCenter]addObserver:[[Parasited alloc] init] selector:@selector(inject) name:NSWorkspaceDidLaunchApplicationNotification object:nil];

        }
}

似乎我的进程parasited不断重启,我不知道为什么。我的目标是每次启动诸如“Safari、Mail、Finder 等”之类的应用程序时运行一个函数。

感谢您的帮助!

4

1 回答 1

2

您的应用程序没有中央运行循环来循环和等待通知。

作为一个实验,CFRunLoopRun()在你的 NSWorkspace 调用之后添加一个调用。CFRunLoopRun将循环直到进程终止。

请参阅 Matt Gallagher 的揭秘 NSApplication 通过重新创建它来了解更多关于运行循环及其在保持应用程序运行和处理事件中所起的作用。

于 2013-12-05T13:59:56.647 回答