有的時候CocoaPods的spec版本過舊,pull request沒有及時merge,致使咱們沒法利用CocoaPods使用較新的代碼版本;ios
有的時候咱們的一些代碼不是開源的,或者暫時不想放到Github上。咱們更想使用CocoaPods引用本地的代碼;git
這裏咱們以PlayHavenSDK爲例介紹一下。咱們在CocoaPods / Spec這個repository裏面能夠看到,PlayHavenSDK的版本是1.11.0。而playhaven / sdk-ios裏面的tag,已經有了1.12.1這個版本。CocoaPods的Spec repository已經落後了兩個版本。這時咱們想使用最新版,須要的就是一個更新的spec。github
咱們回到Xcode project目錄中,打開Podfile,添加pod 'PlayHavenSDK', :podspec => '~/Desktop/PlayHavenSDK/PlayHavenSDK.podspec'
,接着運行pod update
便可。這裏咱們注意到s.source這一行配置,指向了playhaven/sdk-ios.git倉庫的1.12.1這個tag,表示這個spec將使用這個tag的代碼。咱們將它保存到本地的一個目錄中,如~/Desktop/PlayHavenSDK/PlayHavenSDK.podspec
。
網站
PS: 固然這個podspec也能夠不放在本地,好比放在gist上。spa
這種狀況稍微複雜一步,除了指定podspec,還須要準備一個本地要使用的git repository。咱們以Chartboost爲例來進行說明。code
首先咱們新建一個名爲~/Desktop/ChartboostSDK/
的目錄,而後執行git init
初始化這個git repository。ip
接着咱們去Chartboost官方網站下載最先新的SDK。將它放進這個目錄中,而後執行git add . && git commit -m"Add new SDK"
。get
這樣咱們這個目錄已經成爲一個git repository,裏面是最新的Chartboost SDK。it
這時咱們仍然須要一個podspec文件,來講明咱們從哪一個倉庫來獲取代碼:io
除了兩個.h,一個.a,還有一個podspec文件。咱們運行ls -lh | awk '{print $9}'
,ChartboostSDK目錄的結構顯示以下:
接着咱們回到Xcode proj所在的文件夾中,編輯Podfile,添加pod 'ChartboostSDK', :local => '~/Desktop/ChartboostSDK'
。這裏的local代表從本地的git倉庫裏獲取代碼。
最後咱們運行pod update
,大功告成。
上面的兩種狀況,簡單來講:
須要使用最新的開源代碼/庫,但沒最新的spec
須要使用私有代碼/庫,須要對應的私有的spec
對於第一種狀況,建議你們能夠給CocoaPods / Specs提交一個pull request。
使用CocoaPods只須要知道兩件事情:
podspec:一個pod的配置是什麼,pod的代碼放在哪裏
Podfile:項目依賴哪一個pod,以何種方式依賴,它的podspec放在哪裏
這裏podspec和git repository都很是靈活,能夠放在本地,也能夠放到github/gist上。代碼倉庫甚至能夠不使用git而直接使用一個zip壓縮包。
使用CocoaPods能夠把多們從繁重的配置和代碼管理中解脫出來,並且能夠少犯錯誤。好比Deployment Target設置爲5.0,但App中須要使用AdSupport.framework,若是忘記設置爲optional則全部5.x的設備運行時都會crash。對於這種狀況CocoaPods在spec提供了weak_frameworks
的配置選項。同時CocoaPods可以保證庫的依賴關係,而不會出現幾個項目依賴版本不一致的狀況。