繁体   English   中英

如何管理本地 Xcode 项目的传递依赖

[英]How to manage transitive dependency for local Xcode projects

我有两个 Objective C 动态框架 X 和 Y 以及另一个 Objective C app Z。所有这些框架和应用程序都是我在本地创建的。 框架 X 是框架 Y 和应用程序 Z 使用的非常基础的框架。因此依赖关系图类似于以下内容:

  1. Y ---> X

  2. Z ---> X

  3. Z ---> Y (---> X)

我希望我的所有目标都是可调试的,并根据运行目标(设备/模拟器)选择平台工具。 因此,我将依赖项作为子项目添加到主项目中,并将它们与依赖项目链接,以通过 Xcode 生成隐式依赖项。

设置 1 和 2 可以独立工作。 但是我正在为设置 3 苦苦挣扎,该设置 3 由于对目标 X 的传递依赖(目标 Y 和 Z 都依赖它)而为目标 X 创建重复的构建规则,随后构建过程失败。

任何人都知道如何处理这种情况? 提前致谢!

似乎在 Objective-C 中,我们无法将动态框架链接到另一个动态框架或命令行工具。 在生产中运行时总是会引发异常

Dyld Error Message:
  Library not loaded: @rpath/XFrameworks.framework/Versions/A/XFrameworks

对于您的情况,我认为可能会解决您的问题

  • X (核心功能)可以内置在 static 库中
  • Y 可内置于动态框架类型
    • 将与 X 库链接
    • 或与其他人链接(我的意思是另一个代码库)
  • Z (您的应用程序)将与 Y 框架链接

实际上有一种方法可以最终解决 Xcode 中的传递依赖问题。 我必须使用工作区 (.xcworkspace) 而不是 Xcode 项目 (.xcodeproj)。

要完成它,请使用以下步骤:

  1. 关闭所有相关并打开 Xcode 项目。
  2. 从 File > New > Workspace 在根目录中创建一个新的 Workspace。 通过双击打开工作区并将所需的项目拖放到工作区。
  3. 通过在框架和库部分下添加独立框架(我的问题中的 X)output 到两个依赖项目目标(Y 和 Z)。 仅将动态库嵌入到顶级应用程序 (Z),不要将其嵌入到中间依赖目标库 (Y)。
  4. 将中间框架 (Y) 添加到框架和库部分下的根级应用程序中,并将其嵌入到根应用程序包中。

这种设置对我来说就像一个魅力,而无需创建重复的构建规则,它也自发地拾取了依赖关系。

显然,如果您的独立框架是 static 库,则您不能这样做,在这种情况下,它将链接到两个依赖目标,导致链接期间出现重复符号问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM