前言
虽然制作静态framework已经很普遍了,度娘一搜一大把,但是还是把自己做的记录一下吧。
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。
iOS中的静态库有 .a 和 .framework两种形式;动态库有.dylib 和 .framework 形式,后来.dylib动态库又被苹果替换成.tbd的形式。
静态库与动态库的区别
静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;而动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。
总结:同一个静态库在不同程序中使用时,每一个程序中都得导入一次,打包时也被打包进去,形成一个程序。而动态库在不同程序中,打包时并没有被打包进去,只在程序运行使用时,才链接载入(如系统的框架如UIKit、Foundation等),所以程序体积会小很多,但是苹果不让使用自己的动态库,否则审核就无法通过。
处。
创建framework静态库
-
第一步,新建项目
创建项目.png
创建项目名.png -
第二步,导入需要打包的源文件。
image.png -
第三步,暴露头文件。
暴露头文件.png -
第四步,然后设置编译模式,在Xcode菜单【Product】--->【Scheme】--->【Edit Scheme...】中。
设置编译模式1.png
设置编译模式2.png
修改生成的Mach-O格式.png - 第五步,编译生成静态库
编译时,需要用release模式下的真机和模拟器各自编译一次。
注意,需要用release模式下的真机和模拟器各自编译一次,不需要debug
编译生成静态库.png
- 第六步,合并framework
我们需要的是这两个文件:
合并文件.png
来到终端:
输入 lipo -info加真机上的这个文件路径 回车
lipo -info.png
前面的不用管,看最后 armv7 arm64 说明是真机,如此方法测试模拟器文件,需得到i386 x86_64才对。
接下来重点:合并
lipo -create 真机路径 模拟器路径 -output 真机路径
因为我们是合并到真机路径上,所以合并完成后需要按上面的方法进行测试,还是拖入真机路径,这时候需要得到的是:armv7 i386 x86_64 arm64
//合并reslease和debug的framework
lipo -create /Users/hgm/Desktop/Release-iphoneos/HHCommentExten.framework/HHCommentExten /Users/hgm/Desktop/Release-iphonesimulator/HHCommentExten.framework/HHCommentExten -output /Users/hgm/Desktop/iPhone/HHCommentExten
/Users/hgm/Desktop/
为Release-iphoneos和Release-iphonesimulator在你本机的位置。合并之后,把 HHCommentExten
拖入到HHCommentExten.framework即可使用。