iOS 開發 — 套件管理 ( 2 )
CocoaPods 進階
前言
經過之前文章的介紹,相信大家對 CocoaPods 已經有了初步的認識,然而光是這樣是不夠的,要使用第三方程式庫還有許多要注意的地方!舉例來說,如果要和他人一起開發專案,最常碰到有些人沒辦法順利建置專案的問題,在這之中有一大部份便是因為各自的套件版本不同。
如果沒有多做設定,只要第三方程式庫有新版本出現,那麼每個人在不同時間建置專案,便有可能會使用到不一樣版本的套件,如此就算是一樣的程式碼,也有可能會建置失敗。
CocoaPods 提供了許多功能能夠幫助我們鎖定好需要的套件版本,當第三方程式庫更新時,我們便可以不再擔心會不會因此而造成影響。以下便來介紹一些 CocoaPods 使用上的技巧吧!
選擇版本
pod 'Alamofire', '~> 4.4'
在上篇文章中曾經安裝過 Alamofire 這個套件,而現在我們便是要來解釋後面 '~> 4.4'
的意義。
在開發時,如果確定要使用特定版本的第三方程式庫時,可以使用 '4.4'
,表示已經確定只使用這個版本不會再有變動了。然而,第三方程式庫也有會出錯的時候,通常便會發佈 '4.5'
或 '4.4.2'
等新版本號的程式碼來修補之前版本的錯誤。因此,只鎖定一種版本,可能會讓之後開發時遭遇到一些因為第三方程式庫出錯而產生的問題。為了保持控制套件的活性,在設定套件版本時便有了以下一些方法:
'> 0.1'
包含任何高於0.1
的版本'>= 0.1'
包含版本0.1
以及任何高於0.1
的版本'< 0.1'
包含任何小於0.1
的版本'<= 0.1'
包含版本0.1
以及任何小於0.1
的版本
除此之外, CocoaPods 也提供了另一種操作版本的方法:
'~> 0.1.2'
包含版本0.1.2
以及以上至不包含0.2
的各個版本'~> 0.1'
包含版本0.1
以及以上至不包含1.0
的各個版本'~> 0'
包含版本0
以上的各個版本
有了這些方法後,我們便可以輕易調整我們所想要的套件版本。而 CocoaPods 會將該專案套件版本的歷史紀錄存至 Podfile.lock
中,如此,就算我們更動過 Podfile
而忘記當初設定的版本為何,也可以透過 Podfile.lock
來確認目前使用的套件版本。
Install vs. Update
在套件管理上, CocoaPods 提供了兩種從終端安裝、更新套件的方法:
~/CocoaPodsTestProj$ pod install
下達這個指令, CocoaPods 會去對比Podfile
以及Podfile.lock
兩個檔案,如果套件在Podfile.lock
中紀錄的版本符合目前Podfile
所期待的版本需求,那麼 CocoaPods 便不會去更動該套件(就算該版本不是最新的,只要符合版本需求也不會更新歐!)。 CocoaPods 只會去安裝Podfile.lock
紀錄中與Podfile
需求版本不相符的套件。~/CocoaPodsTestProj$ pod update [PODNAME]
下達這個指令, CocoaPods 會去對比Podfile
以及Podfile.lock
兩個檔案,如果[PODNAME]
這個套件還沒安裝過,便會安裝符合Podfile
版本條件的最新版本。同樣地,如果[PODNAME]
這個套件已經安裝過了, 則會更新成符合Podfile
版本條件的最新版本。此外,也可以不輸入[PODNAME]
, CocoaPods 便會對所有在Podfile
內的套件進行更新。
這兩種方法,有各自使用的時機,如果只是想安裝新套件不想動到已經安裝好的套件,那麼使用 $pod install
就好。如果想要更新全部的套件,那麼就可以使用 $pod update
來一次完成所有套件的更新。
套件設定
在使用套件的時候,有時候除了版本控制外,也有可能會有其他的需求,像是說如果想要使用本地端的 Pods 該怎麼辦?又或是說如果我們想使用一個第三方程式庫的專案分支並不是 master 時該怎麼辦?為了解決這些困擾, CocoaPods 也提供了一些方法讓人使用。
本機 Pods
如果今天想要將本地的套件加入至開發專案中,我們可以運用 :path
這個參數,其後輸入本機套件的路徑,便可以將套件引用至專案之中。
pod 'Alamofire', :path => '~/Documents/Alamofire'
網路 Pods
有時候第三方套件的程式碼不符合自身的需求,需要經過一些修改才能更流暢的開發,這個時候便可能會去「 fork 」第三方程式碼。在這種情形下,需要 git 第三方程式碼的網址便和原本不同,而 CocoaPods 提供了以下的功能。
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'
在 :git
這個參數後我們可以輸入對應 git 的網址,如此便可以使用自己「 fork 」過來修改過的第三方程式庫。此外, CocoaPods 也提供了 :branch
這個參數,當我們不想使用 master 這個分支的程式碼,便可以調用這個參數,使用別的分支的程式碼。
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'dev'
這樣我們便可以用 dev
這個分支的套件了。除此之外,也有 :tag
、 :commit
這兩種參數可以應用,使用者可以輸入相對應的 tag 或 commit 來拿到特定版本的套件。
# git使用tag的範例
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1' # git使用commit的範例
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45'
後記
CocoaPods 差不多就介紹到這,在一般開發上應該已經能輕鬆使用它了。如果想要了解該怎麼自己製作第三方套件,就麻煩大家自己去看 CocoaPods 的官方文件囉 : )