添加 pods 到 Xcode 工程
開始之前請先做兩件事情:
- 搜索 Specs 倉庫或者 cocoapods.org 確認想要安裝的庫存在;
- 電腦上已經安裝 CocoaPods。
安裝到現(xiàn)有工程
創(chuàng)建 Podfile 文件,添加依賴:
target 'MyApp' do
pod 'AFNetworking', '~> 3.0'
pod 'FBSDKCoreKit', '~> 4.9'
end
- 在工程目錄下執(zhí)行
pod install - 打開并編譯
MyApp.xcworkspace
創(chuàng)建一個新的工程并集成 CocoaPods
創(chuàng)建一個新的工程并集成 CocoaPods,步驟如下:
- 創(chuàng)建一個普通的 Xcode 工程;
- 打開終端,
cd到工程目錄; - 創(chuàng)建
Podfile文件,這可以通過執(zhí)行pod init來完成; - 打開
Podfile文件,第一行必須制定使用的平臺和版本;
platform :ios, ‘9.0’
- 你需要指定 Xcode 的 target。如果是 iOS App target 就是 工程的名稱。通過
target '$TARGET_NAME' do代表 target 的開始,end表示結束; - 在 target 的范圍內使用
pod '$PODNAME'添加 pod
target 'MyApp' do
pod 'ObjectiveSugar'
end
- 保存
Podfile; - 執(zhí)行
pod install; - 將工程通過
MyApp.xcworkspace打開.
集成已經存在的 workspace
集成 CocoaPods 到已經存在的 .workspace 工程,需要在 Podfile 中 ,targe 范圍外,添加一行:
workspace 'MyWorkspace'
pod install 和 pod update使用時機
很多人會疑惑 pod install 和 pod update 應該在什么時候用,經常是在本應該用 pod install 的時候使用了 pod update。
你可以在這里找到它們詳細的說明。
是否應該將 Pods 目錄加入版本控制
是否將 Pods 加入版本控制,需要看情況而定。官方建議把 Pods 目錄加入版本控制,不要把它加入 .gitignore,不過最終還是看你自己決定:
加入版本控制的好處
- 倉庫克隆完畢,可以立即編譯運行,即使沒有安裝 CocoaPods。不需要執(zhí)行
pod install,也不用網絡連接。 - pod 對應的庫總是可用的,即使 pod 的源碼無法獲取了。
- 能夠保證克隆下來的 pod 庫同安裝和編譯它的人版本一致。
忽略版本控制的好處
- git 倉庫會占用的空間少。
- 只要 Pod 源代碼還在,總是能夠通過
pod install重新安裝原先的版本。 - 可以避免在合并分支的時候出現(xiàn) Pod 源碼版本不一致的沖突。
不管是否將 pods 目錄加入版本庫, Podfile 和 Podfile.lock 是一定要加入版本控制的。
什么是 Podfile.lock ?
它會在第一次執(zhí)行 pod install 的時候生成,并且跟蹤已經安裝的 pod 的版本。例如,假設 Podfile 中有如下依賴:
pod 'RestKit'
執(zhí)行 pod install 會安裝當前最新的版本,并生成 Podfile.lock 文件記錄該版本號(比如說:RestKit 0.10.3)。之后在其它機器上,即使 RestKit有了新的版本,這個工程目錄下執(zhí)行 pod install 安裝的仍舊是 0.10.3 版本。除非修改 Podfile 中指定的版本或者執(zhí)行 pod update 否者 Podfile.lock 會保證 pods 的版本不變。
這里有一個 Google 介紹它是如何工作的視頻 CocoaPods and Lockfiles (Route 85).
背后的實現(xiàn)
在 Xcode 中,可以直接查看 CocoaPods 的ruby 源代碼。
- 創(chuàng)建或者更新 workspace。
- 添加你的工程到 workspace。
- 添加 CocoaPods 的靜態(tài)庫到 workspace。
- 添加 App-Pods.framework 到 targets => build phases => link with libraries。
- 添加 CocoaPods 的 Xcode 配置文件到工程。
- 根據(jù) CocoaPods 來修改 app target 配置
- 添加一個 build phase 腳本來將 pods 中的資源文件拷貝到 app bundle 中 ,在 build phase 的最后面添加
Copy Pods Resource:- Shell: /bin/sh
- ${SRCROOT}/Pods/PodsResources.sh
步驟3中如果工程中原本有靜態(tài)庫就直接跳過。