0x0001 需求
年底了,业务不是非常忙。公司最近需求要搞组件化开发。把每一个成熟的模块做成 SDK、framework、pod-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里面引用的,不然编译不成功。

- 注意:我暴露出的头文件.h里面都没有引用
- 然后这里引入你刚才暴露出的头文件
- 编译导出:
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