iOS cocoapods私有库中加载png,xib等资源文件

文章目录

  • pod库中的资源加载问题
    • 1.pod库中的代码读取自身pod库中的资源
    • 2.pod库中代码读取其他pod库资源,主工程读取pod库资源

pod库中的资源加载问题

之前一篇中介绍了如何上传自己的工具库,但是测试过程中发现pod自己的库后对于xib和png的调用都有问题。由于资源文件是被打包到一个bundle文件中,在新工程中或者工具库中用mainbundle都是调用不到的。
一般资源文件的读取问题包括如下几种:

  • pod库中的代码读取自身pod库中的资源
  • pod库中代码读取其他pod库资源
  • 主工程读取pod库资源

1.pod库中的代码读取自身pod库中的资源

资源文件在最初的工程中是直接保存在目录中,打包时就自动打包到mainbundle中了,这种情况下,默认的调用方式是没有问题的。
但是当将工程上传到pod库时,podspec配置文件中指定了资源文件的目标moudle,这样默认的调用方式就找不到这个目标moudle下的文件了,需要根据目标moudle的名字查找对应的moudle来读取文件。

方法1:
如果pod时使用了use_frameworks! ,需要先查找对应的framework,一般库的framework和bundlename是相同的,且这种方法可以在category中使用。

NSURL* associateBundleURL = [[NSBundle mainBundle] URLForResource:@"Frameworks" withExtension:nil];
associateBundleURL = [associateBundleURL URLByAppendingPathComponent:bundleName];
associateBundleURL = [associateBundleURL URLByAppendingPathExtension:@"framework"];
NSBundle *associateBunle = [NSBundle bundleWithURL:associateBundleURL];
associateBundleURL = [associateBunle URLForResource:bundleName withExtension:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithURL:associateBundleURL];

方法2:
通过class类型查找对应的bundle目录,这种在category中不能使用,虽然可以通过传入class的方式查找,但是容易出错。

NSBundle *cbundle = [NSBundle bundleForClass:[self class]]; 
NSString *path = [bundle pathForResource:bundleName ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:path];

这样读取的bundle就是我们需要加载的资源bundle,即可读取需要的文件。

// 读取xib:
self = [[bundle  loadNibNamed:@"BundleName" owner:self options:nil] lastObject];
// 读取png:
UIImage * image = [UIImage imageNamed:imageName inBundle:bundleName compatibleWithTraitCollection:nil];

2.pod库中代码读取其他pod库资源,主工程读取pod库资源

同1,使用对应的 frameworkname和bundlename即可。

参考:Pod资源文件的正确Bundle读取

你可能感兴趣的:(iOS)