OS X登录帮助应用程序认为应用程序已在运行

时间:2015-06-03 17:33:28

标签: objective-c macos nsworkspace nsrunningapplication

我正致力于实施帮助应用以启动主要版本non-sandboxed app upon user login

我想确保,如果已经有一个应用程序在登录时运行的实例,帮助应用程序不会启动该应用程序的第二个实例,并适当地终止自身。

当我测试这个,并查看Console的输出时,我确实看到我的帮助应用程序已经认为有一个应用程序实例在运行,即使没有。因此,帮助应用程序将退出而不启动主应用程序。有没有人知道为什么帮助应用程序可能认为有现有的应用程序实例,即使没有?

#import "AppDelegate.h"


@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
    //Check if we're currently running My App. If we are, just quit the helper app.
    if ([NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.me.myApp"]) {
        NSLog(@"We're running My App already, so we're going to quit.");
    }

    //Otherwise, launch My App, then quit the helper app.
    else {
        [[NSWorkspace sharedWorkspace] launchApplication:@"My App"];
    }

    [[NSApplication sharedApplication] terminate:self];
}


@end

1 个答案:

答案 0 :(得分:2)

runningApplicationsWithBundleIdentifier:将不会返回nil,它将返回一个空数组,因此此比较始终评估为YES。
引自docs

  

返回值
  NSRunningApplications数组,如果没有应用程序与bundle标识符匹配,则为空数组。