iOS 制作静态framework

前言

虽然制作静态framework已经很普遍了,度娘一搜一大把,但是还是把自己做的记录一下吧。
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。
iOS中的静态库有 .a 和 .framework两种形式;动态库有.dylib 和 .framework 形式,后来.dylib动态库又被苹果替换成.tbd的形式。

静态库与动态库的区别

静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;而动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。
总结:同一个静态库在不同程序中使用时,每一个程序中都得导入一次,打包时也被打包进去,形成一个程序。而动态库在不同程序中,打包时并没有被打包进去,只在程序运行使用时,才链接载入(如系统的框架如UIKit、Foundation等),所以程序体积会小很多,但是苹果不让使用自己的动态库,否则审核就无法通过。
处。

创建framework静态库

  • 第一步,新建项目


    iOS 制作静态framework_第1张图片
    创建项目.png

    iOS 制作静态framework_第2张图片
    创建项目名.png
  • 第二步,导入需要打包的源文件。


    iOS 制作静态framework_第3张图片
    image.png
  • 第三步,暴露头文件。


    iOS 制作静态framework_第4张图片
    暴露头文件.png
  • 第四步,然后设置编译模式,在Xcode菜单【Product】--->【Scheme】--->【Edit Scheme...】中。


    设置编译模式1.png

    iOS 制作静态framework_第5张图片
    设置编译模式2.png

    iOS 制作静态framework_第6张图片
    修改生成的Mach-O格式.png
  • 第五步,编译生成静态库
    编译时,需要用release模式下的真机和模拟器各自编译一次。

注意,需要用release模式下的真机和模拟器各自编译一次,不需要debug

iOS 制作静态framework_第7张图片
编译生成静态库.png
  • 第六步,合并framework
    我们需要的是这两个文件:
    iOS 制作静态framework_第8张图片
    合并文件.png

    来到终端:
    输入 lipo -info加真机上的这个文件路径 回车
    iOS 制作静态framework_第9张图片
    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即可使用。

完毕:这只是将没有粘连的代码整合到静态framework,其中没有关联其他静态类库,因为我还没有做相关需求,所以先写到这里吧。

你可能感兴趣的:(iOS 制作静态framework)