一、了解下 use_frameworks
- 在Cocoapods 里使用
use_frameworks!
的话,是通过frameworks
这个方式来管理 pod 的代码。否则则是 static libraries 方式来管理。
- Swift 项目 Cocoapods 默认 use_frameworks!
- Objective-C 项目Cocoapods 默认 #use_frameworks!
- 用 Cocoapods 导入Swift 框架 到 Swift项目和 Objective-C 项目都必须要 use_frameworks!
- 用动态库,必须要在 Podfile 文件中添加 use_frameworks!
二、用了 use_frameworks Bundle 之后的影响
- 如果不使用framework,Pod里的资源文件会被打成 bundle 放在mainbundle下面;
- 如果使用framework,bundle 就会被分配在每个pod.framework下;
三、解决 项目用了 use_frameworks 之后 bundle 改变导致获取不到图片的问题
所以读取的方式,就需要兼容下啦
- UIBundle 增加一个 分类,兼容下:
+ (instancetype)xx_bundleName:(NSString *)bundleName {
NSURL *associateBundleURL = [[NSBundle mainBundle] URLForResource:@"Frameworks" withExtension:nil];
associateBundleURL = [associateBundleURL URLByAppendingPathComponent:bundleName];
associateBundleURL = [associateBundleURL URLByAppendingPathExtension:@"framework"];
NSBundle *associateBunle = associateBundleURL?[NSBundle bundleWithURL:associateBundleURL]:[NSBundle mainBundle];
associateBundleURL = [associateBunle URLForResource:bundleName withExtension:@"bundle"];
NSBundle *bundle = associateBundleURL?[NSBundle bundleWithURL:associateBundleURL]:[NSBundle mainBundle];
return bundle;
}
- UIImage 直接读取
+ (instancetype)xx_imgWithName:(NSString *)name bundle:(NSString *)bundleName {
NSBundle *resource_bundle = [NSBundle xx_bundleName:bundleName];
UIImage *image = [UIImage imageNamed:name
inBundle:resource_bundle
compatibleWithTraitCollection:nil];
return image;
}
以上 Bundle 问题,主要是发生在进行组件化或者打静态库的时候,资源文件的处理。