本文介绍如何在framework内加载xib/图片及区别。
一.app目录介绍
1.编译后的目录
2.app根目录
静态库.framework相当于是一个bundle,里面可以放代码,也可以放图片、xib等资源文件。如果放了图片、xib等资源文件,需要在Build Phases
--> Copy Bundle Resources
中添加该静态库.framework。
3.动态库子目录
二.bundle介绍
- 无论是静态库或者动态库使用
[NSBundle mainBundle]
获取的是app根目录。 - 静态库使用
[NSBundle bundleForClass:[self class]]
获取的是app根目录。 - 动态库使用
[NSBundle bundleForClass:[self class]]
获取的是当前动态库目录。 - 静态库就是一个bundle,只不过里面可以多了编译后的二进制文件。
三.动态库(dynamic framework)内加载图片/xib
由于动态库在app加载时,会创建单独的文件夹,如上图为:Frameworks/FHDynamicFramework.framework
:
故需要使用以下方式:
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
UIImage *image = [UIImage imageNamed:@"dynamic.png" inBundle:bundle compatibleWithTraitCollection:nil];
四.静态库.a内加载图片/xib
创建bundle(FHStaticFrameworkBundle.bundle)
,并把需要加载的图片放到bundle内,把bundle放入到项目中,代码如下:
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"FHStaticFrameworkBundle.bundle" ofType:nil];
NSBundle *bundle3 = [NSBundle bundleWithPath:bundlePath];
UIImage *image = [UIImage imageNamed:@"static.png" inBundle:bundle3 compatibleWithTraitCollection:nil];
五.静态库.frameowk内加载图片/xib
// 以下两种方式都可以
// UIImage *image = [UIImage imageNamed:@"static.png"];
NSBundle *bundle = [NSBundle mainBundle];
UIImage *image = [UIImage imageNamed:@"static.png" inBundle:bundle compatibleWithTraitCollection:nil];
return image;
详见我的另一篇文章:iOS开发 xib使用
Demo:https://gitee.com/ayangcool100/fhtest-framework-resource.git