背景:
公司项目自己弄了私有的CocoaPods仓库,我将私有仓库通过pod repo add privatefactory "http://xxx.xx.xx.xx/mygit.git"
添加到了本地
修改了一个pod后,将最新版本1.3.5的pod推到了仓库里
然后本地通过pod repo update privatefactory
更新了本地仓库
问题:
Podfile内容如下:
platform :ios, '7.0'
source 'http://xxx.xx.xx.xx/mygit.git'
source 'https://github.com/CocoaPods/Specs.git'
target 'Sample' do
pod 'SamplePod','~> 1.3.1'
end
通过pod install --no-repo-update
安装pod,结果发现使用的仍然是1.3.1版本的SamplePod,而不是最新的1.3.5。
原因
查看/.cocoapods/repos
目录,发现自己的私有仓库有两个文件夹,自己手动添加的privatefactory和一个2-mygit文件夹。privatefactory文件夹里的SamplePod是最新的1.3.5,而2-mygit里面的是老的1.3.1版本。
经过一番调试对比发现了原因:
因为我的Podfile里面,source配置的是git地址,所以pod install执行的时候并不会使用我手动添加的privatefactory私有仓库,而是去2-mygit仓库,如果仓库不存在就重新拉取,如果已存在,就直接使用该仓库,并不会更新仓库。
我的问题就在于之前2-mygit仓库是存在的,且SamplePod的版本是1.3.1,而我手动更新的是privatefactory仓库,2-mygit仓库没有更新,pod install的时候2-mygit也没有更新,所以导致使用了老的git。
解决方法
经过测试发现,如果本地仓库的名字和git仓库工程的名字相同,pod install的时候就会直接使用该仓库名字。
所以,要求每个人把本地仓库的名字设置成仓库工程的名字,似乎就可以解决掉这个问题了,不会出现多个仓库的问题。
但这样的解决办法有风险,加入哪个开发人员没有按要求做,并且在自己本机打包了,那就会出现使用老的pod的问题。
所以最保险的办法是使用jenkins在专用的打包机器上进行打包,避免因为本机环境出现代码集成问题。