OS X 10.11以上系統,CocoaPods的安裝及使用

weixin_33978044發表於2016-10-31

1.設定ruby的軟體源

由於ruby的原始軟體源rubygems.org被我大天朝遮蔽了,首先替換該軟體源

gem sources --remove https://rubygems.org/

gem sources -a https://ruby.taobao.org/

驗證軟體源已經被替換

gem sources -l

如果成功替換,應顯示如下內容

*** CURRENT SOURCES ***

https://ruby.taobao.org/

2.升級gem

sudo gem update --system

3.安裝CocoaPods

sudo gem install cocoa pods

pod setup

在執行pod setup的時候,出現Setting up CocoaPods master repo,半天沒有任何反應,還是因為我大天朝的那堵牆擋住了cocoapods.org。此時應當更換國內的伺服器,gitcafe和oschina都是國內的伺服器,可以用它們來作為CocoaPods索引庫的映象:

pod repo remove master

pod repo add master https://gitcafe.com/akuandev/Specs.git

pod repo update

如果想用oschina的映象也可以把第二條命令換成http://git.oschina.net/akuandev/Specs.git 即可。

第二條命令執行的時候會比較耗時,因為這個時候要去把整個specs倉庫clone到 ~/.cocoapods這裡。可以cd到該目錄裡,用du -sh *命令檢視檔案大小來監視下載情況。

4.CocoaPods的使用

首先cd進入到你的工程根目錄下,輸入以下命令符

touch Podfile

該命令符用於建立一個名為Podfile的檔案。(注意,不能寫成其他名稱)。

通過vim來編輯Podfile的內容(也可以通過文字編輯器)

vim Podfile

輸入i進入編輯模式(終端下方會顯示-- INSERT --字樣),這裡以新增AFNetworking為例

platform:ios,'7.0'

target "MyProject" do

pod 'AFNetworking', '~> 3.1.0'

use_frameworks! (swift專案需要加入該行)

end

其中MyProject是你的專案名稱,platform的'7.0'要求當前第三方庫最低支援IOS7.0版本。

~> 3.1.0的意思是AFNetworking的版本號要求在3.2.0以下(不含3.2.0),3.1.0以上(含3.1.0)。如果不寫版本號,則預設為滿足要求的最新版本。比如:

'~> 0.1.2' Version 0.1.2 and the versions up to 0.2, not including 0.2 and higher  0.2以下(不含0.2),0.1.2以上(含0.1.2)

'~> 0.1' Version 0.1 and the versions up to 1.0, not including 1.0 and higher      1.0以下(不含1.0),0.1以上(含0.1)

'~> 0' Version 0 and higher, this is basically the same as not having it.          0和以上,等於沒有此約束

'3.1.0' 指定版本號為3.1.0

按下esc鍵,再輸入:wq,儲存並退出。

如果在輸入vim Podfile敲完回車報錯:Found a swap file by the name ".Podfile.swp"。Swap file ".Podfile.swp" already exists!

3485026-300238525c61fb12.png
此時輸入D鍵,刪除即可

該問題是由於在vim操作期間,被強行關閉的原因,系統生成了.Podfile.swp檔案,輸入D鍵刪除即可。

這時候,你就可以利用CocoPods下載AFNetworking類庫了。還是在終端中的當前專案目錄下,執行以下命令:

pod install

執行上述命令之後,終端出現以下資訊:

EricmatoMacBook-Pro:CocoaPodsDemo ericwang$ pod install

Analyzing dependencies

Downloading dependencies

Installing AFNetworking (3.1.0)

Generating Pods project

Integrating client project

[!] From now on use `omega.xcworkspace`.

注意最後一句話,意思是:以後開啟專案就用 omega.xcworkspace 開啟,而不是之前的.xcodeproj檔案。

你也許會鬱悶,為什麼會出現.xcodeproj檔案呢。這正是你剛剛執行pod install命令產生的新檔案。除了這個檔案,你會發現還多了另外一個檔案“Podfile.lock”和一個資料夾“Pods”。

到此為止,AFNetworking庫已經被成功的加入到你的專案之中。

用Xcode開啟專案,會發現framework下的框架全部是紅字,不用管它,直接執行。

5.指令擴充套件


5.1 使用pod search指令查詢第三方庫

在終端中輸入pod search AFNetworking(此處名稱可以是模糊搜尋),回車,則可搜尋相關的類庫資訊,如下:

3485026-66d40e2c57801638.png
此處按Q鍵退出

5.2 使用pod outdated指令查詢第三方庫更新資訊

cd到專案根目錄,輸入pod outdated指令,可以查詢當前已安裝的所有三方庫中,有沒有最新版本的資訊

3485026-65161b2d497993e9.png
可以看到,當前SDWebImage和YYKit都有更新的版本

5.3 pod install 和 pod update

假若你的Podfile中,關於AFNetworking是這麼描述的:

pod 'AFNetworking', '~> 3.1.0'

而AFNetworking的最新版本已經升級至3.1.1。那麼當你執行pod install的時候,CocoaPods並不會將AFNetworking升級至最新版本,而執行pod update語句操作時(pod update是對所有的第三方庫進行檢查並更新,你也可以通過pod update AFNetworking語句,單獨更新AFNetworking。),CocoaPods將會把AFNetworking升級至3.1.1版本。

假若AFNetworking的描述變為:

pod 'AFNetworking', '3.1.0'

該語句指定了版本號為3.1.0,即使你執行了pod update操作,也並不會將AFNetworking升級至3.1.1,因為Podfile這段關於AFNetworking的描述,已經將版本號寫死。

假如要用CocoaPods刪除AFNetworking類庫,只需刪除Podfile中的pod 'AFNetworking', '~> 3.1.0'語句,然後執行pod install即可。

通常來說,除非要執行更新操作,否則類庫的新增和刪除,建議使用pod install。

有的時候使用CocoaPods來新增第三方類庫,無論是執行pod install或是pod update會出現速度很慢的情況,原因在於當執行以上兩個命令的時候會升級CocoaPods的spec倉庫,加一個引數可以省略這一步,然後速度就會提升不少。加引數的命令如下:

pod install --verbose --no-repo-update

pod update --verbose --no-repo-update

6.關於CocoaPods上傳伺服器的相關問題

iOS開發中,使用CocosPods 框架管理工具會生成Podfile、Podfile.lock、Pods資料夾和.xcworkspace四個產物。

3485026-8ca9eb33de22d9ea.png
CocoaPods檔案說明

除了Podfile檔案是必須要commit and push以外,其他都是可選的。Podfile.lock用於記錄當前第三方庫的版本號,可以不提交,不過提交這個的好處是,可以提醒團隊裡面的人,依賴庫版本已經更新!

個人.gitignore的配置如下:

# 忽略Xcode本地使用者配置資訊

*.xcuserstate

*.xcuserdatad/

xcuserdata/

xcshareddata/

.metadata/

# 忽略`Pods/`和`Podfile.lock`

Pods/

Podfile.lock

如果想忽略*.xcworkspace新增即可。

7.下載別人原始碼開啟報錯的處理(專案使用了CocoaPods)

有的時候我們屁顛屁顛的從github上或者其他平臺下載了一個原始碼,正打算欣賞,開啟卻發現一堆報錯,瞬間傻眼。不用著急,觀察專案是否使用了CocoaPods,如果有,執行pod update命令符,再次build,你就會發現所有的報錯都沒了。

相關文章