将多个三方库打包成一个动态库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将多个三方库打包成一个动态库相关的知识,希望对你有一定的参考价值。
参考技术A 项目里有A.B.C三个库的时候.想用cocopods集成三方库.
就需要每个库都通过cocopods来集成.
个人强迫症.感觉很不爽.
最后看见大神的一个做法.
(1) 新建一个静态库.
(2) 让这个GXPodLinker静态库通过cocopods集成你想要的三方库.
(3) 将这个GXPodLinker静态库与三方库一起打成一个 all_in_one.a静态包.
(4) 创建一个动态库D作为all_in_one.a静态包的壳.
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
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
库地址: https://github.com/moonbeammm/GXPodContainer.git
以上是关于将多个三方库打包成一个动态库的主要内容,如果未能解决你的问题,请参考以下文章