IOS::.a的生成,以及模拟器和真机.a 的合并
- 首先来谈谈为何要使用.a文件 Objective-c语言有.h .m 文件组成。静态库可以将 .m文件封装成一个.a文件,第三方应用程序只需要拿到这个.a文件和代码对应的.h文件即可使用静态库中封装的方法。IOS静态库适合去制作第三方提供的SDK。
第一步
1.首先创建一个新的工程,选择Framework
&:,在选择Cocoa Touch Static Library 工程名自己定义
BB2ECA5B-8795-4ECA-88AF-D2FB0F8BA382.png
2.接下来你会看到自动生成.h和.m文件 可以在.m文件中写你要的代码
F1898D4B-A084-488B-8170-A8DE5682136B.png
3.我们来创建一个简单的代码
.h文件如下
D8EE5B3D-A2B4-4CFC-AF6D-1B31CB1BE250.png
.m文件如下
![.a的生成,以及模拟器和真机.a <wbr>的合并 .a的生成,以及模拟器和真机.a <wbr>的合并](http://upload-images.jianshu.io/upload_images/453803-de31f7b8882cb6b1.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240/format/jpg)
4.接下来就是编译生成.a文件了
快捷键(command+B)选中真机编译和选中模拟机编译对应生成的连个.a文件一个是真机的一个是模拟机的
![.a的生成,以及模拟器和真机.a <wbr>的合并 .a的生成,以及模拟器和真机.a <wbr>的合并](http://upload-images.jianshu.io/upload_images/453803-701589e2d1d11b95.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240/format/jpg)
这时候去资源库里查找编译生成的.a文件
找到 前往 然后 按着 option 快捷键 你会看到 资源库 点击 如图
![.a的生成,以及模拟器和真机.a <wbr>的合并 .a的生成,以及模拟器和真机.a <wbr>的合并](http://upload-images.jianshu.io/upload_images/453803-06cc99e9d5d69bd7.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240/format/jpg)
![.a的生成,以及模拟器和真机.a <wbr>的合并 .a的生成,以及模拟器和真机.a <wbr>的合并](http://upload-images.jianshu.io/upload_images/453803-64294d59ed8e0c36.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240/format/jpg)
看到Release-iphoneos 和Release-iphonesimulator 里边的.a文件
![.a的生成,以及模拟器和真机.a <wbr>的合并 .a的生成,以及模拟器和真机.a <wbr>的合并](http://upload-images.jianshu.io/upload_images/453803-b60058a1d6783645.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240/format/jpg)
4.接下来就是将你生成的.a文件引入到你想加入的工程中
![.a的生成,以及模拟器和真机.a <wbr>的合并 .a的生成,以及模拟器和真机.a <wbr>的合并](http://upload-images.jianshu.io/upload_images/453803-e737f7e540d0d567.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240/format/jpg)
引入方法:直接将上图你所看到的include文件夹中所有的.h文件和下边对应的.a文件直接拖到你的工程中 千万注意下图中的三个选项勾选
![.a的生成,以及模拟器和真机.a <wbr>的合并 .a的生成,以及模拟器和真机.a <wbr>的合并](http://upload-images.jianshu.io/upload_images/453803-d8df016c8e9d63c0.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240/format/jpg)
![.a的生成,以及模拟器和真机.a <wbr>的合并 .a的生成,以及模拟器和真机.a <wbr>的合并](http://upload-images.jianshu.io/upload_images/453803-935b12e72f608c39.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240/format/jpg)
5.添加成功后就可以直接使用了 但是需要注意的是 如果你是选择模拟器编译生成的.a文件那么在真机运行的时候是会报错的 所以为了可以使用真机和模拟器都可以使用.a文件可以合并成为一个.a文件 使用终端合成具体方法如下:
ZXYdeMacBook-Pro:~zxy$ lipo -create 模拟器.a(路径) 真机.a(路径) -output 可以把模拟器的.a复制一份重命名.a
这样,就可以合并成一个通用的静态库,唯一的缺点是体积要大一点相对于真机和模拟器两个的总大小 之后将这个静态库拖到工程中即可
------------分割线------
由于看到各位提出的问题在iphones 4s 和iphone 5上无法使用的问题后来查阅各种资料找到答案如下:
原因是因为静态库少了4S~5:i386 对应的cpu架构
如下图所示:
在 cd 到资源库你的.a 文件所在的路径 然后使用如下命令查看:
lipo - infor *.a
显示的结果如下图
![.a的生成,以及模拟器和真机.a <wbr>的合并 .a的生成,以及模拟器和真机.a <wbr>的合并](http://upload-images.jianshu.io/upload_images/453803-7d6e59f99c34b3a0.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)
只需要到你们的.a工程中找到如下图的Debug 将Yes 改成NO即可 然后重新 commond + B 进行重新编译 选择所有的模拟器进行编译 好了 之后再接着你上班的步骤重新愉快的来一遍问题就ok了!!!
![.a的生成,以及模拟器和真机.a <wbr>的合并 .a的生成,以及模拟器和真机.a <wbr>的合并](http://upload-images.jianshu.io/upload_images/453803-a93e06e8657b34f8.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)