袁凤鸣的博客 | Fleeming's Blog Front-end Dev Engineer

iOS组件化之路——打包依赖AFNetworking的静态framework

2019-12-31
袁凤鸣


0x0001 需求

年底了,业务不是非常忙。公司最近需求要搞组件化开发。把每一个成熟的模块做成 SDKframeworkpod-repo等。计划将核心业务打包成静态framework,制作静态framewok的网上到处搜索得到,但是真正能说清楚如何依赖AFNetworking的却很少,如何一步一步做framework很少,接下来我们就一起来看一下,如何制作一个依赖AFNetworking的静态库framework

0x0002 详细步骤

  • 我们要创建一个静态库工程:打开Xcode ->File ->New->Project,,我们选择 Framework

  • 保存到桌面

  • 使用pod 来依赖AFNetworking,打出来的静态库。

    在引用的时候,引用静态库的工程也需要用 pod 安装AFNetworking,否则无法使用打包出来的framework。这种方法虽然优雅,但是也有风险,比如说一些特别老的工程可能没有使用 pod 来管理三方库,这就略微蛋疼了。But。。试问现在还要多少公司的工程不用pod来管理呢?如果有这种公司我建议裸辞回家过年哈。pod都不用的公司以后苦逼日多的是。

  • 新建 Podfile 后,终端执行 pod install安装 AFNetworking

  • 进入xcworkspace文件 编译项目,并拉入你的SDK将要封装打包的文件
    • 这里是将要把红框的FMNetworking文件夹封装成framework。FMNetworking内部一些文件依赖的 AFNetworking
  • 对外暴露出你想要提供给别人使用的一些头文件

  • 然后我们要把framework工程修改为静态库framework,因为我们创建的工程默认是动态库工程,将红框里面的Mach-o Type 修改为Static Library,这个一定要改,不改的话,打出来的framework 在引用的时候会报 如下错误。 


    • 然后这里引入你刚才暴露出的头文件
      • 注意:我暴露出的头文件.h里面都没有引用 AFNetworking的文件。都是在.m里面引用的,不然编译不成功。
  • 编译导出: cmd + k先清除缓存,然后cmd+b编译。你发现products文件夹里的framework由红色变成实心灰黑色。
    • 编译成功,直接option + 鼠标左键拖出 products文件夹里的framework到桌面放着
  • 注意:TARGETS —> Build Settings 中设置相关项 Build Active Architecture Only 设置为NO的意思是当前打包的.framework支持所有的设备.否则打包时只能用当前版本的模拟器或真机运行.

  • Build Setting 搜索Dead Code Stripping 设置为NO是编译选项优化,包瘦身,(可不改)

  • 设置framework最低支持的版本

0x0003 使用

  • 你的工程也要使用 pod 引用 AFNetworking
  • 然后将桌面的 framework拖到你的工程中。
  • 在要使用的地方导入#import <FMNetworking/FMNetworking.h>即可使用。

0x0004 总结

  • 制作的framework中 某些.m文件中使用了AFNetworking,但是所有头文件无涉及AFNetworking。这样编译导出的framework正常;
  • 使用时候,项目工程要用 pod 引用AFNetworking,然后在使用刚才的framework


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏博主

Music

Search

Content