Компоненты пути, необходимые для запуска приложения через NSWorkspace?
Короткий вопрос: правильна ли моя модификация статьи? Могут ли эти изменения повредить текущему поведению? В каких ситуациях?
Я заметил немного странный код в моей реализации AppDelegate.
До (Запустите "исполняемый файл Unix"):
NSString *path = [[NSBundle mainBundle] bundlePath];
NSArray *p = [path pathComponents];
NSMutableArray *pathComponents = [NSMutableArray arrayWithArray:p];
[pathComponents removeLastObject];
[pathComponents removeLastObject];
[pathComponents removeLastObject];
[pathComponents addObject:@"MacOS"];
[pathComponents addObject:mainAppName];
NSString *mainAppPath = [NSString pathWithComponents:pathComponents];
[[NSWorkspace sharedWorkspace] launchApplication:mainAppPath];
И спросил себя. Могу ли я сократить некоторые дополнительные переменные? И ответ да (если я не ошибаюсь).
Действительно хорошая статья содержит тот же код.
И моя идея состоит в том, чтобы просто запустить основной пакет, особенно потому что -[NSWorkspace launchApplication:] создан специально для запуска пакетов *.app.
Параметр appName не должен указываться с полным путем, а в случае оболочки приложения может указываться с расширением.app или без него, как описано в разделе Использование расширения.app.
После (Запустите пакет ".app"):
NSString *path = [[NSBundle mainBundle] bundlePath];
NSArray *p = [path pathComponents];
NSMutableArray *pathComponents = [NSMutableArray arrayWithArray:p];
[pathComponents removeLastObject];
[pathComponents removeLastObject];
[pathComponents removeLastObject];
[pathComponents removeLastObject];
NSString *mainAppPath = [NSString pathWithComponents:pathComponents];
[[NSWorkspace sharedWorkspace] launchApplication:mainAppPath];