iOS动态库和静态库知识专题导航
3.复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)
(一)简介
上一节我们讲了有关iOS中静态库和动态库的知识和 简单.a静态库文件的生成,这一节我们详细讲一下带有Bundle资源文件夹的.a文件的生成。上篇文章链接iOS中关于库的基本知识和.a静态库生成。
大部分三方框架都是带有图片、xib文件、plist文件等一些资源。在iOS中.a静态库中对资源文件进行管理,都是使用Bundle文件。
(二)复杂.a静态库生成
1.创建.a静态库工程
.a创建选项 编辑工程名称2.为.a静态库工程提交Bundle资源文件夹
添加Bundle资源文件夹1 添加Bundle资源文件夹2 添加完成界面3.设置.a工程和Bundle资源文件夹
.a工程的设置见iOS中关于库的基本知识和.a静态库生成(一)中“设置.a文件的环境模式、路径和可见的文件”。
设置Bundle资源文件夹:Bundle资源文件夹默认是macOS系统的,修改为iOS系统。
设置Bundle系统Bundle资源文件夹参数COMBINE_HIDPI_IMAGES默认为YES,即图片是tiff格式;修改该参数为NO。
设置Bundle图片模式4.Bundle资源文件夹添加资源
在Resourc文件夹下添加图片、Xib文件、plist文件等资源。
Bundle添加资源5.调用Bundle资源代码书写
代码:
+ (void)logMethodName {
NSLog(@"TextObject_logFunctionName");
}
+ (UIImage *)getLibraryBundleImage {
// 获取Resource.bundle文件夹路径
NSString * rescourcePath = [[NSBundle mainBundle] pathForResource:@"Resource" ofType:@"bundle"];
// 获取Resource.bundle文件夹bundle对象
NSBundle * bundle =[NSBundle bundleWithPath:rescourcePath];
// 获取Resource.bundle文件夹中调用图片的路径
NSString * imagePath = [bundle pathForResource:@"null_page" ofType:@"png"];
// 获取图片
UIImage * image = [UIImage imageWithContentsOfFile:imagePath];
return image;
}
6.生成.a文件
选择MyLibrary,command+b编辑,生成.a文件。选择Resource,command+b编辑,生成Resource.bundle文件.
生成.a文件 生成Resource.bundle文件7.查看.a文件编译环境和合并.a文件
见iOS中关于库的基本知识和.a静态库生成中,“6.查看.a文件编译环境”和“7.合并调试环境和发布环境下的.a文件”。
8.在工程中使用.a文件
在工程中导入.h文件夹和.a文件。
导入.h文件夹和.a文件在工程中需要调用.a库中的文件中,导入头文件,代码中调用.a中封装的方法。如果.a中对应的方法的.m文件也可访问,可以在.m中修改该代码的实现。
调用代码 运行结果如果.a静态库中包含OC分类、C文件、C++文件对Other Linker Flags进行相应设置设置。如果没设置编译时会报错“unrecognized selector sent to class”。
Other Linker Flags没设置报错设置如下图中的1、2、3任意一选项,运行成功。
设置Other Linker Flags运行成功注意:在模拟器环境下及调试环境下和在真机环境下及发布环境下,必须导入对应的.a文件或者合成两环境下的.a文件,否则会出错,导致工程编译失败。
网友评论