iOS依赖管理工具--CocoaPods

9th,April,2016

简介

CocoaPods是一款面向Swift与Objective-C的依赖管理工具,使用ruby开发,Mac下默认安装ruby。

CocoaPods项目代码: github-CocoaPods

CocoaPods官网: https://cocoapods.org/

为什么使用CocoaPods

唐巧在  用CocoaPods做iOS程序的依赖管理  这篇文章中提到,不使用CocoaPods会出现以下几种情况的简单体力活:

"

  1. 把这些第三方开源库的源代码文件复制到项目中,或者设置成 git 的 submodule。
  2. 对于这些开源库通常需要依赖系统的一些 framework,我需要手工地将这些 framework 分别增加项目依赖中,比如通常情况下,一个网络库就需要增加以下 framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
  3. 对于某些开源库,我还需要设置-licucore或者 -fno-objc-arc编译参数
  4. 管理这些依赖包的更新

"

第一点项目构建时如果引入比较多的第三方库,那么确实少做了很多体力活。 一键就可以引入所有需要使用的第三方库,无需一一下载然后复制到项目中

第二点是针对项目中的依赖库的添加,我只想默默的说一句,这点体力活不算什么。 补充一点:“如果用惯了cocoapods的童鞋,转而去维护没使用cocoapods的鲜蘑菇,也许在遇到依赖库问题时,会束手无策” from w

第三点是编译参数的设置, 同第二点

第四点指定第三方库版本号就会下载相应版本的第三方库,未指定默认则是使用最新的第三方库版本,该情况下会快速及时更新第三方库版本。但其必要性有待考证。你选用的第三方库应足够可靠健壮与完善,其中第三方版本的更新对于你的应用是否有关键性的作用就不得而知了。

为什么不使用CocoaPods

ibireme 在iOS 第三方开源库的吐槽和备忘  中也吐槽了第三方开源库顺便也吐槽了下CocoaPods:

"

  1. 像maven这样的工具,是为了管理庞大的第三方库依赖、控制版本、构建工程等等而产生的,很难想象一个依赖了上百个jar包的web项目不用包管理构建会变成什么样。。但是,iOS开发是客户端的开发啊,如果真有一个工程依赖了那么多第三方工具,这个App能保持稳定吗。。通常情况下一个iOS工程不会有那么多包依赖。
  2. 按常理来看,一个人的手头不可能有太多的工程同时进行,也不太可能一天之内创建N个App来发布。cocoapods能节省的重复工作量,还不如它带来麻烦多。。
  3. 修改和调试不便。如果某个第三方库需要少量修改才能实现需求,用cocoapods来处理会比较麻烦.
"

第一点确实有一定的道理

第二点 算是一点吗,具体什么麻烦也没说

第三点 在使用CocoaPods情况下如果需要修改引入的库,应该怎么办,目前只知道三种方案(如有其他方案,欢迎交流):

1. 不要更新CocoaPods。 

2. 不要使用CocoaPods引入该库;

3. 1)CocoaPods可以通过指定依赖的podspec使用内部库拥有私有的Pods,那么就可以把第三方库修改版本设为私有的Pods,

    2)或者把修改版本上传到github,通过指定git使用

  eg: pod 'JolieLib', :podspec => 'https://jolieyang.com/lib/JolieLib.podspec'

        pod 'JolieLib', :git => 'https://github.com/jolie_yang/JolieLib'

 那到底要不要用CocoaPods呢,我也不知道, 但是目前我是很少使用CocoaPods

从另外一个角度思考, 什么情况下会修改引入的库呢,像使用AFNetworking之类的库,修改应该是少之又少。

4. 顺便我再吐槽一点, 之前项目用CocoaPods时基本不会pod update, 当然也有使用pod update,体验就是有的时候update好慢。


顺便再看看ibireme对于第三方库的吐槽:

  1. 消耗时间,一个开源库,拿过来需要仔细考察代码质量,确认是否足够可靠。如果出现问题,需要仔细审查开源库的内部实现。如果这些工作太消耗时间,还不如自己实现。
  2. 可维护性差。一旦遇到系统升级、API更换,第三方库不能确保不出问题。当出问题后也难以找到人来维护。如果跟进第三方库的改变,仍然容易出现新问题。
  3. 法律问题。。大公司需要仔细审查许可协议,小公司各种不怕那就没问题。。

第一点 公司在使用AFNetworking的时候会考察代码质量吗? 

第二点 比较优秀的第三方库在API更换的时候会影响原先的代码调用吗?

第三点 许可协议要好好看看


辩证看CocoaPods

有用CocoaPods管理第三方库,也有不使用的情况。我尽然没什么特别的觉悟。目前的情况,一般不使用CocoaPods。

我想了下目前会再使用CocoaPods的情况:快速开发时使用了很多第三方库的时候



             

欢迎交流!






你可能感兴趣的:(iOS依赖管理工具--CocoaPods)