背景
刚加入新的公司,接触到新公司的代码以后,心中是一篇翻江倒海,不是因为项目代码有多优秀,多牛逼,而是因为这是一个7年的老项目,期间经历过不知多少个程序员的手,项目简直是面目全非,各种重复的第三方库,代码耦合严重,不同时期的代码风格及开发模式完全不一样,造成项目过大,编译花费很多时间。现在的同事们正在想办法优化项目,在使用组件化的发开模式,减少与项目中老代码及第三方重复库的耦合。因此,一些老的代码和一些已经不怎么更新且非常稳定的第三方库进行二进制处理,加快编译速度,同时在未来的开发中能更好进行整合和淘汰部分重复的代码。但是当错误发生在二进制库中的时候,我们不能有效定位具体代码,那么就需要切回源码,进行分析处理。为此,最近研究了源码与二进制平滑切换的方法,并分享一下心得,如有不足,请指出。
framework与.a的区别
.a:只把代码文件打包编译成二进制。
framework:把代码文件及其他资源,如图片,音频等文件,一起打包成二进制。
在选用何种二进制类型时,可以根据实际的项目情况进行打包。
二进制打包方式
1.通过Xcode的官方打包方式,编译打包
2.使用Aggregate打包
3.使用脚本直接打包
4.使用第三方工具打包,如cocoapods-packager
我这里选用的是Aggregate打包,因为Xcode的官方打包方式比较麻烦;使用脚本会因为不同组件,不用项目要去修改脚本,维护不方便;使用cocoapods-packager,虽然打包方便容易,但是在pod spec lint的时候出现了本地与远程仓库之间二进制文件路劲校验失败的情况的,具体原因还没找到,待后续补充。因此,最后选择了Aggregate打包方式,下面也以Aggregate打包的方式讲解。但是本人希望大家去尝试一下cocoapods-packager。
源码和二进制切换方案
经过一周的调研和实践,发现网上主要是两种方案
1.在podspec中使用if-else的条件语句去区分源码和二进制。但是在源码和二进制切换时,每次都需要pod cache clean一下,切换非常麻烦。虽然原作者给除了解决方案,但是需要一个静态服务器去存放二进制文件,切需要多个脚本去维护,开发及维护成本比较大。而且,在源码与二进制切换时,如果pod cache clean --all所有的二进制都会切换成源码,且pod时需要重新拉代码或者