cocoaPods管理本地庫


爲何要進行本地的包管理

  • 有的時候CocoaPods的spec版本過舊,pull request沒有及時merge,致使咱們沒法利用CocoaPods使用較新的代碼版本;ios

  • 有的時候咱們的一些代碼不是開源的,或者暫時不想放到Github上。咱們更想使用CocoaPods引用本地的代碼;git

使用CocoaPods裏沒有的第三方庫新版本

這裏咱們以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

使用CocoaPods管理本地代碼

這種狀況稍微複雜一步,除了指定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,大功告成。

CocoaPods小結

上面的兩種狀況,簡單來講:

  • 須要使用最新的開源代碼/庫,但沒最新的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可以保證庫的依賴關係,而不會出現幾個項目依賴版本不一致的狀況。

相關文章
相關標籤/搜索