Запуск нескольких экземпляров одной и той же службы XPC (NSXPCConnection)

Можно ли запускать несколько экземпляров одной и той же службы XPC с помощью API-интерфейсов XPC, найденных в Foundation.framework(NSXPCConnection и т.д.)? docs не дают большого понимания этого вопроса.

EDIT. Прошел быстрый тест, и кажется, что работает только один экземпляр службы, хотя я создал два подключения XPC. Есть ли способ запустить другой экземпляр?

Ответ 1

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

Ответ 2

Немного поздно, но окончательный ответ на этот вопрос представлен в xpcservice.plist manpage:

ServiceType (по умолчанию: приложение)

Тип службы XPC указывает, как создается экземпляр службы. Значения:

• Приложение: каждое приложение будет иметь уникальный экземпляр этой службы.

• Пользователь: для каждого пользователя создается один экземпляр сервисного процесса.

• Система: существует один экземпляр процесса обслуживания для всей системы. Системные службы XPC ограничены для размещения в системных рамках и должны принадлежать root.

Итог: в большинстве случаев есть один экземпляр службы XPC и только в том случае, когда разные приложения могут подключаться к одной и той же службе (даже не возможно, когда служба связана с приложением), будет много экземпляры (один экземпляр для каждого приложения).

Ответ 3

Поскольку службы XPC не должны иметь состояния, не имеет значения, работает ли еще один экземпляр:

Службы XPC управляются с помощью запуска, который запускает их по требованию, перезапускает их, если они сбой, и завершает их (путем отправки SIGKILL), когда они неактивны. Это прозрачно для приложения, использующего эту службу, за исключением случая службы, которая вылетает во время обработки сообщения, требующего ответа. В этом случае приложение может увидеть, что его соединение с XPC стало недействительным до тех пор, пока служба не перезапустит startd. Поскольку служба XPC может быть внезапно прекращена в любое время, она должна быть сконструирована так, чтобы удерживать ее до минимального состояния. В идеале ваша служба должна быть полностью безгражданна, хотя это не всегда возможно.

- Создание служб XPC

Поместите всю необходимую информацию о состоянии в вызов xpc и доставьте его клиенту, если он должен сохраняться.

Ответ 4

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/xpcservice.plist.5.html

Ключ ServiceType в словаре XPCService: приложение или пользователь или система

Но этот "ServiceType" не имеет значения... IF Service встроен в пакет приложений, тогда он будет доступен только для содержащего приложения и будет, по определению, услугами типа Applicaton. Последующий запрос соединения от приложения к службе приведет к новому соединению с существующей службой.

Ответ 5

Я знаю, что опаздываю на вечеринку, но пока вы не можете сделать это с помощью простого XPC, есть библиотека (компонент OpenEmu), которая должна иметь возможность делать то, что вы просите: OpenEmuXPCCommunicator