一、什么是CocoaPods
在進行iOS開發的時候,總免不了使用第三方的開源庫,CocoaPods(GitHub)是一個用來幫助我們管理第三方依賴庫的工具。
使用CocoaPods的目的是讓我們能自動化的、集中的、直觀的管理第三方開源庫。
二、安裝CocoaPods
1.安裝
CocoaPods是用Ruby實現的,要想使用它首先需要有Ruby的環境。幸運的是OS X系統默認的已經可以運行Ruby了,因此我們只需要執行以下命令:
sudo gem install cocoapods
CocoaPods是以Ruby gem包的形式被安裝的。在安裝執行的過程中,可能會問我們是不是更新rake,輸入y即可。這是因為rake gem包會在安裝的過程中檢查更細,如果有可用的新版本就會出現剛才的選項。
在安裝進程結束的時候,執行命令:
pod setup
如果沒有報錯,就說明一切安裝就成功了!
2.安裝過程中可能遇到的問題
(1).執行完install命令半天沒反應
這有可能是因為Ruby的默認源使用的是cocoapods.org,國內訪問這個網址有時候會有問題,網上的一種解決方案是將遠替換成淘寶的RubyGems鏡像,替換方式如下:
gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/ gem sources -l *** CURRENT SOURCES *** https://ruby.taobao.org # 請確保只有 ruby.taobao.org
(2).gem版本過老
gem是管理Ruby庫和程序的標准包,如果它的版本過低也可能導致安裝失敗,解決方案自然是升級gem,執行下述命令即可:
sudo gem update --system
3.升級CocoaPods
sudo gem install cocoapods
三、使用CocoaPods
為了演示這個過程,我創建了一個名為CocoapodsTest的工程。
1.創建Podfile
在CocoapodsTest工程的根目錄下執行命令,創建空白的Podfile文件:
pod init
2.查找第三方庫(以AFNetworking為例)
pod search AFNetworking
查詢出多個項目,其中有一個是AFNetworking:
-> AFNetworking (3.1.0) A delightful iOS and OS X networking framework. pod 'AFNetworking', '~> 3.1.0' - Homepage: https://github.com/AFNetworking/AFNetworking - Source: https://github.com/AFNetworking/AFNetworking.git - Versions: 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 3.0.0-beta.3, 3.0.0-beta.2, 3.0.0-beta.1, 2.6.3, 2.6.2, 2.6.1, 2.6.0, 2.5.4, 2.5.3, 2.5.2, 2.5.1, 2.5.0, 2.4.1, 2.4.0, 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1, 1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2, 1.0RC1, 0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0, 0.5.1 [master repo] - Subspecs: - AFNetworking/Serialization (3.1.0) - AFNetworking/Security (3.1.0) - AFNetworking/Reachability (3.1.0) - AFNetworking/NSURLSession (3.1.0) - AFNetworking/UIKit (3.1.0)
3.編輯Podfile
(1).根據需要,我們可以在Podfile文件中寫入需要用到的第三方庫,以AFNetworking庫為例:
# Uncomment this line to define a global platform for your project # platform :ios, '8.0' # Uncomment this line if you're using Swift # use_frameworks! target 'CocoapodsTest' do pod 'AFNetworking', '~> 3.0' end target 'CocoapodsTestTests' do end target 'CocoapodsTestUITests' do end
注:platform :ios, 8.0 表示iOS應用支持8.0以上版本
注:use_frameworks! 使用Swift寫APP的時候請開啟
(2).Podfile和target
(3).引入依賴庫時,需要顯示或隱式注明引用的依賴庫版本,具體寫法和表示含義如下:
pod 'AFNetworking' //不顯式指定依賴庫版本,表示每次都獲取最新版本 pod 'AFNetworking', '2.0' //只使用2.0版本 pod 'AFNetworking', '> 2.0' //使用高於2.0的版本 pod 'AFNetworking', '>= 2.0' //使用大於或等於2.0的版本 pod 'AFNetworking', '< 2.0' //使用小於2.0的版本 pod 'AFNetworking', '<= 2.0' //使用小於或等於2.0的版本 pod 'AFNetworking', '~> 0.1.2' //使用大於等於0.1.2但小於0.2的版本 pod 'AFNetworking', '~>0.1' //使用大於等於0.1但小於1.0的版本 pod 'AFNetworking', '~>0' //高於0的版本,寫這個限制和什么都不寫是一個效果,都表示使用最新版本
4.執行導入命令
pod install
pod install命令執行成功后,會發現多出 CocoapodsTest.xcworkspace、Podfile.lock、Pods 文件。
我們從現在起,我們需要使用CocoapodsTest.xcworkspace文件來開發。
對於工程發生的變化,有幾點需要說明:
- 第三方庫會被編譯成靜態庫供我們正真的工程使用
CocoaPods會將所有的第三方庫以target的方式組成一個名為Pods的工程,該工程就放在剛才新生成的Pods目錄下。整個第三方庫工程會生成一個名稱為libPods.a的靜態庫提供給我們自己的CocoaPodsTest工程使用。
- 我們的工程和第三方庫所在的工程會由一個新生成的workspace管理
為了方便我們直觀的管理工程和第三方庫,CocoaPodsTest工程和Pods工程會被以workspace的形式組織和管理,也就是我們剛才看到的CocoapodsTest.xcworkspace文件。
原來的工程設置已經被更改了,這時候我們直接打開原來的工程文件去編譯就會報錯,只能使用新生成的workspace來進行項目管理。
5.執行更新命令
(1).若還要使用其它第三方庫,如 Reachability:
target 'CocoapodsTest' do pod 'AFNetworking', '~> 3.0' pod 'Reachability' end
再執行命令:
pod update
(2).若要移除一個第三方庫,如 Reachability;只要刪除在Podfile文件中pod 'Reachability'這行:
target 'CocoapodsTest' do pod 'AFNetworking', '~> 3.0' end
再執行:
pod update
四、Podfile.lock文件
執行完pod install之后,會生成一個Podfile.lock文件。這個文件看起來跟我們關系不大,實際上絕對不應該忽略它。
該文件用於保存已經安裝的Pods依賴庫的版本,通過CocoaPods安裝了AFNetworking這個pods依賴庫以后對應的Podfile.lock文件內容為:
PODS: - AFNetworking (3.1.0): - AFNetworking/NSURLSession (= 3.1.0) - AFNetworking/Reachability (= 3.1.0) - AFNetworking/Security (= 3.1.0) - AFNetworking/Serialization (= 3.1.0) - AFNetworking/UIKit (= 3.1.0) - AFNetworking/NSURLSession (3.1.0): - AFNetworking/Reachability - AFNetworking/Security - AFNetworking/Serialization - AFNetworking/Reachability (3.1.0) - AFNetworking/Security (3.1.0) - AFNetworking/Serialization (3.1.0) - AFNetworking/UIKit (3.1.0): - AFNetworking/NSURLSession DEPENDENCIES: - AFNetworking SPEC CHECKSUMS: AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67 COCOAPODS: 0.39.0
Podfile.lock文件最大得用處在於多人開發。對於沒有在Podfile中指定Pods依賴庫版本的寫法,如下:
pod 'Reachability'
當團隊中的某個人執行完pod install命令后,生成的Podfile.lock文件就記錄下了當時最新Pods依賴庫的版本,這時團隊中的其它人check下來這份包含 Podfile.lock文件的工程以后,再去執行pod install命令時,獲取下來的Pods依賴庫的版本就和最開始用戶獲取到的版本一致。如果沒有Podfile.lock文件,后續所有用戶執行pod install命令都會獲取最新版本的Reachability,這就有可能造成同一個團隊使用的依賴庫版本不一致,這對團隊協作來說絕對是個災難!
- 更改Podfile,使其指向最新版本的Reachability依賴庫;
- 執行pod update命令;
五、cocoapds版本更新
最近cocoapds發布了1.0.1的版本了:
sudo gem install cocoapods
但是回有報錯信息:
Fetching: xcodeproj-1.1.0.gem (100%)
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/xcodeproj
解決方法:
sudo gem install -n /usr/local/bin cocoapods --pre