Вспомогательное приложение для входа в 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 или пустой массив, если ни одно приложение не соответствует идентификатору пакета.

Другие вопросы по тегам