我正致力于实施帮助应用以启动主要版本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
答案 0 :(得分:2)
runningApplicationsWithBundleIdentifier:
将不会返回nil
,它将返回一个空数组,因此此比较始终评估为YES。
引自docs:
返回值
NSRunningApplications数组,如果没有应用程序与bundle标识符匹配,则为空数组。