2014-10-18 2 views
9

Я работаю над расширением Finder Sync для OS X и хочу использовать фоновый сервис XPC.Общайтесь между расширением синхронизации искателя и XPC

Я могу начать в основном приложении и запустить его XPC и работать правильно, но ничего не происходит, когда я пытаюсь получить к нему доступ из Finder Sync. как sync finder, так и XPC являются их собственными пакетами, поэтому это может быть причиной. То, что я хочу, - это синхронизация с поиском, чтобы поговорить с XPC о состоянии файлов и основного приложения, чтобы поговорить как с поисковой синхронизацией, так и с XPC о списке папок для просмотра.

Неужели кому-то повезло с этим? Есть ли лучший способ для фоновой службы по запросу? Можно ли говорить между двумя службами XPC?

ответ

3

Работая с некоторыми инженерами Apple, они поняли, что это проблема, и предложили использовать LoginItem, пока не появится лучшее решение.

Итак, это своего рода сервис XPC, который постоянно работает. Связь XPC доступна как для приложения расширения, так и для хоста.

Он работает, хотя это не самое идеальное решение. Я рекомендую проект образца яблока, который касается элементов входа в XPC, для примера того, как это сделать.

+0

Не могли бы вы объяснить это более подробно? Используете ли вы отдельное приложение в качестве службы XPC или собираете его вместе в основном приложении? У меня проблема с NSXPCConnection, похоже, не открывается из плагина Finder в мою службу XPC, которая входит в основное приложение. –

1

Вы не можете напрямую связываться между приложением контейнера и добавочным номером, но вы можете косвенно использовать общие ресурсы. Я сделал именно то, что вы сделали, что совершенно неверно. Надеюсь, вы сохраните статус файла в базе данных, если не сохраните его, а затем поделите базу данных между контейнером и расширением. Я знаю, почему вы хотите использовать XPCService, как в Apple FinderSync Doc. (На самом деле по причине производительности, Создание NSXPCService для расширения и от XPCService, получить доступ к общей базе данных)

Для получения дополнительной информации о совместном использовании базы данных:

http://blog.sam-oakley.co.uk/post/92323630293/sharing-core-data-between-app-and-extension-in-ios-8

Надеется, что это помогает вам,

+0

Является ли база данных совместного использования по-прежнему рекомендуемым способом FinderSyncExtension <-> Связь MainApp? Как уведомить Finder, он должен обновляться, когда база данных обновляется? – mixtly87

+0

Я бы настоятельно рекомендовал AppleScript. Я просто слепо следил за яблочными документами и полностью забыл о AppleScript. Я использую AppleScript для связи. Нет, вам не нужно использовать общий контейнер, благодаря AppleScript :) –

1

Я реализовал MainApp < -> Связь FinderSyncExtension через CFMessagePorts. См. this answer для некоторых деталей.

Смежные вопросы