众所周知Github对应开发者来说就是神器,开发iOS项目不可避免地要使用第三方开源库,所以通过github能很方便地查找到合适的第三方开源库,再配合CocoaPods来管理项目,确实能快速高效稳定地辅助开发者进行开发。现在CocoaPods已经成为iOS开发事实上的依赖管理标准工具。
但是我想说的是虽然通过以上工具能为开发者提供便利,但是引入cocopods的同时,最好还是将自己的项目做好安全管理,因为三方库的侵入性很强,如果一味引入,不做任何处理的话,前期一时爽,后期迭代就会出现各种各样的问题。
举一个最近遇见的实例吧:
SDWebImage 是目前使用最广泛的第三方图片处理库
https://github.com/SDWebImage/SDWebImage
基本很多公司的开发者都喜欢用它,确实它优秀的图片处理原理以及良好架构设计能使开发者爱不释手,甚至很多其他出名的开源库也基本把它作为图片下载器。
但是再好的开源库,它迭代的时候也对公司项目也有冲击,比如SDWebImage以前支持GIF展示的,但是为了更好的性能体验,SDWebImage4.0以后它推荐使用FLAnimatedImage。
https://github.com/Flipboard/FLAnimatedImage
如果坚持使用以前的加载方法展示GIF就会有点缺陷,它只会展示GIF第一帧图片,换句话说就只显示静态图了,所以需要开发者重新引入新的三方库并修改下之前的代码。当然如果需要用 UITableView 或 UICollectionView 展示大量 GIF,用FLAnimatedImage操作不当,可能会有性能问题,滑动时发生顿卡,这个就不再赘述了。
我要说是多库引用,迭代产生的问题。
就比如MWPhotoBrowser,可以说它是在图片浏览器中很出名的三方库,能方便的进行图片管理与展示,8k的点赞足以证明它的优秀
https://github.com/mwaterfall/MWPhotoBrowser
而它图片处理库就是依赖于SDWebImage老版本的,也就是说每次SDWebImage迭代更新,它也需要同步适配。但是该作者已经有几年没有维护了,所以现在当你将SDWebImage更新到最新时,就会发现MWPhotoBrowser各种报错,如果它对你项目的侵入性不强的话,你就可以将它替换了,反之就需要做出是否更新的取舍或者自己维护这庞大的三方库。还有更可怕的是,如果你cocopods里面的其他三方库又有依赖于MWPhotoBrowser的话,这样循环下去,如果不作出调整的话,迟早项目会变得难以维护。
推荐方式:
1.如果是公司自己的产品,建议最好少用以上多依赖性的三方库,如果理解其原理,动手能力强,最好取其精髓,因为三方库其实很多功能都用不到,可以造只合适公司项目的轮子再做扩展。
2.如果非要引用,最好合运用设计模式来避免侵入性,如调用方法前加一层滤网(以前ASI也是一款很流行的下载库,但是作者不再维护,如果在下载的接口前有滤网的话,只需将项目后面的库现在换成AFN就行了)
最后提个醒,举个极端的例子,像Masonry这种很出名的三方链式布局类:https://github.com/SnapKit/Masonry
很多其他主流三方库也在用它,假设你的项目也涉及它
然而如果以后不维护了,你的项目维护开销有多大?
网友评论