一、預(yù)備知識(shí)
1、Rvm介紹:全稱 Ruby Version Manager,是安裝和管理ruby的一種工具。(下面用X.X.X表示ruby的版本)
#常用命令:
rvm list # 查詢已安裝的版本
rvm info # 查詢當(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)包,它通過Ruby Gem源來查找、安裝、升級(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開頭的包
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ù)管理工具,通過ruby實(shí)現(xiàn),必須有ruby環(huán)境才能使用。OS X系統(tǒng)默認(rèn)已經(jīng)可以運(yùn)行ruby。但是ruby版本過低時(shí),CocoaPods無法正常使用,所以需要先安裝更新升級(jí)rvm和ruby,pod倉(cāng)庫(kù),和git一樣,本地有個(gè)pod repo,和github上的版本對(duì)應(yīng)。
查看本地是否存在pod索引庫(kù),執(zhí)行以下命令:
- 首先
cd [~]
切換到當(dāng)前用戶的根目錄。 - 再執(zhí)行
cd .cocoapods
命令。(注意,這里cocoapods
文件是隱藏文件) - 然后執(zhí)行
open .
打開當(dāng)前目錄,查看repos目錄下是否有許多索引文件。 - 否則需要執(zhí)行
pod setup
安裝索引,它會(huì)將CocoaPods master repo
索引的信息下載到~/.cocoapods
目錄下。下載過程中可以cd到改目錄du -sh *
查看下載進(jìn)度。(這個(gè)過程會(huì)比較久)
#常用命令:
pod --version # 檢查CocoaPods的版本(未安裝則無效)
pod init # 在新建的項(xiàng)目根目錄運(yùn)行該命令,為當(dāng)前項(xiàng)目新建podfile文件
pod install # 下載和配置podfile里定義的項(xiàng)目依賴(但不包括已經(jīng)下載和配置的項(xiàng)目依賴),(新建podfile.lock文件)并將每個(gè)依賴庫(kù)的版本信息記錄在podfile.lock文件中。為項(xiàng)目新建.xcworkspace文件。如果有Podfile.lock文件而且對(duì)應(yīng)的Podfile文件未被修改,則會(huì)根據(jù)Podfile.lock文件指定的版本安裝。(使用時(shí)機(jī):第一次安裝、添加依賴庫(kù)、移除依賴庫(kù)是需要pods)
pod update [--verbose --no-repo-update] # 若Podfile中指定的依賴庫(kù)版本不是固定的(即一個(gè)范圍),當(dāng)對(duì)應(yīng)的依賴庫(kù)有了更新,無論有沒有Podfile.lock文件都會(huì)去獲取Podfile文件描述的允許獲取到的最新依賴庫(kù)版本。
pod setup # 在當(dāng)前用戶的.cocoapods/目錄下
pod search XXX # 搜索某個(gè)庫(kù)(前提是必須pod setup后,在本地建立了索引,不然搜索不到)
pod repo update # 在本地索引庫(kù)已經(jīng)存在的情況下,如果search不到XXX庫(kù)時(shí),就執(zhí)行該命令來更新索引。否則先pod setup
pod cache list #會(huì)列出本地緩存的所有三方庫(kù)
pod cache clean XXX #清除某個(gè)緩存的三方庫(kù)
pod repo-rsync update #同步源
二、CocoaPods的安裝與卸載
有了前面的準(zhǔn)備,這里安裝cocoaPods就很簡(jiǎn)單了(原來看第一部分的說明)
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版本過低,可能會(huì)導(dǎo)致安裝出現(xià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
命令,如果安裝過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ì)通過
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ì)被重寫的安裝下來,如果做完全刪除的話,這些東西都不會(huì)重新安裝,電腦里會(huì)只安裝個(gè)cocopods
,這些cocoapods-xxx
還是用的原來的。)
Paste_Image.png
三、CocoaPods的使用
1、三步創(chuàng)建一個(gè)帶有依賴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定義依賴(下面介紹一些簡(jiǎn)單語(yǔ)法,詳細(xì)請(qǐng)查看官方文檔)
- 表示依賴為
SSZipArchive
最新版本
pod 'SSZipArchive'
- 表示特定的依賴版本(這里就特指版本0.9)
pod 'Objection', '0.9'
- 后面pod依賴版本具體填寫方法
= 0.1 // 特指版本為0.1 或者可以直接用數(shù)字(像上面的0.9寫法一樣)
> 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 (這種寫法也較為常見)
- configurations語(yǔ)法
#表示PonyDebugger庫(kù)只在工程設(shè)置為Debug或者Beta依賴(使用多重配置的寫法)
pod 'PonyDebugger', :configurations => ['Debug', 'Beta']
#表示PonyDebugger庫(kù)只在工程設(shè)置為Debug時(shí)依賴(使用一種配置的寫法)
pod 'PonyDebugger', :configuration => 'Debug'
- subspecs語(yǔ)法
#表示只依賴QueryKit庫(kù)下的Attribute模塊(使用某個(gè)庫(kù)下的單個(gè)模塊寫法)
pod 'QueryKit/Attribute'
#表示依賴QueryKit庫(kù)下的Attribute和QuerySet模塊(使用某個(gè)庫(kù)下的多個(gè)模塊寫法)
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ǔ)法
#指定依賴的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ù),上面提過,有時(shí)可能會(huì)因?yàn)楸镜?code>pods索引庫(kù)不存在或者太舊導(dǎo) 致項(xiàng)目導(dǎo)致podfile
中的某些依賴庫(kù)下載失敗。這時(shí)先通過pod search XXX
命令查找本地是否存在改庫(kù)。
如果不存在改庫(kù)需要最好先執(zhí)行pod repo update
命令,更新本地索引庫(kù)。這個(gè)更新的過程比較漫長(zhǎng),更新好之后,再執(zhí)行pod seach
命令,這是如果你的庫(kù)無法搜索出來,那就是~/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)是最新的了,但是通過search_index.json這個(gè)還是索引不到,這就好比你買了一個(gè)第2016年的新字典,但是還用著1998年老字典的查找目錄,新搜錄的東西根據(jù)老目錄肯定出不來)。這個(gè)庫(kù)索引Json文件比較大10多MB,你可以刪除該Json。然后再執(zhí)行 pod search XXX,這樣就會(huì)自動(dòng)下載一個(gè)最新的庫(kù)索引文件了。 經(jīng)過上面的一些列操作后,基本不會(huì)出什么問題了,如果發(fā)現(xiàn)工程因?yàn)橐驗(yàn)?code>pod庫(kù)的問題還無法編譯通過,這是采用終極絕招,干掉podfile.lock
文件、pods
目錄、.xcworkspace
文件,然后執(zhí)行pod install
等待直到完成。 - 沒有創(chuàng)建過
pods
索引庫(kù)需要pod repo setup
。(可以到當(dāng)前用戶更目錄下的.cocoapods
目錄中查看是否存在repo
) -
Podfile.lock
它會(huì)記錄庫(kù)的版本信息,當(dāng)pod update
后版本庫(kù)的改動(dòng)會(huì)被記錄在這個(gè)文件中,當(dāng)然pod install
執(zhí)行后如果本地庫(kù)沒有發(fā)生變化該文件是不會(huì)改變的,它可以防止第三方庫(kù)升級(jí)時(shí)造成的第三方庫(kù)版本不一致。(協(xié)同開發(fā)時(shí)很重要)