CocoaPods現(xiàn)在已經(jīng)是iOS開發(fā)的標(biāo)配了,但CocoaPods有多慢相信大家也深有體會(huì),有時(shí)候pod update一下,別說去喝杯咖啡了,去吃個(gè)飯回來都不一定能更新好。。。
前段時(shí)間電腦出了點(diǎn)問題被迫重裝了一遍CocoaPods,折騰了整整一天,弄的我心力交瘁,最后還是利用點(diǎn)偏方才最終搞定,特此記錄一下,希望能對(duì)其他人有點(diǎn)幫助。。。
CocoaPods的安裝就不說了,網(wǎng)上一搜一堆,需要注意的是,很多教程都已經(jīng)過時(shí)了也沒更新,最明顯的是 “http://ruby.taobao.org/” 早就更新成 “https://ruby.taobao.org/” 了,
而“https://ruby.taobao.org/” 網(wǎng)站上也明確說了該站已經(jīng)不再維護(hù),重定向到Ruby China 鏡像了。。。
這個(gè)是稍微新一點(diǎn)的: http://www.cocoachina.com/ios/20160922/17622.html
不過也不保證你看到這篇文章的時(shí)候還沒有過時(shí)。。。
進(jìn)入正題:
1. 直接clone 國內(nèi)Specs鏡像來跳過pod setup步驟,加快CocoaPods安裝過程
安裝完CocoaPods需要執(zhí)行的第一個(gè)操作就是 pod setup;
這個(gè)操作其實(shí)就是將CocoaPods的官方repo下載到 ~/.cocoapods/repos 文件夾下面;
現(xiàn)在官方repo大概有500M,加上國內(nèi)訪問github的蝸牛網(wǎng)速,所以pod setup耗你幾個(gè)小時(shí)時(shí)間絲毫沒有問題,而且還很容易失敗。。。
怎么才能省下這點(diǎn)時(shí)間呢?
答案就是不要pod setup,直接從國內(nèi)鏡像上去把這個(gè)repo給clone下來;
比如直接執(zhí)行
git clone https://code.aliyun.com/Magi/CocoaPods.git ~/.cocoapods/repos/master
這是直接將repo 下載到 ~/.cocoapods/repos/master這個(gè)目錄
以后repo需要更新的時(shí)候,也可以直接cd到這個(gè)目錄下面直接執(zhí)行 git pull,會(huì)比直接pod update要快一點(diǎn)
https://code.aliyun.com/Magi/CocoaPods.git 是一個(gè)國內(nèi)鏡像地址,如果你有其他鏡像地址,可以自行更換
2. 使用 pod update --no-repo-update 參數(shù)強(qiáng)制不更新repo
稍微科普一下pod update的工作原理:
所有可以用 pod “xxxxx” 來安裝的庫都有一個(gè)podspec文件,
而所有podspec文件都是統(tǒng)一保存在 https://github.com/CocoaPods/Specs.git 這個(gè)倉庫里面,這個(gè)倉庫就是個(gè)索引,官方稱之為repo,
這個(gè)倉庫會(huì)在pod setup的時(shí)候被clone到本地,默認(rèn)路徑為 ~/.cocoapods/repos/master,
然后每次pod update 的時(shí)候,CocoaPods就會(huì)把這個(gè)倉庫也更新一遍,
因?yàn)閞epo在越變?cè)酱螅覈鴥?nèi)訪問github很慢,所以卡在pod update很常見。。。
--no-repo-update這個(gè)參數(shù)的意思就是,告訴CocoaPods不用去更新repo;
這個(gè)參數(shù)在你使用的庫都沒有更新的時(shí)候非常有用,
但如果你使用的庫剛好有更新,那就不能加這個(gè)參數(shù)了,可以用其他方法加速(見下文)
3. 手動(dòng)維護(hù)私有repo來跳過pod update的更新repo過程
如何創(chuàng)建私有repo可以參考博客:
使用Cocoapods創(chuàng)建私有podspec
或者官方文檔:
Private Pods
CocoaPods貌似是從0.3.6以后支持私有repo(具體哪個(gè)版本開始忘了,反正1.0.0以后肯定是可以的)
就是說,我們可以不用官方的repo來指定pod庫了,如果私有repo里包含指定的podspec文件,那也可以直接使用,
你只需要在podfile里面加一句
source 'URL_TO_REPOSITORY'
source 參數(shù)文檔

簡單翻譯一下就是:
用source ‘xxxx' 來指定私有repo地址,source的順序很重要,CocoaPods會(huì)使用第一個(gè)source中版本號(hào)最高的Pod,而不管其他的source中有沒有更高的版本。
官方source是默認(rèn)的,但是一旦你指定了私有source地址,就要把官方source地址也明確寫出來。
這個(gè)參數(shù)就厲害了~
比如說我有個(gè)項(xiàng)目依賴了AFNetworking(3.1.0),SDWebImage(4.0.0),
那我可以去把他們的spec文件都下載下來,用pod repo push REPO_NAME SPEC_NAME.podspec
添加到我的私有repo中,
以后我更新pod的時(shí)候,就可以放心的用 pod update —no-repo-update;
哪一天AFNetworking更新到4.0.0了,我就再去把AFNetworking最新的podspec文件下回來,還是用上面的命令添加到私有repo中,
然后又可以用pod update —no-repo-update了;
其他庫也可以用完全一樣的方式來管理,這樣就可以完全跳過更新repo這個(gè)步驟了
唯一不爽的就是得自己維護(hù)這個(gè)私有repo了。。。
4. 終極大法:VPN
上面說到的方法都是只能加快更新repo的方法,真正下載pod庫,還是得去github網(wǎng)站上下載,或者去國內(nèi)github鏡像上下載,
大部分的庫一般都是幾十上百k,還能下的下來,如果真有幾十M的庫,還是乖乖開VPN吧;
如何讓終端也都VPN可以參考:
讓終端走代理的幾種方法
需要注意的是貌似國內(nèi)用戶上傳的pod是存在國內(nèi)地址的?我自己上傳的pod庫,不開VPN能下下來,開了VPN反而會(huì)直接卡住,一動(dòng)不動(dòng)。。。
后續(xù):
Carthage 貌似也很好用,不過我還沒用過,有空研究一下吧~~