项目打包成framework静态库

一.采用手动导入第三方SDK方式
  • 1.创建framework,删除自带的.h .m文件


  • 2.在buid setting 搜索 mach

将Mach-O Type 改为 Static Library(静态库)类型

  • 3.Build Active Architeture only 改为NO
  • 4.把用到的文件及文件夹拖到里面,第三方文件/库除外,(需要在使用封装库的项目中重新配置info.plist),添加图片资源-新建一个.bundle资源,把图片、sb、xib放到.bundle资源里面,修改图片路径

⚠️注意AppDelegate 、info.plist和ViewController不要拖,AppDelegate里面的方法弄成暴露接口,在项目中的AppDelegate调用
3种方式处理.bundle和.framework

❌(a)、(b)上架打包失败,且copy files中添加framework
(a)前提.bundle库拖到了建立的framework项目中,建立的framework的文件里面用到图片的路径就得修改为:xxx.framework/xxx.bundle/a.png
(b)前提.bundle库拖到了建立的framework项目中,并且打完静态库之后又把.bundle库拖到了Headers文件里暴露给使用者,建立的framework的文件里面用到图片的路径就得修改为:xxx.framework/Headers/xxx.bundle/a.png
✅(c)推荐:前提.bundle库不拖到建立的framework项目中或者不把add to targets选中见下条5,最后把.bundle库和.framework库一起提供给使用者,文件里面用到图片的路径就得修改为:xxx.bundle/a.png

  • 5.手动导入第三方库/文件(便于方便可以把第三方SDK文件夹全部拖进去,包括bundle等等),但是不要添加到该framework上面
  • 6.导入第三方静态库之后再link依赖的系统库和第三方framework等库文件,像这样,deployment target选最低
  • 7.若用到.pch文件,重新修改.pch 文件路径,搜索prefix header 修改路径:例如$(SRCROOT)/$(PROJECT_NAME)/VideoHeader.pch
  • 8.选择需要公开的头文件,将头文件暴露出去,供外界使用,所有的编译文件都在Project中,需要右击添加到public里面
⚠️注意公开的头文件中,#import的其他类也要公开,添加到public中,如果不想公开,就在头文件用@class的方式,在对应的.m中用#import方式
  • 9.选中真机和模拟器分别编译一下
  • 10.合并真机和模拟器生成的二进制文件

打开终端 输入 lipo -create第一个framework文件下二进制文件的绝对路径 第二个framework文件下二进制文件的绝对路径 -output 最终的二进制文件路径 然后enter键

  • 11.生成的二进制文件替换原先的真机生成或模拟器生成的二进制文件,然后相应的其所在的.framework文件就是最终的framework,将其导入别的工程使用时这个工程需要引进制作framework时用到的第三方SDK
二.使用cocoapods导入到framwork时注意事项,其他都和手动导入一样,当在模拟器编辑时候会报错,

选择 Build Settings ,在 Architectures 下增加 armv7s 。真机下不许改动,如果改动编译会报错


三.新项目使用framework(对应上面的abc)
  • 1.引用xxx.framework、导入#import 、配置info.plist
  • 2.xxx.framework中依赖的第三方库和系统库,那么需要在Linked Frameworks and Libraries里面添加
    例如:faceface.framework依赖IDLFaceSDK.framework,而IDLFaceSDK.framework依赖libc++.tbd,libc++.tbd必须在项目中添加,否则报错!


  • 3.⚠️若xxx.framework中有分类报错的话,则按下图修改项目配置,在项目中Build Settings中搜索linker,在linking中的Other Linker Flags中输入-ObjC,如图

你可能感兴趣的:(项目打包成framework静态库)