我正在编写一个接受插件来实现某些操作的框架。由于这些插件不如第一方代码那么受信任,我希望将它们托管在XPC服务中,我可以使其非常无特权,并且可以防止对系统造成太大伤害。
但是,插件应该可以访问与进程中运行的第一方代码基本相同的API。为简单起见,我希望XPC进程能够链接到框架本身。
问题当然是框架嵌入了XPC流程,XPC流程链接到框架。 Xcode认为这是一个循环依赖,并拒绝在此配置中构建。即使"仅在安装"时复制,也是如此。选中复选框。
由于链接时不需要XPC服务,这可以说是人为的:可以构建框架二进制文件,然后是XPC服务,最后将服务复制到框架中。
有没有办法实现这个结果?
答案 0 :(得分:0)
是,反转构建关系。使XPC服务将自身复制到框架中。您可能还需要辞职该框架。
删除XPC服务与Framework目标之间的依赖关系,并删除“复制XPC服务”步骤。
将“运行脚本”阶段添加到框架目标中,该阶段将创建“ Versions / A / XPCServices”文件夹(以及.framework根目录中的符号链接),否则将无济于事。
在XPC服务目标上,链接框架。这将创建一个很好的目标依赖关系。添加一个运行脚本阶段。让脚本将.xpc
中的$(BUILT_PRODUCTS_DIR)
捆绑软件复制到正确的位置。像rsync -av ${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}/ ${BUILT_PRODUCTS_DIR}/MyFramework.framework/Versions/A/XPCServices/${FULL_PRODUCT_NAME}/