如果框架导入了一些主项目也要导入的库,该怎么办?

时间:2019-02-15 09:08:45

标签: ios xcode frameworks

没有代码,只是一个纯粹的工程问题。

假设我正在开发一个iOS应用项目A,该项目将导入框架B。 框架B使用某些第三方开源(静态)库,例如AFNetworking,MBProgressHUD或BlocksKit。我的项目A也导入了一些相同的库。

所以我的问题是框架B是否包含所有代码二进制文件,包括第三方库?(我想是的)我的项目也是如此。这是否意味着最终的App二进制文件包含相同代码的多个副本(如果库的版本相同/不同),这些副本会占用不必要的应用程序容量?

如果框架A和我们的项目B都使用Cocoapods管理库,问题是否会得到解决?

另一个相关的问题:构建设置中的“允许框架模块中包含非模块化”选项的用途是什么?

1 个答案:

答案 0 :(得分:1)

如果这些第三方框架是动态库(.dylib.framework),则仅从使用它们的项目中引用它们,而它们不会“包含”在项目的可执行文件中(通过我的意思是可执行文件或动态库)。第三方动态库必须随应用程序一起提供(通常在Frameworks文件夹中)。

如果这些第三方框架是静态库(.a或有时是.framework),则它们包含在可执行文件中,因此潜在地,您可以在同一应用程序中拥有该库的多个副本。这里存在潜在的链接程序问题,因为第三方框架中的符号在多个位置定义,但是默认情况下,应隐藏它们,以免引起此问题。