專案越做越多、越做越大,肯定會使用到第三方套件,因為我們不想重新打造「輪子」,如此能夠加快開發速度,更能專注在專案核心需求上!
於是我們想要有效率地使用第三方套件,就可以考慮使用CocoaPods這個工具。
話說前言
在開發iOS App時,我們從Xcode開始創建專案,使用Apple提供輔助開發的Framework套件外,總是會發現有許多功能開發不易,於是時常需要引用第三方開發的Open Source套件來輔助。 使用第三方Open Source套件要注意到授權的規範、版本的演進、目前有或沒有哪些功能、以及目前待辦事項。
遇到問題
當我們確定要引用某一第三方Library時,我們一直都是這麼做:選擇某一版本Library,直接下載回去本機端,放置在自己的專案中。這種方式的缺點是,與原來的版本控管失去連結,未來若想升級Library,每次都必須重新下載,如此才能完成更新。未來我們想要用某版本Library,還要花時間去搜尋。
CocoaPods起源
每種語言發展到某一階段,就會出現相應的依賴管理工具,或者是中央程式碼倉庫。比如:
- Java: maven, Ivy
- Ruby: gems
- Python: pip, easy_install
- Nodejs: npm
隨著iOS開發者的增多,業界也出現了為iOS開發提供依賴管理的工具,這個工具就是:CocoaPods。
CocoaPods是一個負責管理iOS專案中第三方開源程式碼的工具。CocoaPods專案的源碼在Github上管理。該專案開始於2011/08/12,經過兩年半的發展,現在提交數已經超過3000次,並且活躍地持續更新中。
開發iOS專案難免會需要使用第三方開源庫,CocoaPods的發展使得我們可以節省設置和更新第三方開源庫的時間。
CocoaPods網站
如何使用
- 開啓終端機
- 輸入指令
–$ [sudo] gem install cocoapods (安裝)
–$ pod setup (設定)
- 接著就能使用
–$ pod help (幫助)
搜尋指令 [pod search]
- $ pod search AFNetworking (搜尋AFNetworking)
-> AFNetworking (2.2.1) A delightful iOS and OS X networking framework. pod ‘AFNetworking‘, ‘~> 2.2.1’
–Homepage: https://github.com/AFNetworking/AFNetworking
–Source: https://github.com/AFNetworking/AFNetworking.git
–Versions: 2.2.1, 2.2.0, 2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1, 2.0.0, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0RC3, 1.0RC2, 1.0RC1, 1.0.1, 1.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0, 0.5.1, 0.10.1, 0.10.0
建立指令檔 (Podfile)
方法一:終端機
–$ vi Podfile
platform :ios, ‘6.0’ pod ‘AFNetworking’
方法二:資料夾 路徑:專案母目錄
安裝Library
- $ pod install (安裝Library)
–Analyzing dependencies
–Downloading dependencies
–Installing AFNetworking (2.2.1)
–Generating Pods project
–Integrating client project
–[!] From now on use `HappyTest.xcworkspace`.
- 之後必須開啟HappyTest.xcworkspace來開發專案
更新Library
- $ pod outdated (檢查Library是否過期)
–No updates are available.
- $ pod update (更新Library)
–Analyzing dependencies
–Downloading dependencies
–Using AFNetworking (2.2.1)
–Generating Pods project
–Integrating client project
增加Library & 改版Librabry
- $ vi Podfile (使用VIM編輯名為Podfile的檔案)
–platform :ios, ‘6.0’
–pod ‘AFNetworking’, ‘~>2.1.0’
–pod ‘MBProgressHUD’
- $ pod update (更新Library)
–Analyzing dependencies
–Downloading dependencies
–Installing AFNetworking (2.1.0)
–Using MBProgressHUD (0.8)
–Generating Pods project
–Integrating client project
使用有用CocoaPods的開源
例:Canvas – Animate in Xcode without code
說明:
The demo app in this project uses CocoaPods, please run pod install after you download this project, then open Canvas.xcworkspace.
運作原理
研究CocoaPods的原理,它是將所有的依賴庫都放到一個名為Pods資料夾中,然後讓專案依賴Pods資料夾,如此,源碼管理工作都從專案移到了Pods資料夾中。技術細節有:
- Pods資料夾最終會編譯成一個名為libPods.a的文件,專案只需要依賴這個.a檔即可。
- 對於資源文件,CocoaPods提供了一個名為Pods-resources.sh的bash腳本,該腳本在每次專案編譯的時候都會執行,將第三方庫的各種資源文件複製到目標目錄中。
- CocoaPods通過一個名為Pods.xcconfig檔來在編譯時設置所有的依賴和參數。
時常使用CocoaPods,你就會發現它相當方便呢!
投影片
2016/10/22更新:
不小心把Cocoapods更新到1.1.1,結果原本pod update指令就報錯,原來現在要加入Target的名字(例如:HappyTest),指令如下:
"
target :HappyTest do
endpost_install do |installer|
installer.pods_project.targets.each do |target|
puts #{target.name}
end
end
"
要加在哪呢?看這張圖試試看⋯⋯
Comments on: "[iOS] 使用 CocoaPods 管理第三方套件" (14)
現在要在 Macbook Pro M1 Pro 安裝,需要進行以下兩個指令:
sudo arch -x86_64 gem install ffi
arch -x86_64 pod install
.
https://stackoverflow.com/questions/70287369/dont-forget-to-include-the-crash-report-log-file-under-diagnosticreports-direct
讚讚
感謝這篇教學!讓我快速重新安裝cocoapod~ 😉
讚讚
[…] 另外第三方套件,透過CocoaPods安裝,也會有警告訊息出現,目前遇到的是第三方套件Pod設定的deployment target低於當前Xcode的範圍。這沒什麼特別,只要手動更新即可解決。 […]
讚讚