我正在实现一个辅助应用程序启动一个主要的,非沙盒应用程序在用户登录。
我想确保,在登录时已经有一个应用实例在运行的情况下,辅助应用不会启动应用的第二个实例,并适当地终止自己。
当我测试这个时,看看控制台的输出,我确实看到我的助手应用程序已经认为有一个应用程序实例在运行,即使没有。所以,辅助应用程序将退出而不启动主应用程序。有没有人知道为什么辅助应用程序可能认为有一个现有的应用程序实例,即使没有?
#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
runningApplicationsWithBundleIdentifier:
将不会返回nil
,它将返回一个空数组,因此此比较的结果始终为YES。
引用自文档:
返回值NSRunningApplications的数组,如果没有应用与bundle标识符匹配,则为空数组。