复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)

iOS动态库和静态库知识专题导航

1.iOS中关于库的基本知识

2.简单.a静态库的生成和使用

3.复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)

4.framework动态库和静态库的生成和使用

5.库其它知识拾遗和常见问题

(一)简介

    上一节我们讲了有关iOS中静态库和动态库的知识和 简单.a静态库文件的生成,这一节我们详细讲一下带有Bundle资源文件夹的.a文件的生成。上篇文章链接iOS中关于库的基本知识和.a静态库生成。

    大部分三方框架都是带有图片、xib文件、plist文件等一些资源。在iOS中.a静态库中对资源文件进行管理,都是使用Bundle文件。

(二)复杂.a静态库生成

1.创建.a静态库工程


复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第1张图片
.a创建选项


复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第2张图片
编辑工程名称

2.为.a静态库工程提交Bundle资源文件夹

复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第3张图片
添加Bundle资源文件夹1
复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第4张图片
添加Bundle资源文件夹2
复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第5张图片
添加完成界面

3.设置.a工程和Bundle资源文件夹

    .a工程的设置见iOS中关于库的基本知识和.a静态库生成(一)中“设置.a文件的环境模式、路径和可见的文件”。

    设置Bundle资源文件夹:Bundle资源文件夹默认是macOS系统的,修改为iOS系统。

复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第6张图片
设置Bundle系统

Bundle资源文件夹参数COMBINE_HIDPI_IMAGES默认为YES,即图片是tiff格式;修改该参数为NO。

复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第7张图片
设置Bundle图片模式

4.Bundle资源文件夹添加资源

    在Resourc文件夹下添加图片、Xib文件、plist文件等资源。

复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第8张图片
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;

}



复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第9张图片
添加代码

6.生成.a文件

    选择MyLibrary,command+b编辑,生成.a文件。选择Resource,command+b编辑,生成Resource.bundle文件.

复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第10张图片
生成.a文件
复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第11张图片
生成Resource.bundle文件

7.查看.a文件编译环境和合并.a文件

    见iOS中关于库的基本知识和.a静态库生成中,“6.查看.a文件编译环境”和“7.合并调试环境和发布环境下的.a文件”。

8.在工程中使用.a文件

    在工程中导入.h文件夹和.a文件。

复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第12张图片
导入.h文件夹和.a文件

   在工程中需要调用.a库中的文件中,导入头文件,代码中调用.a中封装的方法。如果.a中对应的方法的.m文件也可访问,可以在.m中修改该代码的实现。

复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第13张图片
调用代码
复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第14张图片
运行结果

    如果.a静态库中包含OC分类、C文件、C++文件对Other Linker Flags进行相应设置设置。如果没设置编译时会报错“unrecognized selector sent to class”。

复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第15张图片
Other Linker Flags没设置报错

    设置如下图中的1、2、3任意一选项,运行成功。

复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二)_第16张图片
设置Other Linker Flags运行成功

注意:在模拟器环境下及调试环境下和在真机环境下及发布环境下,必须导入对应的.a文件或者合成两环境下的.a文件,否则会出错,导致工程编译失败。

你可能感兴趣的:(复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)(二))