Связь между расширением синхронизации Finder и XPC

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

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

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

3 ответа

Решение

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

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

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

Я реализовал MainApp <-> FinderSyncExtension через CFMessagePorts, Смотрите мой вопрос и ответ для некоторых деталей:

Как должно взаимодействовать расширение Finder Sync и главное приложение?

Я упорно игнорировал utahwithak ответа "s и пытался заставить его работать в любом случае. В конечном итоге мне пришлось задать аналогичный вопрос на форумах разработчиков Apple, и, наконец, я получил окончательный ответ о том, почему подключение расширения Finder Sync к встроенной службе XPC не является жизнеспособным проектом системы.

По существу:

  • Расширение Finder Sync по существу ведет себя как стороннее приложение в том смысле, что оно не имеет той же области действия, что и приложение хоста, чтобы иметь возможность установить соединение XPC со встроенной службой XPC.
  • utahwithak верен в том, что для того, чтобы расширение синхронизации Finder могло обмениваться данными со службой XPC, оно должно быть элементом входа в XPC. Однако здесь есть несколько предостережений:

    • Кажется, это случайная особенность. Не уверен, что это то, что может быть в конечном итоге исправлено / удалено
    • XPC должен работать всегда, даже если он не нужен, поскольку он является элементом входа в систему.
    • Если это элемент входа в систему, пользователь должен явно включить эту функцию и иметь возможность отказаться.

Источник:

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

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

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

Надеюсь, это поможет вам,

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