如何管理本地 Xcode 项目的传递依赖
How to manage transitive dependency for local Xcode projects
我有两个 Objective C 动态框架 X 和 Y 以及另一个 Objective C 应用程序 Z。
所有这些框架和应用程序都是我在本地创建的。框架 X 是框架 Y 和应用程序 Z 使用的非常基础的框架。因此依赖关系图如下所示:
Y ---> X
Z ---> X
Z ---> Y (---> X)
我希望我的所有目标都是可调试的,并根据 运行 目标 (device/simulator) 选择平台工具。因此,我将依赖项作为子项目添加到主项目中,并将它们与依赖项目链接起来,以通过 Xcode 生成隐式依赖项。
设置 1 和 2 独立运行效果很好。但是我正在为设置 3 苦苦挣扎,由于对它的传递依赖(目标 Y 和 Z 都依赖于它),它正在为目标 X 创建重复的构建规则,随后导致构建过程失败。
有人知道如何处理这种情况吗?提前致谢!
似乎在Objective-C中,我们不能link一个动态框架到另一个动态框架,或者到一个命令行工具。它总是引发异常,当 运行 在生产中
Dyld Error Message:
Library not loaded: @rpath/XFrameworks.framework/Versions/A/XFrameworks
针对你的情况,我认为可能会解决你的问题
- X (核心功能) 可以内置静态库
- Y可内置动态框架类型
- 将 link 使用 X 库
- 或 link 与其他 (我的意思是另一个代码库)
- Z (您的应用程序) 将 link 使用 Y 框架
实际上有一种方法可以让我最终解决 Xcode 中的传递依赖问题。我必须使用工作区 (.xcworkspace) 而不是 Xcode 项目 (.xcodeproj)。
要完成它,请执行以下步骤:
- 关闭所有相关并打开 Xcode 个项目。
- 从文件 > 新建 > 在根目录中创建一个新工作区
工作区。双击打开工作区,然后
drag/drop 将所需的项目添加到工作区。
- 将独立框架(我的问题中的 X)输出添加到两个
依赖项目目标(Y 和 Z),将其添加到
框架和库部分。只嵌入动态库
顶级应用程序 (Z),不要将其嵌入到
中间依赖目标库 (Y).
- 将中间框架(Y)添加到根级应用程序下
框架和库部分并将其嵌入根应用程序包。
这个设置对我来说就像一个魅力,没有创建重复的构建规则,它也自发地获得了依赖性。
显然,如果你的独立框架是一个静态库,你不能这样做,在这种情况下,它将链接到两个依赖目标,导致链接期间出现重复符号问题。
我有两个 Objective C 动态框架 X 和 Y 以及另一个 Objective C 应用程序 Z。 所有这些框架和应用程序都是我在本地创建的。框架 X 是框架 Y 和应用程序 Z 使用的非常基础的框架。因此依赖关系图如下所示:
Y ---> X
Z ---> X
Z ---> Y (---> X)
我希望我的所有目标都是可调试的,并根据 运行 目标 (device/simulator) 选择平台工具。因此,我将依赖项作为子项目添加到主项目中,并将它们与依赖项目链接起来,以通过 Xcode 生成隐式依赖项。
设置 1 和 2 独立运行效果很好。但是我正在为设置 3 苦苦挣扎,由于对它的传递依赖(目标 Y 和 Z 都依赖于它),它正在为目标 X 创建重复的构建规则,随后导致构建过程失败。
有人知道如何处理这种情况吗?提前致谢!
似乎在Objective-C中,我们不能link一个动态框架到另一个动态框架,或者到一个命令行工具。它总是引发异常,当 运行 在生产中
Dyld Error Message:
Library not loaded: @rpath/XFrameworks.framework/Versions/A/XFrameworks
针对你的情况,我认为可能会解决你的问题
- X (核心功能) 可以内置静态库
- Y可内置动态框架类型
- 将 link 使用 X 库
- 或 link 与其他 (我的意思是另一个代码库)
- Z (您的应用程序) 将 link 使用 Y 框架
实际上有一种方法可以让我最终解决 Xcode 中的传递依赖问题。我必须使用工作区 (.xcworkspace) 而不是 Xcode 项目 (.xcodeproj)。
要完成它,请执行以下步骤:
- 关闭所有相关并打开 Xcode 个项目。
- 从文件 > 新建 > 在根目录中创建一个新工作区 工作区。双击打开工作区,然后 drag/drop 将所需的项目添加到工作区。
- 将独立框架(我的问题中的 X)输出添加到两个 依赖项目目标(Y 和 Z),将其添加到 框架和库部分。只嵌入动态库 顶级应用程序 (Z),不要将其嵌入到 中间依赖目标库 (Y).
- 将中间框架(Y)添加到根级应用程序下 框架和库部分并将其嵌入根应用程序包。
这个设置对我来说就像一个魅力,没有创建重复的构建规则,它也自发地获得了依赖性。
显然,如果你的独立框架是一个静态库,你不能这样做,在这种情况下,它将链接到两个依赖目标,导致链接期间出现重复符号问题。