我已经构建了一个静态库(我们称之为A),它依赖于CFNetwork.framework,它正在xCode中成功构建。我已将CFNetwork.framework包含在“链接二进制文件库”构建阶段中。这个静态库有自己的项目。
出于某种原因,当试图在另一个项目中使用这个静态库时(让我们称之为B),它在链接阶段失败,抱怨无法找到CFNetwork的符号。
我在B的目标中添加了A作为依赖项(因此A总是在B成功之前编译)并且我还在B的“Link Binary With Libraries”构建阶段添加了A.
有没有人遇到过类似的问题?
编辑:如果我将CFNetwork.framework添加到B的“Link Binary With Libraries”构建中,它将开始成功构建。
答案 0 :(得分:1)
是的,您还需要在项目CFNetwork.framework
中添加B
作为依赖项。
这是设置依赖项的正确方法。您需要在静态库CFNetwork.framework
的发行说明中记录对A
的依赖性。
绝对要看看Guidelines for Creating Frameworks,特别是“您的框架中包含的内容”。您将看到Apple建议不要创建伞形框架(即在分布式静态库中包含类似CFNetwork.framework的内容)。
不要创建伞框架
虽然可以使用Xcode创建伞形框架,但仍然可以 所以对大多数开发人员来说是不必要的,不推荐。苹果 使用伞形框架来掩盖它们之间的一些相互依赖关系 操作系统中的库。在几乎所有情况下,你应该是 能够将您的代码包含在单个标准框架包中。 或者,如果您的代码足够模块化,您可以创建 多个框架,但在这种情况下,之间的依赖关系 模块将是最小的或不存在的,不应该保证 为他们创造一把伞。
如果您有很多依赖项,那么值得考虑像Cocoapods这样的依赖项管理工具。