XPC 服务可以链接到嵌入它的框架吗?
Posted
技术标签:
【中文标题】XPC 服务可以链接到嵌入它的框架吗?【英文标题】:Can an XPC service link against the framework that embeds it? 【发布时间】:2018-06-05 04:41:52 【问题描述】:我正在编写一个接受插件来实现一些操作的框架。由于这些插件不如第一方代码受信任,因此我想将它们托管在 XPC 服务中,我可以将其设置为非常无特权,并且可以防止对系统造成太大损害。
但是,插件应该可以访问与在进程内运行的第一方代码基本相同的 API。为了简单起见,我希望 XPC 进程链接到框架本身。
当然,问题在于框架嵌入了 XPC 进程,而 XPC 进程与框架链接。 Xcode 认为这是一个循环依赖并拒绝在此配置中构建。即使选中“仅在安装时复制”复选框也是如此。
由于在链接时不需要 XPC 服务,这可以说是人为的:可以构建框架二进制文件,然后是 XPC 服务,最后将服务复制到框架。
有没有办法达到这个效果?
【问题讨论】:
【参考方案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/
【讨论】:
以上是关于XPC 服务可以链接到嵌入它的框架吗?的主要内容,如果未能解决你的问题,请参考以下文章
SQLite 库可以嵌入(链接)到 Delphi 可执行文件吗?