XPC服务可以链接嵌入它的框架吗?

时间:2018-06-05 04:41:53

标签: xcode xpc xcode10

我正在编写一个接受插件来实现某些操作的框架。由于这些插件不如第一方代码那么受信任,我希望将它们托管在XPC服务中,我可以使其非常无特权,并且可以防止对系统造成太大伤害。

但是,插件应该可以访问与进程中运行的第一方代码基本相同的API。为简单起见,我希望XPC进程能够链接到框架本身。

问题当然是框架嵌入了XPC流程,XPC流程链接到框架。 Xcode认为这是一个循环依赖,并拒绝在此配置中构建。即使"仅在安装"时复制,也是如此。选中复选框。

由于链接时不需要XPC服务,这可以说是人为的:可以构建框架二进制文件,然后是XPC服务,最后将服务复制到框架中。

有没有办法实现这个结果?

1 个答案:

答案 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}/