手把手教你创建静态库

静态库是是什么,有什么用途就不说多了,在这篇文章里有具体介绍:http://www.jianshu.com/p/31ea30b1826d,我就直接上干货拉。

第一步:用XCode创建一个静态库项目


选择红框中的选项创建静态库项目


想一个独一无二的库名

 第二步:实现静态库代码

静态库项目创建完成后在组织结构中会出现两个跟项目名称同名的.h和.m文件,实现的逻辑跟普通的iOS代码一样,.h中声明属性和方法,.m中实现方法。笔者在这里简单的在.h文件中声明了一个属性,一个类方法和一个实例方法,并在.m文件中实现了这两个方法。鉴于这是一篇入门的文章,更复杂的实现就期待各位去慢慢研究。


.h中的声明


.m中的实现

第三步:编译静态库

代码到这里已经码完了,是不是很简单,接着就是编译(Command+B)。编译时要注意以下几点:

1.注意模拟器和真机的区别。编译版本一共可分为四种:模拟器环境下的(Debug和Release)版本,真机环境下的(Debug和Release)版本。模拟器和真机的区别是因为CPU架构不同,模拟器(4s~5: i386,5s~7plus: x86_64),真机(3gs~4s: armv7,5~5c: armv7s,5s~7plus: arm64)。总的来说模拟器支持i386和x86_64这两个版本,真机支持armv7,armv7s和arm64这三个版本,只要支持静态库支持arm7,就可以支持armv7s。

在XCode中选择一个模拟器直接编译,会生成一个只支持当前模拟器架构的Debug版本的静态库。就是说假如选择了iphone7模拟器进行编译,编译出来的静态库只会支持x86_64架构的模拟器系统。如果我们希望我们编译的Debug版本可以支持全部模拟器,则需要在Build Settings中修改配置项:


修改Build Settings配置项

选择真机编译的话不需要担心这个问题,同样Release版本也不需要考虑这个配置项,因为默认就是No。

2. 编译完成后下图方框中文件的颜色会从红色变为黑色,打开这个这个文件就可以看到编译好的.a文件,也就是我们需要的静态库。


编译完成后生成.a文件

编译好的静态库会方法一个指定的目录下面,假如四种版本都编译了,就会生成如图的四个文件夹,具体的对应关系就不再一一介绍了:


每个目录中都有一个.a文件


3.通常我们会希望我们提供给别人的版本既能支持模拟器,又能支持真机,那么,我们就需要合并静态库,对应上图的话即使合并两个Debug目录中的.a文件和两个Release目录中的.a文件。以Release版本举例说明:


合并前两个.a文件支持的架构


合并后新的.a文件支持的架构

lipo是一个linux指令,查看静态库信息需要加上-info选项,合并静态库需要加上-create和-output选项,这些选项都需要指定参数。


第四步:使用静态库

合并后的静态库已经可以导入其他项目中使用啦,通常开发者会选择Release版本的静态库。最后要注意点的也是很关键的一个。在其他项目中导入我们的静态库,除了导入.a文件以外,还需要导入相关的头文件。


静态库的使用

这种既要导入.h文件,又要导入.a文件的方式对于强迫症患者来说是很难接受的,那么有没有更好的方法统一管理呢?答案是YES,.framework可以满足这一需求!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,338评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,594评论 25 709
  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 12,303评论 3 42
  • 率性洒脱,敢爱敢恨;毒舌如簧,却不失真心;本性学渣,对生意却苦心经营,毫不懈怠;看似放荡不羁,阅人无数,却只对赵医...
    小团圆子阅读 400评论 0 3

友情链接更多精彩内容