Может ли служба XPC ссылаться на интегрированную среду? - PullRequest
0 голосов
/ 05 июня 2018

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

ПлагинОднако у -ins должен быть доступ к тому же API-интерфейсу, что и к стороннему коду, который выполняется внутри процесса.Для простоты я хотел бы, чтобы процесс XPC связывался с самой платформой.

Проблема, конечно же, заключается в том, что в платформу встроен процесс XPC, а процесс XPC связан с платформой.Xcode считает это циклической зависимостью и отказывается встраивать эту конфигурацию.Это верно даже в том случае, если установлен флажок «Копировать только при установке».

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

Есть ли способ достичь этого результата?

1 Ответ

0 голосов
/ 26 ноября 2018

Да, инвертировать отношения сборки.Сделайте, чтобы служба XPC копировала себя в фреймворк.Вам также может потребоваться отменить структуру.

Удалите отношения зависимости между службой XPC и целью платформы и удалите шаг «Копировать службы XPC».

Добавьте фазу Run Script к цели платформы, которая создает папку «Versions / A / XPCServices» (и символическую ссылку в корне вашей .framework), но в остальном ничего больше не делает.

На целевой службе XPC связать фреймворк.Это создает целевые отношения зависимости, что нормально.Добавьте фазу Run Script.Пусть сценарий скопирует комплект .xpc из $(BUILT_PRODUCTS_DIR) в правильное место.Что-то вроде rsync -av ${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}/ ${BUILT_PRODUCTS_DIR}/MyFramework.framework/Versions/A/XPCServices/${FULL_PRODUCT_NAME}/

...