CocoaPods 的坑及在实际项目中的建议
如今在OS X或iOS下开发应用CocoaPods基本上是一款不可缺少的第三方库管理工具,通过CocoaPods工具我们可以为项目添加被其所支持的Pods
的依赖库,并且可以轻松管理其版本。但是在管理或者说维护的过程中也是存在一些的问题的。
比如说公司的一个iOS项目用到了键盘管理的第三方库IQKeyboardManager,iOS 11面世后,测试的同学反映键盘无法收起,小组的一个同学接了这个bug。但是到了第二天这位同学把bug抛给了我,说让我修改IQKeyboardManager库中代码,在其某个类中的ToolBar上加一个“完成”按钮(iOS 10及以下版本是有的,点击“完成”可收起键盘,在iOS 11消失了)。说要帮忙修改第三方库,大家都知道,项目中的第三方库是不轻易在其源代码中“动刀”的,否则交接、时间问题或者后续的迭代都可能出现问题。按说第三方库有bug,首要的是先看第三方库否有新版本,难道说作者还没适配iOS 11 🤔。带着疑惑我反问这位同学为什么,果不其然,他说当前项目中这个库version:4.0.13
已是最新版本了,作者并没有适配iOS 11。可是我这个人有个毛病,在开发中并不轻信于人,实践是检验真理的唯一标准😂,动手!打开终端
version:4.0.13
。不过没关系,我还要在GitHub看一下!一查pod v5.0.6
!!!为什么要在GitHub重新查看?
原因:Cocoapods 在安装时会将第三方库的版本索引下载到本地~/.cocoapods/repos/master/Specs目录下。我们在本地搜索的时候搜到只是 cocoapods 安装时下载到本地的索引,搜索不到最新版本,是因为 Cocoapods 镜像索引库更新了,而本地的索引库却没更新!前往 ~/.cocoapods/repos/master 目录下查看 CocoaPods-version.yml 文件,然后查看github的Cocoapods版本描述,找到“last”字段对比两者的值是否一致。
解决办法:
方法一(首选方案):
更新 Cocoapods 本地索引库
pod repo update
方法二: (第一种方案还是不行)
pod cache clean --all
rm -rf ~/Library/Caches/CocoaPods
pod repo update
更新完毕再次搜索,完美解决!
在此说一下,其实有很多人在使用CocoaPods安装第三方库时喜欢用
pod 'IQKeyboardManager'
而我则更倾向于
'IQKeyboardManager', '~> 5.0.6'
两者的区别在于前者安装的是库的最新版本(话虽如此,但实践经验告诉我们不一定是最新版本😝),后者则是安装库的指定版本。不仅如此,后者指定版本的好处还在于版本控制清晰,一目了然,和可维护性。前者版本控制不是那么透明,只知道是最新版本(也许不是,有可能是CocoaPods索引库版本和GitHub的Cocoapods版本问题,也有可能是未安装最新版本原因),版本号不清;另一方面,若是更新了第三方库,新版本的库API发生了很大变化或功能做了改变,再要退回之前的版本,免不了要折腾一番,因此这些因素都加重了后期的可维护性。综合以上原因,所以使用带版本号的方法最合理。
最后特别要注意的是CocoaPods不可能每次使用的时候都更新本地索引库(更新的真的很慢!!!),所以在使用CocoaPods更新或者安装第三方库的时候要先在GitHub上先查看一下第三方库最新版本是否和
终端
search出来的一致。若一致可直接修改项目Podfile
文件第三方库版本号,然后再安装;若不一致要先更新 Cocoapods 本地索引库后再修改项目Podfile
文件第三方库版本号,然后再安装。