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