CocoaPods 安装SDK中找不到资源包.bundle

2019年06月20日16:07:30 记git

若是不是本身故意写错了,那就有可能问题出在Podfile,即,SDK安装方式有关github

  • 先来介绍一下加载 Bundle 中图片的两种方法:
  1. 根据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];
复制代码

orswift

NSString *file2 = [[NSBundle mainBundle] pathForResource:@"xxxBundle.bundle/xxx" ofType:@"png"];
UIImage *img2 = [UIImage imageWithContentsOfFile:file2];
复制代码
  1. .bundle/xxx 加载
UIImage *img3 = [UIImage imageNamed:@"xxxBundle.bundle/xxx"];
复制代码
  • Podfile中的use_frameworks!

先来介绍几个概念 bash

从iOS8/Xcode6开始,苹果容许使用动态库连接。 经过cocoapods管理应用程序时,在Podfile文件中,**use_frameworks!**的使用区别以下:

  1. 使用**use_frameworks!**时dynamic frameworks 方式 -> .framework cocoapods会生成对应的 frameworks 文件 在Link Binary With Libraries:会生成Pods_工程名.framework,包含了其它用cocoapods导入的第三方框架的.framework文件
  2. 不使用**use_frameworks!**时static libraries 方式 -> 生成.a文件 cocoapods会生成相应的 .a文件(静态连接库) Link Binary With Libraries: libPods-工程名.a 包含了其余用cocoapods导入有第三库的 .a 文件
  • 注意:(我通常都会使用use_frameworks!)
  1. 纯OC项目中,经过cocoapods导入OC库时,通常都不使用use_frameworks!
  2. 纯swift项目中,经过cocoapods导入swift库时,必须使用use_frameworks!
  3. 只要是经过cocoapods导入swift库时,都必须使用use_frameworks!
  4. 使用动态连接库dynamic frameworks时,必须使用use_frameworks!
  • 系统提供的库都是 dylib 动态库,可参考这里,不作介绍

回过头来再看Podfile中若使用use_frameworks!,资源包文件、二进制文件、头文件打包成一个Framework,加载 Bundle只能加载.app/下的资源文件。 解决办法:app

  1. 重写SDK中资源文件的加载方法,xxx.framework/xxx.bundle/xx.png。参考:QMUIKit -> QMUIHelper
  2. 从SDK中拷贝资源包.bundle到工程中
  3. 不使用use_frameworks!
相关文章
相关标签/搜索