没有代码,只是一个纯工程问题。
假设我正在开发一个 iOS 应用程序项目 A
,它导入一个框架 B
。
框架 B
使用一些第三方开源(静态)库,例如 AFNetworking、MBProgressHUD 或 BlocksKit。我的项目 A
也导入了一些相同的库。
所以我的问题是框架B
是否包含所有代码二进制文件,包括第三方库?(我猜是的)我的项目也是如此。这是否意味着最终的应用程序二进制文件包含相同代码的多个副本(如果库具有相同/不同版本),这些副本占用了应用程序的一些不必要的体积?
如果框架A
和我们的项目B
都使用Cocoapods来管理库,问题会解决吗?
另一个相关问题:build设置中的“允许非模块化包含在框架模块中”选项的用途是什么?
最佳答案
如果那些第三方框架是动态库(.dylib
或 .framework
)那么它们只会被使用它们的项目引用,它们不会被“包含” "在项目的可执行文件中(我指的是可执行文件或动态库)。第三方动态库必须随应用一起提供(通常在 Frameworks
文件夹中)。
如果这些第三方框架是静态库(.a
或有时是 .framework
),那么它们包含在可执行文件中,因此您可能拥有多个副本同一个应用程序中的库。这里有一个潜在的链接器问题,因为来自第三方框架的符号在多个地方定义,但默认情况下它们应该被隐藏以避免导致这个问题。
关于ios - 如果一个框架导入了主项目也导入的一些库怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54705860/