【问题标题】:Can an XPC service link against the framework that embeds it?XPC 服务可以链接到嵌入它的框架吗?
【发布时间】:2018-06-05 04:41:52
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: xcode xpc xcode10


    【解决方案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}/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      相关资源
      最近更新 更多