没有代码,只是一个纯粹的工程问题。
假设我正在开发一个iOS应用项目A
,该项目将导入框架B
。
框架B
使用某些第三方开源(静态)库,例如AFNetworking,MBProgressHUD或BlocksKit。我的项目A
也导入了一些相同的库。
所以我的问题是框架B
是否包含所有代码二进制文件,包括第三方库?(我想是的)我的项目也是如此。这是否意味着最终的App二进制文件包含相同代码的多个副本(如果库的版本相同/不同),这些副本会占用不必要的应用程序容量?
如果框架A
和我们的项目B
都使用Cocoapods管理库,问题是否会得到解决?
另一个相关的问题:构建设置中的“允许框架模块中包含非模块化”选项的用途是什么?
答案 0 :(得分:1)
如果这些第三方框架是动态库(.dylib
或.framework
),则仅从使用它们的项目中引用它们,而它们不会“包含”在项目的可执行文件中(通过我的意思是可执行文件或动态库)。第三方动态库必须随应用程序一起提供(通常在Frameworks
文件夹中)。
如果这些第三方框架是静态库(.a
或有时是.framework
),则它们包含在可执行文件中,因此潜在地,您可以在同一应用程序中拥有该库的多个副本。这里存在潜在的链接程序问题,因为第三方框架中的符号在多个位置定义,但是默认情况下,应隐藏它们,以免引起此问题。