iOS - framework开发资源图片如何配置

在我们开发动态库或者静态库的时候,如果其中用到一些资源图片,此时这些图片我们应该如何放置呢?

一般有两种方式,这里总结一下:

  1. 通过.bundle文件存储(.bundle可存储xib等其他文件),此时如果在项目中使用到我们的framework时,需要把这里的.bundle文件添加到项目中,这时我们可以用以下代码去加载:
NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"Robot" ofType:@"bundle"]];
UIImage *iconImage= [UIImage imageWithContentsOfFile:[bundle pathForResource:imgName ofType:@"png"]];

当然,如果我们不想把.bundle拖入项目中也是可以的,但是此时我们确认打包的framework中含有.bundle,然后用以下方式去查找:

NSString *path = [[NSBundle mainBundle] pathForResource:@"RobotSDK" ofType:@"framework" inDirectory:@"Frameworks"];
NSBundle *bundle = [NSBundle bundleWithPath:path];
bundle = [NSBundle bundleWithPath:[bundle pathForResource:@"Robot" ofType:@"bundle"]];
UIImage *iconImage= [UIImage imageWithContentsOfFile:[bundle pathForResource:@"up" ofType:@"png"]];
  1. 通过.xcassets图片管理工具来存储(只能用来存储图片),.xcassets在打包后会变成Assets.car,然而直接使用imageNamed:由于默认位置无法找到framework的图片资源,所以返回为nil,此时我们需要使用以下方式:
NSString *path = [[NSBundle mainBundle] pathForResource:@"RobotSDK" ofType:@"framework" inDirectory:@"Frameworks"];
NSBundle *bundle = [NSBundle bundleWithPath:path];
UIImage *iconImage = [UIImage imageNamed:imgName inBundle:bundle compatibleWithTraitCollection:nil];
image.png

另外补充:项目中如果引入多个动态库,并且这多个动态库中都同时引入了一个或者多个同样的动态库,此时我们只需要在项目中的动态库后面添加"Embed & Sign",其他动态库后为"Do Not Embed"(这样设置后,sdk打包后不会把framework打入其中)如下:

image.png

image.png

参考文献:

iOS Framework 使用.xcassets 图片资源

你可能感兴趣的:(iOS - framework开发资源图片如何配置)