Just My Life & My Work

專案越做越多、越做越大,肯定會使用到第三方套件,因為我們不想重新打造「輪子」,如此能夠加快開發速度,更能專注在專案核心需求上!

cocoapods13

於是我們想要有效率地使用第三方套件,就可以考慮使用CocoaPods這個工具。

話說前言

在開發iOS App時,我們從Xcode開始創建專案,使用Apple提供輔助開發的Framework套件外,總是會發現有許多功能開發不易,於是時常需要引用第三方開發的Open Source套件來輔助。 使用第三方Open Source套件要注意到授權的規範、版本的演進、目前有或沒有哪些功能、以及目前待辦事項。

遇到問題

當我們確定要引用某一第三方Library時,我們一直都是這麼做:選擇某一版本Library,直接下載回去本機端,放置在自己的專案中。這種方式的缺點是,與原來的版本控管失去連結,未來若想升級Library,每次都必須重新下載,如此才能完成更新。未來我們想要用某版本Library,還要花時間去搜尋。

cocoapods12

到GitHub搜尋並下載。

cocoapods11

放到本機端上專案資料夾中。

cocoapods10

拉至Xcode專案中使用。

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網站

http://cocoapods.org/

搜尋第三方套件是否在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’

cocoapods08

輸入所需資訊,注意格式要正確!

方法二:資料夾 路徑:專案母目錄

cocoapods07

資料夾中的Podfile檔。

cocoapods06

Xcode中專案原本的樣子。

安裝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來開發專案
cocoapods05

資料夾中多出來的檔案。

cocoapods04

Xcode中專案多出許多項目,記得不要去動。

更新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

cocoapods03

在Xcode中查看Podfile檔中的內容,確實出現更新的套件。

cocoapods02

Podfile.lock檔的內容,記錄著相依關係。

使用有用CocoaPods的開源

例:Canvas – Animate in Xcode without code

https://github.com/CanvasPod/Canvas
http://canvaspod.io/

說明:

The demo app in this project uses CocoaPods, please run pod install after you download this project, then open Canvas.xcworkspace.

cocoapods01

從GitHub下載,接著使用Cocoapods,到開啟專案編譯執行。

運作原理

研究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
end

post_install do |installer|
installer.pods_project.targets.each do |target|
puts #{target.name}
end
end

"

要加在哪呢?看這張圖試試看⋯⋯

Cocoapods 1.1.1 command.png

參考資料

Comments on: "[iOS] 使用 CocoaPods 管理第三方套件" (14)

  1. 現在要在 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

  2. 感謝這篇教學!讓我快速重新安裝cocoapod~ 😉

  3. […] 另外第三方套件,透過CocoaPods安裝,也會有警告訊息出現,目前遇到的是第三方套件Pod設定的deployment target低於當前Xcode的範圍。這沒什麼特別,只要手動更新即可解決。 […]

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲