Вспомогательное приложение для входа в OS X считает, что приложение уже запущено
Я работаю над реализацией вспомогательного приложения для запуска основного приложения без песочницы при входе пользователя.
Я хочу убедиться, что в случае, если уже есть экземпляр приложения, работающего при входе в систему, вспомогательное приложение не запускает второй экземпляр приложения и завершает себя соответствующим образом.
Когда я тестирую это и смотрю на вывод консоли, я вижу, что мое вспомогательное приложение уже считает, что запущен экземпляр приложения, даже если его нет. Таким образом, вспомогательное приложение закроется без запуска основного приложения. Кто-нибудь имеет представление о том, почему вспомогательное приложение может думать, что существует экземпляр приложения, хотя его нет?
#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 ответ
runningApplicationsWithBundleIdentifier:
не вернется nil
, он вернет пустой массив, поэтому это сравнение всегда оценивается как ДА.
цитата из документов:
Возвращаемое значение
Массив NSRunningApplications или пустой массив, если ни одно приложение не соответствует идентификатору пакета.