一、概念解析
静态库:
被完整的拷贝到可执行文件中,被多次使用就有多份拷贝,有a 和 .framework两种形式;
动态库:
程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存,有dylib 和 .framework 两种形式
系统的.framework是动态库,自己可编译的.framework静态库和动态库(据说用动态库app审核会通不过,没有验证)
.a与.framework的区别
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件和.h文件。.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。个人建议用.framework,看个人习惯。
二、静态库生成步骤
生成.framework
1.打开xcode新建一个project,选择Framework类型,然后next新建一个项目。
image.png
2.新建或拖入已有的源码文件(可以是OC 、C、 C++的源码文件)
image.png
3.更改配置
(1)首先是Dead Code Stripping设置为NO,网上对此项的解释如下,大致意思是如果开启此项就会对代码中的”dead”、”unreachable”的代码过滤,不过这个开关是否关闭,似乎没有多大影响,不过为了完整还原framework中的代码,将此项关闭也未曾不可。
(2)然后将Link With Standard Libraries关闭,可能是为了避免重复链接。
(3)最后将Mach-O Type设为Static Library。
image.png
4.设置Headers
将要公开的头文件从project拖入Public下,要隐藏的放在Private或者Project下,隐藏的文件无法被引用。
image.png
在项目生成的FrameworkPJ.h文件中引入公开的头文件
image.png
5.打包
打包分为模拟器版本和真机版本,选择generic iOS Device打包为真机版本,选择任意一个模拟器打包则为模拟器版本。点击build按钮打包。
image.png
6.合并
打开终端,输入lipo -create 模拟器framework的二进制文件地址 真机framework二进制文件地址 -output 新文件地址 然后回车,将新二进制文件替换任意一个framework里的二进制文件,即可得到合并后的framework。
终端命令:
lipo -create /Users/qingxian/Desktop/1/FrameWorkPJ.framework/FrameWorkPJ /Users/qingxian/Desktop/2/FrameWorkPJ.framework/FrameWorkPJ -output /Users/qingxian/Desktop/3/FrameWorkPJ
二进制文件地址如下:
image.png
生成.a
创建工程时,选择Cocoa Touch Static Library,其余步骤与创建.framework类似,不再详细讲述。
注意事项:1、framework 在某些情况下出现error,此时需要在该工程中 other linker flags添加两个参数 -ObjC -all_load。(未测试,等碰到问题再补充)
网友评论