在企业级开发中,我们往往会把一些公司一些底层的东西进行包装,封装成不同平台的框架,供公司内部人员使用及外部使用,如百度地图,高德地图,微信等等,前段时间也一直在公司做相关的框架封装。
静态库和动态库的存在形式
- 静态库:.a 和 .framework
- 动态库:.dylib 和 .framework
静态库和动态库的区别
静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝-
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存
注意:项目中如果使用了动态库,会苹果拒接
设备的CPU架构简介
模拟器:
-
4s~5 : i386
-
5s~6plus : x86_64
真机:
-
3gs~4s : armv7
-
5~5c : armv7s (静态库只要支持了armv7,就可以跑在armv7s的架构上)
-
5s~6plus : arm64
制作静态库
在开发中,有.a和.Framework两种形式的静态库,再XCODE6中支持直接开发,.Framework的静态库只需要做一步简单的设置就可以了,另外,关于两种形式的选择,公司采用的时.framework的形式,因为在使用的过程中,framework包中已经包含了头文件,而.a要另外的添加,其他没有什么大的区别。
选择framework的形式,设置项目名称,即可创建成功,在building setting中设置如下:
修改为static library的形式,就会以静态库的形式进行链接了。
需要暴露给外界的文件
编译:
再编译的时候,我们可以采用lipo命令查看生成的文件,有debug版本可release版本,debug有x86和x86_64两种,release有armv7s,arm7,arm64(静态库只要支持了armv7,就可以跑在armv7s的架构上)。
我采用的脚本的方式进行编译,不需要再编译两次或者再工程内添加:
再项目的根目录下添加一个脚本文件,如下图所示:
脚本如下: