2019年06月20日16:07:30 记
如果不是自己故意写错了,那就有可能问题出在Podfile,即,SDK安装方式有关
- 先来介绍一下加载 Bundle 中图片的两种方法:
- 根据bundle及FilePath加载
NSString *path = [[NSBundle mainBundle] pathForResource:@"xxBundle" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:path];
NSString *file = [bundle pathForResource:@"xxx" ofType:@"png"];
UIImage *img = [UIImage imageWithContentsOfFile:file];
or
NSString *file2 = [[NSBundle mainBundle] pathForResource:@"xxxBundle.bundle/xxx" ofType:@"png"];
UIImage *img2 = [UIImage imageWithContentsOfFile:file2];
- .bundle/xxx 加载
UIImage *img3 = [UIImage imageNamed:@"xxxBundle.bundle/xxx"];
- Podfile中的use_frameworks!
先来介绍几个概念

- 使用**use_frameworks!**时dynamic frameworks 方式 -> .framework cocoapods会生成对应的 frameworks 文件 在Link Binary With Libraries:会生成Pods_工程名.framework,包含了其它用cocoapods导入的第三方框架的.framework文件
- 不使用**use_frameworks!**时static libraries 方式 -> 生成.a文件 cocoapods会生成相应的 .a文件(静态链接库) Link Binary With Libraries: libPods-工程名.a 包含了其他用cocoapods导入有第三库的 .a 文件
- 注意:(我一般都会使用use_frameworks!)
- 纯OC项目中,通过cocoapods导入OC库时,一般都不使用use_frameworks!
- 纯swift项目中,通过cocoapods导入swift库时,必须使用use_frameworks!
- 只要是通过cocoapods导入swift库时,都必须使用use_frameworks!
- 使用动态链接库dynamic frameworks时,必须使用use_frameworks!
- 系统提供的库都是 dylib 动态库,可参考这里,不做介绍
回过头来再看Podfile中若使用use_frameworks!,资源包文件、二进制文件、头文件打包成一个Framework,加载 Bundle只能加载.app/下的资源文件。 解决办法:
- 重写SDK中资源文件的加载方法,xxx.framework/xxx.bundle/xx.png。参考:QMUIKit -> QMUIHelper
- 从SDK中拷贝资源包.bundle到工程中
- 不使用use_frameworks!