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
 
            