在Cocoa中添加一个进程的观察者

NSA*_*ict 4 macos cocoa itunes objective-c observer-pattern

我正在为iTunes开发一种插件.

许多用户已经请求,如果他们启动iTunes,他们想要启动插件,这当然是有意义的.但是,我不知道该怎么做.

我想到了一个帮助应用程序,这可能是唯一的方法.唯一困扰我的是如何获得通知.当然,我可以不断检查iTunes是否正在运行,但我不确定这是否是正确的方法.

我宁愿添加我的应用程序作为该过程的观察者.那可能吗?

如果没有,Activity Monitor如何做到这一点?


感谢Daij-Djan!我得到它像这样工作:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                                                           selector:@selector(iTunesLaunched:)
                                                               name:NSWorkspaceDidLaunchApplicationNotification
                                                             object:nil];

    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                                                           selector:@selector(iTunesTerminated:)
                                                               name:NSWorkspaceDidTerminateApplicationNotification
                                                             object:nil];
}

-(void) iTunesLaunched:(NSNotification *)notification {
    NSRunningApplication *runApp = [[notification userInfo] valueForKey:@"NSWorkspaceApplicationKey"];
    if ([runApp.bundleIdentifier isEqualToString:@"com.apple.iTunes"])
        NSLog(@"start");

}

-(void) iTunesTerminated:(NSNotification *)notification {
    NSRunningApplication *runApp = [[notification userInfo] valueForKey:@"NSWorkspaceApplicationKey"];
    if ([runApp.bundleIdentifier isEqualToString:@"com.apple.iTunes"])
        NSLog(@"terminate");

}
Run Code Online (Sandbox Code Playgroud)

Dai*_*jan 5

注册NSWorkspace通知:
NSWorkspaceDidLaunchApplicationNotification
NSWorkspaceDidTerminateApplicationNotification

请参阅https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSWorkspace_Class/Reference/Reference.html


还有可能KVO的runningApplications属性
btw cocoatech有一个很好的NTRunningAppManager类就可以做到这一点