1.首先要先学会创建一个静态库;
点这个即可创建出如下的target
然后在.h中定义方法,在.m中实现对应方法,我拿这个简单的方法做操作
关键的点来了,此时需要先在虚拟机状态下编译(没sb什么的,所以不会有显示).然后再在真机情况下编译一次(千万不能够插着手机编译,接下来会解释).这时候对应得.a文件就会由红变黑,此时文件真实存在,show in finder 如下
此时会生成对应的调试状态下的真机和虚拟机的.a静态库.
这时把对应的库导入想要用到的项目中去:
导入的是虚拟机状态下的静态库;一开始创建时是在6sPlus的情况下编译的.这时候我们在4s上运行,就会报错如下:
这时候我们引出了架构的问题:
常见问题: //architecture: 架构 not found for architecture x86_64
A: 模拟器和真机的架构
//模拟器编译时只输出一种架构
//真机(不要插入iPhone),默认输出多种架构, 除了armv7s (这就是之前没让插入真机的原因)
//从2014年10月的某个版本更新中, 取消了armv7s为默认输出选项
//架构是支持低版本兼容
B: 如何查看架构
cd到静态库目录下
查看架构: lipo -info lib.a
C: 模拟器:2种架构
i386 : 4S ~ 5 --> 32
x86_64 : 5S ~ 6s --> 64
真机: 3种架构
armv7 :4 ~ 4s
armv7s : 5 ~ 5c
arm64 : 5S ~ 6s
显然运行在4s上的时候因为架构不对.缺少i386架构.这时候只要简单方法即可解决如下:
更改编译参数
点击库文件 --> Target --> Build Setting --> 只编译当前架构选项改为NO
如果是模拟器编译, 则直接编译成2个版本之和
如果是真机编译,仍然编译成2个版本之和
改为NO即可.再重新编译一下静态库.这时候的架构就是:
真机的话自动就是NO,所以就会自动生成2种架构.但是没有armv7s这种框架.需要我们手动添加如下:
架构情况:
我在弄这个的时候顺带着就把发布状态的静态库也编译好了,方法如下:
所以在静态库这出问题的话就只有:虚拟机状态下添加了真机状态下的静态库(反之同理),只编译得到了对应手机型号的架构,然后运行在别的手机型号上.
剩下的就是静态库的合成了,我相信大家都会的,在这里我就也简答描述一下:
合成静态库通用文件的优缺点
如果不合成: 比如百度2.8.1版本 优点:减少文件体积 缺点: 真机和模拟器切换调试非常不方便
如何合成: 比如友盟 优点: 调试方便 缺点: 体积大
方法如下:先cd到对应的路径(Products)下,
lipo -create /Users/fang/Library/Developer/Xcode/DerivedData/Text-hlfcmwksqcqkdufmlgqvdxumjvjm/Build/Products/Debug-iphonesimulator/libText.a /Users/fang/Library/Developer/Xcode/DerivedData/Text-hlfcmwksqcqkdufmlgqvdxumjvjm/Build/Products/Debug-iphoneos/libText.a -output libDebugAll.a
得到:
此时的架构种类:
.a静态库已分析完.还有一些补充:eg: A:边开发边调试.a静态库.B:创建Framework静态库
#pragma mark 1. 添加资源文件
一定要方法到bundle文件夹下, 保证路径加载是唯一的资源. 否则可能会跟项目里的同名文件发生冲突, 导致文件加载出错.
#pragma mark 2. 边开发边调试.a静态库
1. 创建普通的项目
2. 添加项目Target, 创建库文件, 并实现相关方法
3. 在项目中手动导入.a文件 (重要)
4. 此时.a是通用文件, 什么架构都可以使用.
5. 如果想导出静态库文件, 那么切换Target, 按照之前所学输出即可.
#pragma mark 3. 创建Framework静态库
1. 头文件跟.a一样, 默认只输出创建项目时自带的.h
2. 如果要导出头文件, 找项目--> Build Phases --> Headers --> 将Project的头文件拖拽到Public中即可
3. 其他的架构编译方式跟.a一样
4. Framework的形式 默认导出是动态库 (.dylib / Xcode7 .tbd) . 找到项目--> Embedded Binaries 添加Framework即可.
5. 动态库不能上架, 需要转换静态库 : --> Build Setting --> 搜索mach --> 修改成静态库即可
#pragma mark 4. 测试Framework静态库
1. 一定要注意头文件的导出 . 头文件如果敲不出来, 强制敲
2. 如果需要导出, 参考上面的导出方式即可(注意转换动态库)
学习的怎么样?????不明白的可以继续交流;这是本人第一次写博客,可能在表达上有些欠缺.忘理解.......