上一篇的方案是:单独创建一个新的库,把它当做一个新的库来管理。这样的弊端是需要维护两个库,还要在宿主工程的Podfile中修改pod 'XMGDownLoad或XMGDownLoadLib'来切换源码和二进制。如果类似的库多了,工作量就大了。本篇将解决这个问题。
使用复合工程来解决这个问题
- 打开XMGDownLoad-Example源码工程;
- TARGETS处添加一个.framework库,修改该库的编译构架为所有(Build Settings--> Build Active Architecture Only --> NO)、mach-O Type为static library(Build Settings --> Mach-O Type --> static library)、Headers暴露(拖入文件后再暴露)、release。
-
拖入源码到库所属文件夹中,注意是引用关系,不是复制拷贝关系,这样修改的都是同一处文件,操作如下图。然后暴露下头文件从Project到Public。
1.设置编译所有构架
2.mach-O Type 静态库
3.暴露接口
4.Edit Scheme——>release
- 修改XMGDownLoad-Example工程的的podspec,注释s.source_files,改为:s.source_files = 'XMGDownLoad/Classes/*/.h'(只安装.h头文件,.m不能给,否则就起不到保护的作用);s.vendored_frameworks = 'XMGDownLoad/Products/XMGDownLoad. framework'(库的路径,根目录下新建个Products文件夹拷贝入编译好的framework库或者修改设置,在上一篇中讲到)
s.source_files = 'XMGDownLoad/Classes/**/*.h'
s.vendored_frameworks = 'XMGDownLoad/Products/XMGDownLoad.framework'
修改version,提交代码到远程库。
-
宿主工程,podfile文件中只需要 pod 'XMGDownLoad'即可,无需加Lib,因为podspec文件中指明了安装头文件和二进制库,tag指名了哪一份代码,s.source :git指名了源码地址。
宿主工程,如果是pod install,是从Podfile.lock中找版本号,所以安装之后还是源码版本0.1.0不是二进制库版本0.1.1;所以应该用pod update --no-repo-update,从podfile中找版本号。
pod install不升级版本号——从podfile.lock找原有版本号version或tag
pod update升级版本号——从podfile找spec安装最新版本号version或tag
这个方案的好处
- 维护
下载库XMGDownLoad
,只需要维护一份代码就可以了。源码XMGDownLoad和库XMGDownLoadLib都在XMGDownLoad-Example工程中,只需要维护一份在Classes中的代码。 - 宿主Podfile只需pod 'XMGDownLoad'就可以安装二进制库。
这个方案的思路
XMGDownLoad-Example中Targets添加创建一个.framework库,该库代码引用原Classes有的,而不是复制一份。这样修改代码还是修改原来那一份的。