一.pods版本過(guò)低更新的問(wèn)題。
二.pods鏡像文件沖突,無(wú)法使用的問(wèn)題。
首先cocoaPods需要三方面支持:ruby,鏡像,pods版本。
大概說(shuō)一下依賴(lài)關(guān)系,我們接觸到的最上層是pods版本,他是管理第三方庫(kù)的。然后他的版本號(hào)依賴(lài)于ruby,ruby依賴(lài)于鏡像文件。
流程大概是:更新鏡像->刪掉舊的鏡像->升級(jí)ruby版本->升級(jí)pods版本。
1. 常見(jiàn)問(wèn)題:
正常流程:從網(wǎng)上下載一個(gè)新的項(xiàng)目下來(lái),運(yùn)行發(fā)現(xiàn)pods里面是空的。
執(zhí)行install/update命令拉取pod庫(kù):pod install
然后可能會(huì)報(bào)這個(gè)錯(cuò):
[!] The `master` repo requires CocoaPods 1.0.0 -? (currently using 0.39.0)
提示我pods版本太低,需要1.0.0以上。(pod --version查看pod版本號(hào))
執(zhí)行命令來(lái)更新升級(jí)pods
sudo gem install cocoapods
然后運(yùn)行了一堆,最后又報(bào)錯(cuò)了:
WARNING:? Unable to pull data from 'http://ruby.taobao.org/': bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)
大概意思就是說(shuō)淘寶這個(gè)鏡像已經(jīng)失效了。pods依賴(lài)ruby,需要升級(jí)ruby。
好吧,我們?nèi)Q一個(gè)ruby鏡像:
sudo gem sources --add https://gems.ruby-china.org/
順便查看一下當(dāng)前的鏡像:
gem sources -l? (查看當(dāng)前ruby的源)
這是我安裝的鏡像,已經(jīng)安裝過(guò)最新的。順手把舊的刪除掉:
sudo gem sources --remove http://ruby.taobao.org/
再去更新ruby:
可以先查看一下現(xiàn)有的ruby版本:rvm list known:
第一個(gè)warning是rvm的,一般忽略就行。
更新Ruby命令:
curl -L get.rvm.io | bash -s stable
rvm reload
然后執(zhí)行rvm命令,更新最新的ruby版本:
rvm install 2.2.0
更新完成以后可以查看當(dāng)前ruby版本:
ruby -v
好了,到現(xiàn)在所有的基礎(chǔ)配置已經(jīng)完畢。再一次更新pod吧:
sudo gem install cocoapods
然后一番等待,更新完成,當(dāng)前最新cocoapods:1.2.1
然后安心的再去項(xiàng)目執(zhí)行:pod install
2. 再說(shuō)一個(gè)坑,是因?yàn)檠b了多個(gè)repo倉(cāng)庫(kù)引起的。
當(dāng)你存在多個(gè)repo倉(cāng)庫(kù)(公司私有的)的時(shí)候,就會(huì)起沖突:
Unable to find a specification for `******`
這個(gè)時(shí)候百度的結(jié)果是重置pod目錄:
pod repo remove master
pod setup
注意:setup真的真的超級(jí)慢!
如果你在setup的時(shí)候卡著了,沒(méi)有進(jìn)度。可以有個(gè)辦法查看是否在下載。
"cd ~/.cocoapods/"命令行跳到cocoapods文件夾
執(zhí)行"du -sh *"查看正在下載的文件夾的大小。
然后過(guò)會(huì)再執(zhí)行"du -sh *",對(duì)比大小,如果沒(méi)有變化那就用以下方法:
試試這個(gè)方法:http://blog.csdn.net/appxcode/article/details/51755073
更新:遇到有的庫(kù)無(wú)法install的問(wèn)題,大多數(shù)是本地配置有問(wèn)題。修改本地hosts 內(nèi)容就行了。具體路徑:/etc/hosts?? (command+shift+G轉(zhuǎn)到文件夾)
3. 以上命令行整理:
ruby -v查看當(dāng)前ruby版本
rvm list查看本地ruby版本
rvm list known 查看現(xiàn)有所有版本
rvm current 查看當(dāng)前使用的ruby
sudogem sources --remove http://ruby.taobao.org/ 刪除某個(gè)鏡像源
sudogem sources --addhttps://gems.ruby-china.org/添加
rvm --default use 2.2.2? 切換使用的ruby版本
rvm install ruby-2.2.2 安裝指定的版本
rvm remove 2.4.0 刪除相應(yīng)版本
pod --version查看pod版本號(hào)
sudo gem install cocoapods 更新pods
sudo gem install cocoapods -v 1.2.1 安裝指定版本
gem sources -l? (查看當(dāng)前ruby的源)
pods 換源
pod repo列舉本地的源目錄
pod repo remove? 源名
pod repo add master https://github.com/CocoaPods/Specs.git
pod repo update
pod setup 更新pod源master倉(cāng)庫(kù)
pods 換源
pod repo列舉本地的源目錄
pod repo remove? 源名
pod repo add master https://github.com/CocoaPods/Specs.git
pod repo update
換cocoaPods流程
先卸載本地的pods:
sudo gem uninstall cocoapods
獲取本地pod的路徑:
which pod
刪除pod對(duì)應(yīng)的版本
sudo rm -rf <本地pod路徑>
先查看本地安裝過(guò)的cocopods相關(guān)東西:
gem list --local | grep cocoapods
一般來(lái)說(shuō)都會(huì)顯示下面這幾個(gè):
cocoapods(0.39.0,0.39.0.beta.4,0.38.2)
cocoapods-core(1.0.0.beta.4,0.39.0,0.39.0.beta.4,0.38.2)
cocoapods-deintegrate(1.0.0.beta.1)
cocoapods-downloader(1.0.0.beta.1,0.9.3,0.9.1)
cocoapods-plugins(1.0.0.beta.1,0.4.2)
cocoapods-search(1.0.0.beta.1,0.1.0)
cocoapods-stats(1.0.0.beta.3,0.6.2,0.6.1,0.5.3)
cocoapods-trunk(1.0.0.beta.2,0.6.4,0.6.1)
cocoapods-try(1.0.0.beta.2,0.5.1,0.4.5)
這個(gè)時(shí)候刪除對(duì)應(yīng)的版本就好,按照提示一直按Y:
sudo gem uninstall cocoapods
sudo gem uninstall cocoapods-core
sudo gem uninstall cocoapods-deintegrate(1.0.0.beta.1)
sudo gem uninstall cocoapods-downloader
sudo gem uninstall cocoapods-plugins
sudo gem uninstall cocoapods-search
sudo gem uninstall cocoapods-stats
sudo gem uninstall cocoapods-trunk
sudo gem uninstall cocoapods-try
卸載完了再裝吧:
1:sudo gem install cocoapods??? 如果這個(gè)報(bào)錯(cuò)就用第二個(gè),指定路徑的。反正我是不樂(lè)意往那里面塞,不寫(xiě)路徑會(huì)自動(dòng)安裝到ruby下面的bin文件夾。
2:sudo gem install -n /usr/local/bin cocoapods
pod setup(這個(gè)應(yīng)該不會(huì)很慢了,如果有master倉(cāng)庫(kù)的話(huà))
中途用過(guò)的tips:
如何去除Git代理
?git ?config --global -e
忽略SSL證書(shū)驗(yàn)證:
git config --global http.sslVerify false