開場
對于這個東西估計絕大多數(shù)的童鞋應(yīng)該都不陌生了,不過這里還是稍微對大家嘮嘮嗑,可能對于那些沒用過的童鞋也有可能是一種幫助呢,我們要一視同仁對吧。 對于Cocoapods是個什么東西估計大家多少聽過了,可能有些童鞋沒有用過,但是多少也聽過了。如果沒聽過的童鞋就聽我嘮一句嗑:
Cocoapods是一個框架依賴管理的一個管理工具,主要是用來管理框架一些開源庫在項目中的引用。簡而言之就是用來管理你的項目中對開源框架或自己公司子模塊的依賴。
當(dāng)然作為使用者來說,入門教程簡單的要死。但是作為一個開發(fā)人員不能只滿足于當(dāng)前的步伐,而應(yīng)該不斷進(jìn)取,要做到能想Cocoapods提交項目,并且在自己項目中熟練應(yīng)用該工具的程度。特別是如果一個大的公司來說的話,就有可能進(jìn)行模塊化開發(fā)了。對于國內(nèi)很多公司還是在用OC來說的話,Cocoapods應(yīng)該還是一個不錯的模塊管理的工具。
當(dāng)然第一篇文章來點簡單的,主要是正對使用者來進(jìn)行講解的。
安裝
當(dāng)然,剛開始說這說那也沒什么卵用,不如直接開始。要使用這個工具,首先當(dāng)然應(yīng)該是安裝這個工具啦。其實安裝這個就一句話的事情:
$ sudo gem install cocoapods
但是在Mac OS X EL Capitan(10.11)中就會出現(xiàn)Operation not permitted - /usr/bin/pod
的錯誤,當(dāng)我遇到這個錯誤的時候我整個人是拒絕的,可是遇到問題還是得解決嘛。后來發(fā)現(xiàn)了兩個解決方案。
方案一
$ mkdir -p $HOME/Software/ruby
$ export GEM_HOME=$HOME/Software/ruby
$ gem install cocoapods
[...]
1 gem installed cocoapods
$ export PATH=$PATH:$HOME/Sofware/ruby/bin
****
方案一中主要是將GEM的安裝路徑進(jìn)行修改,將GEM的默認(rèn)安裝路徑修改成了$HOME/Software/ruby這個目錄,然后再進(jìn)行安裝,最后將安裝路徑添加到PATH下,這樣可以不用帶完整的路徑進(jìn)行運(yùn)行命令。
方案二
$ gem install cocoapods -n ~/Software/ruby
方案二中使用了gem的自帶參數(shù)-n—–即指明安裝的路徑,如果要使用這種的話,也需要將該路徑加入PATH下才可以不用帶完整的路徑進(jìn)行運(yùn)行命令。
個人建議是使用第一種,將GEM的安裝路徑進(jìn)行修改。這樣不需要每次都用-n命令進(jìn)行指定路徑。
就此,關(guān)于安裝Cocoapods暫時應(yīng)該就沒有什么問題了。如果還有什么問題的童鞋可以留言。
初次使用
關(guān)于使用我這里主要分為兩個部分,一個部分是關(guān)于命令的層次來說的,一部分是關(guān)于Podfile的層次來說的。當(dāng)然對于簡單的使用用起來也非常簡單。不過剛開始就來一個簡單的吧。
就比如我們最常用的AFNetworking
、SDwebImage
以及iOS-Echarts
來說的話,只需在項目名.xcodeproj
的目錄下創(chuàng)建一個Podfile
的文件,然后打開文件,填入一下內(nèi)容:
platform:ios,'7.1'
pod 'SDWebImage', '~>3.7'
pod 'AFNetworking'
pod 'iOS-Echarts'
然后保存,并且打開一個命令行,跳轉(zhuǎn)到Podfile
的目錄直接運(yùn)行pod install
即可。 當(dāng)然,你會看到你的目錄下回多了目錄Pods
, 文件Podfile.lock
以及文件項目名.xcworkspace
。當(dāng)然以后你打開項目就再也不是xcodeproj
的文件了,而是wxcworkspcace
的文件。然后你打開項目就會看到除了你的項目外,下面多了一個Pods
的一個項目。就此,對于你項目需要依賴的AFNetworking
、SDwebImage
的依賴了。非常簡單對吧? 當(dāng)然如果你只是想簡單的使用Cocoapods
,估計到這一步就完全夠了。
對于一個進(jìn)步青年或者是對于一個使用復(fù)雜的場景來說的話,對于Podfile
的深入了解還是有一定幫助的。
深入至Podfile
比如在你使用AFNetworking
是在是2.6.3的版本情況下封好API,但是在你Podfile
中對于AFNetworking
的定義還是為pod 'AFNetworking'
,突然有一天AFNetworking
升級為3.0+了。那時候估計你的心里就是:當(dāng)時我就懵逼了。因為在3.0中移除了AFHTTPRequestOperationManager
等一些類,一旦你重新執(zhí)行的pod update
的話,你的程序估計就再也怎么編譯不過了。如果你不熟悉Cocoapods
的話,估計你就真的的懵逼了。
在第一次pod install
后,會生成Podfile.lock
文件,這個文件會把所有第三方庫的當(dāng)前版本給lock住,意思就是只要不修改Podfile
,那所有第三方庫的版本都會停留在當(dāng)前版本。不管某個庫是否升級,自己或是同伴執(zhí)行pod install
都只會下載被lock住的版本。使用pod update
才會更新到最新版。
不過有了這篇教程的一些講解,媽媽再也不用擔(dān)心你的作業(yè)了。 這部分主要講解一下Podfile
的一些參數(shù)和使用的講解,對于一些使用場景會非常有幫助的。
pod
首先先來講講最核心的pod
關(guān)鍵字吧。關(guān)于pod的使用在上面可以看得出來是pod '框架名' 參數(shù)
。 當(dāng)然對于前面兩個pod '框架名'是固定的,沒上面好說,參數(shù)的話,這里主要講參數(shù)。 參數(shù)一: 版本號 從上面可以看得出SDWebImage就接了版本號。不過版本號可以是大于、小于、等于等。當(dāng)然具體的可以是'> 3.7', '>= 3.7', '< 3.7', '3.7'以及'~> 3.7'。關(guān)于普通的就沒什么好說了,最后一個~>
指的是正對最后一位來說。如使用'~> 3.7.4',意味著'>= 3.7.4'并且'< 3.8.0'的意思。 參數(shù)二:地址Cocoapods
可以指定某一個git的目錄或者是本地的目錄。有的時候我們希望一直用某一個版本最新的版本,即使沒有打版本的話,我們可以直接后面接上:git => 'https://github.com/gowalla/AFNetworking.git'
。
當(dāng)然除了這種情況外,還有可能是如果是我們自己開發(fā)的私有庫,并且在開發(fā)階段的情況下,可能就希望開發(fā)模式進(jìn)行引用,則可以使用path參數(shù)::path => '~/Documents/AFNetworking'
參數(shù)三:tag、branche、commit 有的時候我們希望引用有一個tag,branch或者是comit的內(nèi)容的話可以使用這個參數(shù),分別用 :branch => 'branch名'
、:tag => 'tag名'
、:commit => '
提交號'。 參數(shù)四:inhibit*all*warnings!
對于博主來說,一個項目中很多warnings
是非常難以忍受的。不知道小伙伴們會不會有這種感覺,自然這個參數(shù)是用來避免那些第三方框架中帶來的warnings
。博主很喜歡他。
platform
這個參數(shù)是只依賴的庫希望在哪個平臺被編譯。 一句話帶過吧,直接使用platform :ios, '7.0'
。說希望采用iOS7.0的進(jìn)行編譯。之前有個同事沒有指定只寫了platform
后面都沒有了,然后一直怎么編譯都編譯不通過。當(dāng)時我不知道,一直以為他在某個環(huán)節(jié)出錯了。后來才知道,如果在platform
后面沒有跟東西的話,默認(rèn)是在iOS4.3
,OSX 10.6
,tvOS 9.0
以及watchOS 2.0的情況下編譯的。很多庫都是從6.0或者7.0才開始支持的,自然編譯不通過。所以小伙伴們記得要注意這點,后面要跟上具體的platform的參數(shù)。
target
這個是指定具體的配置是適配在哪個target
,這里的target
值得就是Xcode
中的target
。如果對于一些項目中你的不同target
引用的框架不同的話,可以采用這個進(jìn)行區(qū)分。
target "ShowsApp" do
pod 'ShowsKit'
target "ShowsTV" do
pod "ShowTVAuth"
end
end
use_frameworks!
這個指明編譯成動態(tài)庫,而不是靜態(tài)庫,特別是在使用Swift庫的過程中,特別需要使用這句。不過他會把所有項目的編譯動態(tài)庫,這一點有點不好。不過在使用Swift庫的過程中就沒辦法了。
source
這個參數(shù)是指Cocoapods
從哪些倉庫(Spec)
中獲得框架的源代碼,如果在結(jié)合使用開源庫以及自己私有庫的情況下,這個參數(shù)還是非常有意義的。博主之前在用到自己私有庫的情況下就不懂這點,最后查了好久資料才知道的。只需要在Podfile
文件開頭列出你需要引用庫的所有倉庫地址即可。
source 'https://github.com/artsy/Specs.git'
source 'https://192.168.0.90:8888/MySepcs/Specs.git'
好了對于Podfile
常用幾個稍微拿出來說了一下,如果還有更深入不懂的情況下,可以查看Cocoapods Guide。 最后給一個官方的Demo吧.
# open source
source 'https://github.com/CocoaPods/Specs.git'
# my work
source 'https://github.com/Artsy/Specs.git'
target 'App' do
pod 'Artsy+UIColors'
pod 'Artsy+UIButtons'
pod 'FLKAutoLayout'
pod 'ISO8601DateFormatter', '0.7'
pod 'AFNetworking', '~> 2.0'
target 'AppTests' do
pod 'FBSnapshotTestCase'
pod 'Quick'
pod 'Nimble'
end
end
命令行pod install 和 pod update
在使用·Cocoapods·的過程中,我們可能要更新或者是安裝一個新的第三方框架。自然這里就避免不了要用這兩個命令了。對于這兩個命令來說,一個是在有新的第三方框架引入是運(yùn)行,另一個是純粹為了更新本地的第三框架。 對于二者的命令來說其參數(shù)都是大同小異的,這里大概講解一下。
參數(shù)--no-repo-update
這個參數(shù)應(yīng)該是大家最常用的參數(shù)之一,其主要的作用是用于在執(zhí)行pod install
和pod update
兩條命令是而執(zhí)行的pod repo update
的操作。而pod repo update
則是跟新本地已有的第三框框架。對于大多數(shù)情況下,我們只希望跟新當(dāng)前項目的,并且這個操作執(zhí)行的時間都是相對比較長,所以在執(zhí)行這兩條命令是,大多數(shù)人都添加了這個參數(shù)。
參數(shù)--verbose 和 --silent
這兩個參數(shù)是用來控制pod
命令的,而有些人不希望看到輸出的情況下可以選擇--silent
。而對于在執(zhí)行這兩條命令的情況下如果出錯了,則可能添加--verbose
的參數(shù)能看到具體的出錯信息。--verbose
則是用來輸出這兩條命令執(zhí)行過程中所包含的所有信息。對于大多數(shù)的Cocoapods
的命令行來說都帶有著兩個參數(shù)。
其他的細(xì)節(jié)就不具體說了,大家可以通過help
命令來進(jìn)行查看詳情。
結(jié)論
簡單來說要使用Cocoapods
只需通過三個步驟:安裝、寫Podfile
和pod install
命令即可。
到此關(guān)于Cocoapods
作為使用者來說的大體內(nèi)容就差不多這么多了。關(guān)于細(xì)節(jié)方面大家可以通過Cocoapods官網(wǎng)來進(jìn)行查閱。在下一篇中,我將對Cocoapods
作為一個貢獻(xiàn)者或者制作一個私有庫進(jìn)行講解。而可能在第三篇中會對在Cocoapods
在項目進(jìn)行模塊化管理過程中的使用進(jìn)行講解,其中應(yīng)該包含了在一個項目做同時使用私有庫以及開源庫之間引用以及如何進(jìn)行管理各個模塊進(jìn)行大致描述。
tips
使用Cocoapods
時卡在Setting up CocoaPods master repo
所有項目的Podspec文件都托管在https://github.com/CocoaPods/Specs,,第一次執(zhí)行pod setup
時, CocoaPods
會將這些podspec
索引文件更新到本地的~/.cocoapods
目錄下,這個索引文件比較大,所以第一次更新時非常慢.友好人士在國內(nèi)的服務(wù)器建立了Cocoapods
索引庫的鏡像,所以執(zhí)行索引跟新操作時候會快很多.具體操作方法如下:
$ pod repo remove master
$ pod repo add master [https://gitcafe.com/akuandev/Specs.git](https://gitcafe.com/akuandev/Specs.git)
$ pod repo update
這是使用gitcafe上的鏡像,將以上代碼中的 https://gitcafe.com/akuandev/Specs.git 替換成 http://git.oschina.net/akuandev/Specs.git 即可使用oschina上的鏡像。