一、預(yù)備知識(shí)
1撩轰、Rvm介紹:全稱(chēng) Ruby Version Manager,是安裝和管理ruby的一種工具膀哲。(下面用X.X.X表示ruby的版本)
#常用命令:
rvm list # 查詢(xún)已安裝的版本
rvm info # 查詢(xún)當(dāng)前版本
rvm use X.X.X --default # 選擇默認(rèn)版本
rvm remove X.X.X [--docs] [--gems] # 刪除該ruby版本,后面的可選項(xiàng)分別表示同時(shí)刪除文檔讳侨、gems
2行冰、Ruby介紹: 是一種面向?qū)ο蟮哪_本語(yǔ)言溺蕉,簡(jiǎn)單易用,功能強(qiáng)大悼做。能跨平臺(tái)疯特、可移植性好。
- Ruby的軟件源使用的亞馬遜云服務(wù)肛走,國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境下載時(shí)易超時(shí)漓雅,可以將官方ruby源換成國(guó)內(nèi)源。
- 淘寶ruby源( https://ruby.taobao.org/ ) 2016.06后暫停維護(hù)了朽色。
- China ruby源( https://gems.ruby-china.org/ ),所以現(xiàn)在只能換成這個(gè)源了邻吞。
3、Gem介紹:是一個(gè)管理Ruby庫(kù)的程序的標(biāo)準(zhǔn)包葫男,它通過(guò)Ruby Gem源來(lái)查找抱冷、安裝、升級(jí)和卸載軟件包梢褐,非常便捷旺遮。
#常用命令:
gem -v # ruby的版本號(hào)
gem sources # ruby鏡像
gem sources --add XXX # 增加配置源(例如增加China ruby,源有效才能被add上)
gem sources --remove XXX # 刪除配置源(例如刪除默認(rèn)ruby源)
gem install XXX # 安裝XXX包
gem uninstall XXX # 卸載XXX包
gem clean up # 清楚所有包的舊版本,但會(huì)保留最新版本
gem list [XXX] # 列出本地的包盈咳,可選參數(shù)表示耿眉,列出本地以XXX開(kāi)頭的包
sudo gem install cocoapods [--pre] # 安裝CocoaPods最新版[至預(yù)覽版]
sudo gem update cocoapods [--pre] # 更新CocoaPods至最新版[至預(yù)覽版]
sudo gem uninstall cocoapods -v X.X.X # 卸載X.X.X版本的CocoaPods
sudo gem install cocoapods -v X.X.X #安裝指定版本的CocoaPods
# 如果更新不成功,按錯(cuò)誤提示清空該目錄下的緩存包
4鱼响、CocoaPods介紹:是iOS最常用的第三方庫(kù)管理工具鸣剪,通過(guò)ruby實(shí)現(xiàn),必須有ruby環(huán)境才能使用丈积。OS X系統(tǒng)默認(rèn)已經(jīng)可以運(yùn)行ruby筐骇。但是ruby版本過(guò)低時(shí),CocoaPods無(wú)法正常使用桶癣,所以需要先安裝更新升級(jí)rvm和ruby拥褂,pod倉(cāng)庫(kù),和git一樣牙寞,本地有個(gè)pod repo,和github上的版本對(duì)應(yīng)饺鹃。
查看本地是否存在pod索引庫(kù),執(zhí)行以下命令:
- 首先
cd [~]
切換到當(dāng)前用戶(hù)的根目錄间雀。 - 再執(zhí)行
cd .cocoapods
命令悔详。(注意,這里cocoapods
文件是隱藏文件) - 然后執(zhí)行
open .
打開(kāi)當(dāng)前目錄,查看repos目錄下是否有許多索引文件惹挟。 - 否則需要執(zhí)行
pod setup
安裝索引茄螃,它會(huì)將CocoaPods master repo
索引的信息下載到~/.cocoapods
目錄下。下載過(guò)程中可以cd到改目錄du -sh *
查看下載進(jìn)度连锯。(這個(gè)過(guò)程會(huì)比較久)
#常用命令:
pod --version # 檢查CocoaPods的版本(未安裝則無(wú)效)
pod init # 在新建的項(xiàng)目根目錄運(yùn)行該命令归苍,為當(dāng)前項(xiàng)目新建podfile文件
pod install # 下載和配置podfile里定義的項(xiàng)目依賴(lài)(但不包括已經(jīng)下載和配置的項(xiàng)目依賴(lài))用狱,(新建podfile.lock文件)并將每個(gè)依賴(lài)庫(kù)的版本信息記錄在podfile.lock文件中。為項(xiàng)目新建.xcworkspace文件拼弃。如果有Podfile.lock文件而且對(duì)應(yīng)的Podfile文件未被修改夏伊,則會(huì)根據(jù)Podfile.lock文件指定的版本安裝。(使用時(shí)機(jī):第一次安裝吻氧、添加依賴(lài)庫(kù)溺忧、移除依賴(lài)庫(kù)是需要pods)
pod update [--verbose --no-repo-update] # 若Podfile中指定的依賴(lài)庫(kù)版本不是固定的(即一個(gè)范圍),當(dāng)對(duì)應(yīng)的依賴(lài)庫(kù)有了更新盯孙,無(wú)論有沒(méi)有Podfile.lock文件都會(huì)去獲取Podfile文件描述的允許獲取到的最新依賴(lài)庫(kù)版本鲁森。
pod setup # 在當(dāng)前用戶(hù)的.cocoapods/目錄下
pod search XXX # 搜索某個(gè)庫(kù)(前提是必須pod setup后,在本地建立了索引振惰,不然搜索不到)
pod repo update # 在本地索引庫(kù)已經(jīng)存在的情況下歌溉,如果search不到XXX庫(kù)時(shí),就執(zhí)行該命令來(lái)更新索引报账。否則先pod setup
pod cache list #會(huì)列出本地緩存的所有三方庫(kù)
pod cache clean XXX #清除某個(gè)緩存的三方庫(kù)
pod repo-rsync update #同步源
二研底、CocoaPods的安裝與卸載
有了前面的準(zhǔn)備,這里安裝cocoaPods就很簡(jiǎn)單了(原來(lái)看第一部分的說(shuō)明)
1透罢、更換Ruby源
- 移除Ruby默認(rèn)源
$ gem sources --remove https://rubygems.org/
- 使用新的源
$ gem sources -a https://gems.ruby-china.org/
- 驗(yàn)證Ruby源是否更換成功
$ gem sources
2榜晦、安裝CocoaPods
- 檢查gem版本(因?yàn)間em版本過(guò)低,可能會(huì)導(dǎo)致安裝出現(xiàn)問(wèn)題)
$ gem -v
- 如果gem需要升級(jí)的話執(zhí)行
$ sudo gem update --system
- 有了上面關(guān)鍵幾部后羽圃,執(zhí)行安裝
$ sudo gem install cocoapods
$ pod setup
3乾胶、卸載CocoaPods
如果想要完全卸載一個(gè)cocoapods庫(kù),如要做一下處理:
- 執(zhí)行
$ which pod
命令朽寞,如果安裝過(guò)cocoapods的話识窿,會(huì)找到一個(gè)XXX/.../XXX/pod
的目錄,那么使用$ rm -rf 該目錄
將之刪除脑融。然后再執(zhí)行$ which pod
查看是否還有pod的目錄喻频,有的話統(tǒng)統(tǒng)刪除。 - 執(zhí)行
$ rm -rf ~/.cocoapods/
刪除該目錄 - 執(zhí)行
$ rm -rf ~/Library/Caches/CocoaPods/
刪除該目錄 - 注意:上面的這幾點(diǎn)都不會(huì)通過(guò)
gem
中的卸載命令刪除肘迎。 - 執(zhí)行
$ gem list
甥温,會(huì)列出gem中安裝的所有軟件,找到cocoapods
相關(guān)的軟件妓布,下圖中顯示的挨個(gè)刪除即可姻蚓。例如(sudo gem uninstall cocoapods
),下面是我電腦中需要?jiǎng)h除的所有cocoapods
相關(guān)的東西(這里不要擔(dān)心,安裝cocoapods
時(shí)匣沼,只需執(zhí)行$ gem install cocoapods
狰挡,下圖中的cocoapods-xxx
這些都會(huì)被重寫(xiě)的安裝下來(lái),如果做完全刪除的話,這些東西都不會(huì)重新安裝加叁,電腦里會(huì)只安裝個(gè)cocopods
倦沧,這些cocoapods-xxx
還是用的原來(lái)的。)
三它匕、CocoaPods的使用
1刀脏、三步創(chuàng)建一個(gè)帶有依賴(lài)pods項(xiàng)目
- 新建項(xiàng)目,在項(xiàng)目根目錄執(zhí)行
pod init
命令超凳。會(huì)在根目錄自動(dòng)生成profile
文件。 - 編輯
profile
文件耀态。 - 執(zhí)行
pod install
(注意這里是install
,不是update
),因?yàn)榈谝淮?code>pod install之后會(huì)為項(xiàng)目生成podfile.lock
文件轮傍,以及.xcwokspace
文件。
2首装、編輯profile定義依賴(lài)(下面介紹一些簡(jiǎn)單語(yǔ)法创夜,詳細(xì)請(qǐng)查看官方文檔)
- 表示依賴(lài)為
SSZipArchive
最新版本
pod 'SSZipArchive'
- 表示特定的依賴(lài)版本(這里就特指版本0.9)
pod 'Objection', '0.9'
- 后面pod依賴(lài)版本具體填寫(xiě)方法
= 0.1 // 特指版本為0.1 或者可以直接用數(shù)字(像上面的0.9寫(xiě)法一樣)
> 0.1 // 任何版本只要0.1
>= 0.1 // 任何版本大于或等于0.1
< 0.1 // 任何版本小于0.1
<= 0.1 // 任何版本小于等于0.1
~>0.1.2 // 0.1.2 <= 版本 < 0.2.0 (這種寫(xiě)法也較為常見(jiàn))
- configurations語(yǔ)法
#表示PonyDebugger庫(kù)只在工程設(shè)置為Debug或者Beta依賴(lài)(使用多重配置的寫(xiě)法)
pod 'PonyDebugger', :configurations => ['Debug', 'Beta']
#表示PonyDebugger庫(kù)只在工程設(shè)置為Debug時(shí)依賴(lài)(使用一種配置的寫(xiě)法)
pod 'PonyDebugger', :configuration => 'Debug'
- subspecs語(yǔ)法
#表示只依賴(lài)QueryKit庫(kù)下的Attribute模塊(使用某個(gè)庫(kù)下的單個(gè)模塊寫(xiě)法)
pod 'QueryKit/Attribute'
#表示依賴(lài)QueryKit庫(kù)下的Attribute和QuerySet模塊(使用某個(gè)庫(kù)下的多個(gè)模塊寫(xiě)法)
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
- path語(yǔ)法
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
- git語(yǔ)法
#倉(cāng)庫(kù)中的master分支(默認(rèn))
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
#倉(cāng)庫(kù)中的dev分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
#倉(cāng)庫(kù)中某次tag下的代碼
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
#倉(cāng)庫(kù)下某次具體提交的代碼
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
- podspec語(yǔ)法
#指定依賴(lài)的podspec(一般為團(tuán)隊(duì)內(nèi)的私有庫(kù))
pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'
3、注意事項(xiàng):
-
pod install
和pod update
執(zhí)行時(shí)一般都比較慢仙逻,因?yàn)樗鼈儠?huì)默認(rèn)更新一次podspec
索引驰吓,可以再后面添加--no-repo-update
參數(shù)不讓更新索引。 -
pods
索引庫(kù)系奉,上面提過(guò)檬贰,有時(shí)可能會(huì)因?yàn)楸镜?code>pods索引庫(kù)不存在或者太舊導(dǎo) 致項(xiàng)目導(dǎo)致podfile
中的某些依賴(lài)庫(kù)下載失敗。這時(shí)先通過(guò)pod search XXX
命令查找本地是否存在改庫(kù)缺亮。
如果不存在改庫(kù)需要最好先執(zhí)行pod repo update
命令翁涤,更新本地索引庫(kù)。這個(gè)更新的過(guò)程比較漫長(zhǎng)萌踱,更新好之后葵礼,再執(zhí)行pod seach
命令,這是如果你的庫(kù)無(wú)法搜索出來(lái)并鸵,那就是~/Library/Caches/CocoaPods/search_index.json
庫(kù)索引是舊的(這個(gè)一般是因?yàn)镃ocoaPods升級(jí)導(dǎo)致鸳粉,如果你想升級(jí)Cocopods記得先卸載,再執(zhí)行升級(jí)园担,否者search_index.json還是舊的届谈,雖然pod repo已經(jīng)是最新的了,但是通過(guò)search_index.json這個(gè)還是索引不到粉铐,這就好比你買(mǎi)了一個(gè)第2016年的新字典疼约,但是還用著1998年老字典的查找目錄,新搜錄的東西根據(jù)老目錄肯定出不來(lái))蝙泼。這個(gè)庫(kù)索引Json文件比較大10多MB程剥,你可以刪除該Json。然后再執(zhí)行 pod search XXX,這樣就會(huì)自動(dòng)下載一個(gè)最新的庫(kù)索引文件了织鲸。 經(jīng)過(guò)上面的一些列操作后舔腾,基本不會(huì)出什么問(wèn)題了,如果發(fā)現(xiàn)工程因?yàn)橐驗(yàn)?code>pod庫(kù)的問(wèn)題還無(wú)法編譯通過(guò)搂擦,這是采用終極絕招稳诚,干掉podfile.lock
文件、pods
目錄瀑踢、.xcworkspace
文件扳还,然后執(zhí)行pod install
等待直到完成。 - 沒(méi)有創(chuàng)建過(guò)
pods
索引庫(kù)需要pod repo setup
橱夭。(可以到當(dāng)前用戶(hù)更目錄下的.cocoapods
目錄中查看是否存在repo
) -
Podfile.lock
它會(huì)記錄庫(kù)的版本信息氨距,當(dāng)pod update
后版本庫(kù)的改動(dòng)會(huì)被記錄在這個(gè)文件中,當(dāng)然pod install
執(zhí)行后如果本地庫(kù)沒(méi)有發(fā)生變化該文件是不會(huì)改變的棘劣,它可以防止第三方庫(kù)升級(jí)時(shí)造成的第三方庫(kù)版本不一致俏让。(協(xié)同開(kāi)發(fā)時(shí)很重要)