1

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

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

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

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

有没有办法达到这个结果?

4

1 回答 1

1

是的,反转构建关系。使 XPC 服务将自身复制到框架中。您可能还需要退出框架。

删除XPC Service和Framework target的依赖关系,去掉“Copy XPC Services”步骤。

将运行脚本阶段添加到创建“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}/

于 2018-11-26T07:53:10.007 回答