Как запустить зависимое приложение на OS X?

Каков программный механизм, с помощью которого приложение может быть запущено в результате запуска другого?

Например. при запуске iTunes также запускается рабочий стол Last.fm.

Или это просто вопрос замены какого-то "пакетного файла"?

Примечание: новичок в OS X.


person jldupont    schedule 11.05.2010    source источник


Ответы (1)


Не существует стандартного способа указать зависимое приложение. Значит, нужно как-то следить за системой. Вам не нужно активно проводить опрос; вам нужно использовать какой-то системный механизм, чтобы сказать вам.

Чтобы следить за запуском приложения с графическим интерфейсом, вам нужно написать фоновое приложение, получить центр уведомлений NSWorkspace с помощью

NSNotificationCenter* nc=[[NSWorkspace sharedWorkspace] notificationCenter];

и следите за NSWorkspaceDidLaunchApplicationNotification. См. Apple doc.

Чтобы следить за запуском приложения без графического интерфейса, вам нужно использовать kqueue. (Это функция BSD.) См. справочная страница. Обычно вам нужно наблюдать за процессами с launchd по fork или execve. Обратите внимание, что существует несколько процессов launchd, один для root и один для каждого вошедшего в систему пользователя.

В любом случае вам нужно автоматически запускать фоновое приложение, которое вы пишете. Есть много способов сделать это.

Чтобы просмотреть файл или каталог для изменения, вы можете использовать launchd агентов. См. справочную страницу.

Кстати: официальное приложение Last.fm при первом запуске устанавливает AudioScrobbler.bundle внутри ~/Library/iTunes/iTunes Plug-ins. iTunes считывает все подключаемые модули при запуске, а затем подключаемый модуль запускает приложение Last.fm. Это довольно хакерское, неприкрытое использование интерфейса, потому что плагин предназначен для визуализатора. См. документ Apple.

person Yuji    schedule 11.05.2010
comment
Я не мог понять, как это сделать из справочной страницы, на которую вы ссылаетесь. Не могли бы вы расширить это? Но +1 за краткое изложение last.fm! - person jldupont; 12.05.2010
comment
Ах, извините за путаницу... Агенты launchd могут следить за появлением новых файлов в каталоге, но не за запуском нового приложения. Вы можете использовать kqueue, но это не элегантный способ... Я добавлю информацию о kqueue. - person Yuji; 12.05.2010