问题
大家肯定遇到过要更新某个库的某个版本,结果pod install下载很久下不下来,很是头疼。如果还需要pod update那就更恐怖了。
pod操作原理
下面我们从pod install和pod update的原理入门,看看它们实质是做了什么,来解决这个问题。
首先从pod update的应用场景来说,比如你本地电脑只有MJRefresh库的3.2.3版本,但是你的同事在项目里podfile里面把MJRefresh的版本改为了3.3.1。那么你直接pod install会报错的,因为本地没有这个版本,你需要先pod update。
pod update的实质
pod update的实质是把https://github.com/CocoaPods/Specs下载到本地的/Users/xxx的电脑/.cocoapods/repos/master
(xxx的电脑注意换成你自己的电脑名)。核心其实是Specs里面的所有索引库,这个文件夹很大,有100多M。再加上某些原因,国内网络访问github很慢,所以1M的第三方库都能把你花费你半小时下载不下来。
对pod update的优化
知道了pod update的实质,我们就没必要傻傻的更新整个Specs了。我们只要找到我们想要更新的库的版本,如MJRefresh的3.3.1版本,我们自己在/Users/xxx的电脑/.cocoapods/repos/master/Specs/0/f/b/MJRefresh
文件夹里面新建一个3.3.1文件夹,在此文件夹里再建一个MJRefresh.podspec.json。这个json跟github上面的MJRefresh.podspec还是有一点区别的(主要是转为了json格式)。所以不能直接拷贝过来,你可以把本地的3.2.3文件夹的MJRefresh.podspec.json拷贝过来,把json里面的版本号改为3.3.1(不同版本的描述文件一般只需要改版本号,其他都是一样的)。
再说说怎么找MJRefresh在哪个文件夹里面,因为Specs里面有3级目录,你直接是很难找到MJRefresh在哪里的,所以需要借助电脑的搜索功能,在Specs里面搜索MJRefresh。我就找到在0/f/b文件夹下。
pod install的实质
pod install的实质是把本地电脑的/Users/xxx的电脑/.cocoapods/repos/master/Specs/0/f/b/MJRefresh
里面的描述文件拷贝到/Users/xxx的电脑/Library/Caches/CocoaPods/Pods/Specs/Release/MJRefresh
。所以我们自己执行这个操作,把描述文件的名字改为3.3.podspec.json
(取版本号的前2位。如果版本号有n位,这里就写到n-1位就行)。
描述文件搞定后,下面来拷贝源码。我们把从github下载下来的源码或者同事那里拷贝过来的MJRefresh的3.3.1的源码放到/Users/xxx的电脑/Library/Caches/CocoaPods/Pods/Release/MJRefresh
文件夹,这里要特别注意一点。此文件夹的名字大有讲究,一定要是版本号-xxxx。如3.3.1-542f。前半部分是版本号,后面是一串字符串,这个字符串不能乱改,一定要是对的。这个后面看起来像随机字符串的字符串其实不是随机的,是跟版本号唯一绑定的,目前不知道它的生成规则。所以你从同事那里拷贝的话,最好把这个文件夹名字一起拷贝过来。
最后
然后你再执行pod install的时候,就会把源码从刚刚的路径拷贝到项目里面的pod文件夹了。上面几步都是离线操作。所以速度很快。通过cocoapods更新某个库总是失败的问题就解决了。