создание прозрачного процесса для компонентов какао - PullRequest
0 голосов
/ 16 ноября 2009

У меня есть приложение A , которое может или может не нуждаться в порождении приложения B и будет связываться с ним с помощью удаленного обмена сообщениями (через NSConnection s и т. Д. .).

Хотя я знаю, как это сделать, если сначала запускается B , мне интересно:
Что такое чистый, основанный на какао подход прозрачного запуска B по требованию?

(Для тех, кто знаком с COM, я действительно ищу CoCreateInstance() эквивалент)

Ответы [ 2 ]

2 голосов
/ 16 ноября 2009

Если другое приложение является приложением командной строки или может вести себя как одно, NSTask - лучший выбор - вы можете запустить другую программу и определить ее стандартные потоки ввода, вывода и ошибок. Если это приложение с графическим интерфейсом, вы можете использовать Scripting Bridge или NSWorkspace + использовать собственный протокол связи с NSConnection и т. Д.

2 голосов
/ 16 ноября 2009

Если это приложение с графическим интерфейсом, вы можете сделать что-то подобное для 10.6:

NSArray * runningBs = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.example.B"];
if ([runningBs count] == 0) {
  NSURL * bURL = [[NSWorkspace sharedWorkspace] URLForApplicationWithBundleIdentifier:@"com.example.B"];
  NSRunningApplication * b = [[NSWorkspace sharedWorkspace] launchApplicationAtURL:bURL options:NSWorkspaceLaunchDefault configuration:nil error:nil];
}

для 10,5:
Используйте -[NSWorkspace launchedApplications] и выполните итерацию по массиву, чтобы увидеть, найдете ли вы B .
Если нет, найдите [NSWorkspace absolutePathForAppBundleWithIdentifier:], а затем используйте один из [NSWorkspace launchApplication:] вариантов.

...