一.目的
项目里有A.B.C三个库的时候.
想用cocopods集成三方库.
就需要每个库都通过cocopods来集成.
个人强迫症.感觉很不爽.
最后看见大神的一个做法.
(1) 新建一个静态库.
(2) 让这个GXPodLinker静态库通过cocopods集成你想要的三方库.
(3) 将这个GXPodLinker静态库与三方库一起打成一个 all_in_one.a静态包.
这个all_in_one.a静态包就包含了所有三方库的.o文件.
(4) 创建一个动态库D作为all_in_one.a静态包的壳.
动态库D编译出来的framework就可以作为一个公用组件放在工程里使用了.
二.具体实现步骤
1.创建动态库GXPodContainer
2.在GXPodLinker目录下创建GXPodLinker静态库.如下图目录结构
3.在GXPodLinker目录下创建Podfile.并填写依赖的三方库.
4.运行pod install命令.
5.打开GXPodLinker.xcworkspace.
6.在build phases/Link Binary With Libraries里添加你依赖的三方库.如图.
7.创建Aggregate
7.1.点击下图加号
7.2.选择Aggregate
7.3.创建自定义脚本
7.4.填写要运行的脚本
7.5.脚本如下.需要放在GXPodLinker工程目录下才能被找到.
7.6.将target切换到GXPodLinkerShell.并运行.就可以生成all_in_one.a静态包了.
脚本会把all_in_one.a放在GXPodLinker工程目录下的lib文件夹
8.打开GXPodContainer工程.将all_in_one.a静态包拖入GXPodContainer工程.如下图
9.将all_in_one.a包link到工程
下图中还link了libz.tbd和libsqlite3.tbd是因为all_in_one.a静态包里的文件需要依赖.
10.将三方库的头文件赋值到include文件夹目录下
10.1.如下图创建脚本
10.2.填写如下脚本
下图中的GXPodLinker需要改成你创建的静态库壳的工程名
10.3.修改other linker flags
为什么修改见
注意3
10.4.将GXPodContainer工程拖入你的主工程既可使用刚才你添加的三方库类了.
二.注意
1.静态库安装cocopods时必须使用静态库导入.即Podfile文件里需要注释掉use_frameworks!
2.静态库通过cocopods导入三方库后.需要在Build Phases -> Link Binary With Libraries 里添加你所依赖的三方库.a >>> 很关键!!! 很关键!!! 很关键!!! 重要的事说三遍以上.
3.将all_in_one.a静态包拖入动态库A使用时.动态库必须设置other linker flags 为 -ObjC. (关于other linker flags见other linker flags)
4.此时编译动态库A.工程可能会报错.根据错误link对应的系统库即可.(因为可能三方库需要依赖的系统库你没导入)
三.实现好的工程库地址
使用方法请见该库的 README.md