完整项目包装成framework 2
2020-09-15 本文已影响0人
山已几孑
上面已经把响应的配置文件修改完成了,运行过程中又出现了其他的问题,
坑2,NSBundle.mainBundle
补充:这里的framework是动态库(dynamicLibrary)
资源文件引用
因为之前的项目,现在变成了framework,那么NSBundle.mainBundle就变了,而资源文件的查找通常是以 NSBundle.mainBundle的形式进行查找,因此没~
而当前framework的资源则被封装成为了一个bundle:[NSBundle bundleWithIdentifier:@"com.rmwjy.SubProjectOutLet"];
- 图片资源找不到了,首先确定已经通过上一步把assets绑定到了framework,然后所有的图片调用,改为下面的方法:
+(UIImage *)frameworkImageNamed:(NSString *)imageName {
NSBundle * bundle = [NSBundle bundleWithIdentifier:@"com.rmwjy.SubProjectOutLet"];
UIImage * image = [UIImage imageNamed:imageName inBundle:bundle compatibleWithTraitCollection:nil];
return image;
}
- Xib、StoryBoard 文件UI加载不出来,理由是ViewController在init时会自动调用下面的方法,使用当前类的名称,mainBundle作为默认参数去查找Xib,因mainBundle找不到,所以无法加载
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
NSBundle * bundle = [NSBundle bundleWithIdentifier:@"com.rmwjy.SubProjectOutLet"];
self = [super initWithNibName:NSStringFromClass(self.class) bundle:bundle];
return self;
}
这里目前是每个使用了Xib的VC都加上这个方法,后期应该是可以使用一个BaseVC来进行统一修改。
- Xib还有View,Cell等多种调用方式:::
//cell 注册
[self.tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:[Utility frameworkBundle]] forCellReuseIdentifier:CellNibIdentifier];
// view创建
HeaderView* headerView = [[Utility frameworkBundle] loadNibNamed:@"HeaderView" owner:nil options:nil ].lastObject;
项目引用的其他文件
使用时,需要修改bundle
NSString *cerPath = [[Utility frameworkBundle] pathForResource:@"mmsp.test.abchina.com 1.cer" ofType:nil]; //证书的路径
如下:
其他文件
国际化语音文件,
使用的方法在下面,他用的也是NSBundle.mainBundle,这里因为文件很少,我决定直接把他放到主工程中,这样NSBundle.mainBundle就能拿到主工程下的语言文件(framework不是目的,只是过程)
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:(tbl)]