一、安裝CocoaPods
第一步:升級(jí)ruby環(huán)境
```
sudo gem updte --system
```
如果出現(xiàn)
然后就可以進(jìn)行Cocoapods的安裝了鞋吉,
第二步:更換淘寶的RubyGems鏡像代替官方版本,
第三步:安裝Cocoapods
如果你的是版本是10.11以下用這個(gè)命令
如果你的是版本是10.11以上用這個(gè)命令
然后執(zhí)行
現(xiàn)在這個(gè)repo文件夾大概有750M律杠,所以下載起來非常慢莽鸭,如果你等的比較著急,想看一下當(dāng)前下載的大小
首先
然后
至此我們的Cocoapods就安裝完畢了末融。
二钧惧、如何使用我們的Cocoapods
第一步:創(chuàng)建一個(gè)Xcode工程并且進(jìn)入你的Xcode工程的目錄中
第二步:創(chuàng)建一個(gè)Podfile
或者
它們之間的區(qū)別就是pod init生成的Podfile會(huì)默認(rèn)幫我們生成一些代碼,而vim Podfile的Podfile是空的勾习。
我是用pod init生成的Podfile文件
然后我們就要編寫我們Podfile了浓瞪,詳見此文第四部分-我的Podfile
第三步:執(zhí)行pod install.
然后打開MyApplication.xcworkspace就可以了。
三巧婶、pod update 和 pod install的區(qū)別
大部分人第一次初始化Podfile的時(shí)候會(huì)用pod install乾颁,之后就一直用pod update涂乌。
那么我們到底該怎么用他們呢,他們的之間的區(qū)別是什么呢英岭?
pod install:每次如果下載新的pods的時(shí)候湾盒,都會(huì)把版本的信息寫進(jìn)podfile.lock中,podfile.lock會(huì)追蹤這些版本诅妹,并且鎖定這些版本历涝。當(dāng)你用這個(gè)命令的時(shí)候,他只會(huì)下載Podfile.lock中不存在的三方庫漾唉。他也只會(huì)去下載Podfile.lock中記錄的版本荧库,而不會(huì)是檢測(cè)一個(gè)更新的版本。如果沒有Podfile.lock中沒有指定版本赵刑,他會(huì)去搜索Podfile文件中對(duì)應(yīng)的版本分衫,如果不指定版本,默認(rèn)為最新版本般此。
pod update [PODNAME]:會(huì)直接去找[PODNAME]最新的三方庫蚪战,而不會(huì)去管Podfile.lock中的版本,他會(huì)一直下載最新版本铐懊,如果你指定了版本邀桑,他會(huì)下載你指定版本中最新的版本。如果使用 pod update科乎,那么他會(huì)將你 Podfile中的所有三方庫都更新成最新的版本壁畸。而且他會(huì)把Podfile.lock中的版本更改成對(duì)應(yīng)的版本。
四茅茂、我的Podfile
第一行:你的平臺(tái)+你支持的版本
? (platform :ios, '8.0')?
第二行:必須寫上你所連接的Xcode target捏萍,這個(gè)一般就是你App的工程的名稱
? (target 'MyApplication' do)
最后一行:end
(end)
第三到N行:在每一行添加一個(gè)你想要使用的三方庫
? (pod '$PODNAME')
我們有以下的幾種方式添加三方庫
? 一、添加開源的三方庫
? ?可以用pod search [PODNAME]命令搜索你想要的三方庫
關(guān)于版本的問題
'> 0.1' :高于0.1的版本
'>=0.1':0.1版本或者更高的版本
'<0.1':小于0.1的版本
'<=0.1':0.1版本或者更低的版本
'~> 0.1.2':版本0.1.2~版本0.2空闲,不包括0.2
'~> 0.1':版本0.1~版本1.0令杈,不包括版本1.0
二、從本地添加
? 1.從本地文件夾添加
? ?pod ’Alamofire’, :path => ‘~/Documents/Alamofire'
? 2.從主分支添加
? ?pod ‘Alamofire’, :git => ’https://github.com/Alamofire/Alamofire.git'
? 3.從次分支添加
? ?pod'Alamofire',:git=>'https://github.com/Alamofire/Alamofire.git',:branch=>'dev'
? 4.用指定的tag
? pod'Alamofire',:git=>'https://github.com/Alamofire/Alamofire.git',:tag=>'3.1.1'
? 5.用指定的commit
? pod'Alamofire',:git=>'https://github.com/Alamofire/Alamofire.git',:commit=>'0f506b1c45'
五碴倾、創(chuàng)建私有podspec
這個(gè)和我們平常的項(xiàng)目最大的區(qū)別就是有必須.podspec和LICENSE這兩個(gè)文件逗噩。
整體先說明一下創(chuàng)建一個(gè)私有的podspec包括如下那么幾個(gè)步驟:
1.創(chuàng)建并設(shè)置一個(gè)私有的Spec Repo。
2.創(chuàng)建Pod的所需要的項(xiàng)目工程文件跌榔,并且有可訪問的項(xiàng)目版本控制地址异雁。
3.創(chuàng)建Pod所對(duì)應(yīng)的podspec文件。
4.本地測(cè)試配置好的podspec文件是否可用矫户。
5.向私有的Spec Repo中提交podspec片迅。
6.在個(gè)人項(xiàng)目中的Podfile中增加剛剛制作的好的Pod并使用残邀。
7.更新維護(hù)pod spec皆辽。
在這一系列的步驟中需要?jiǎng)?chuàng)建兩個(gè)Git倉庫柑蛇,分別是第一步和第二步(第二步不一定非要是Git倉庫,只要是可以獲取到相關(guān)代碼文件就可以驱闷,也可以是SVN的耻台,也可以說zip包,區(qū)別就是在podspec中的source項(xiàng)填寫的內(nèi)容不同)空另,并且第一步只是在初次創(chuàng)建私有podspec時(shí)才需要盆耽,之后在創(chuàng)建其他的只需要從第二步開始就可以。本文只介紹在Git環(huán)境下的操作扼菠,其他環(huán)境其他方式暫不說明摄杂。
1.創(chuàng)建私有Spec Repo
先來說第一步,什么是Spec Repo循榆?它是所有的Pods的一個(gè)索引析恢,就是一個(gè)容器,所有公開的Pods都在這個(gè)里面秧饮,它實(shí)際是一個(gè)Git倉庫remote端在GitHub上映挂,但是當(dāng)你使用了Cocoapods后它會(huì)被clone到本地的~/.cocoapods/repos目錄下,可以進(jìn)入到這個(gè)目錄看到master文件夾就是這個(gè)官方的Spec Repo了盗尸。
因此我們需要?jiǎng)?chuàng)建一個(gè)類似于master的私有Spec Repo柑船,這里我們可以fork官方的Repo,也可以自己創(chuàng)建泼各,個(gè)人建議不fork鞍时,因?yàn)槟阒皇窍胩砑幼约旱腜ods,沒有必要把現(xiàn)有的公開Pods都copy一份扣蜻。所以創(chuàng)建一個(gè) Git倉庫寸癌,這個(gè)倉庫你可以創(chuàng)建私有的也可以創(chuàng)建公開的,不過既然私有的Spec Repo弱贼,還是創(chuàng)建私有的倉庫吧蒸苇,需要注意的就是如果項(xiàng)目中有其他同事共同開發(fā)的話,你還要給他這個(gè)Git倉庫的權(quán)限吮旅。因?yàn)镚itHub的私有倉庫是收費(fèi)的溪烤,我還不是GitHub的付費(fèi)用戶,所以我使用了其他Git服務(wù)庇勃,我使用的是cocoachina檬嘀,當(dāng)然還有其他的可供選擇開源中國、Bitbucket以及CSDN Code.
創(chuàng)建完成之后在Terminal中執(zhí)行如下命令
此時(shí)如果成功的話進(jìn)入到~/.cocoapods/repos目錄下就可以看到PrivateRepo這個(gè)目錄了鸳兽。至此第一步創(chuàng)建私有Spec Repo完成。
PS:如果有其他合作人員共同使用這個(gè)私有Spec Repo的話在他有對(duì)應(yīng)Git倉庫的權(quán)限的前提下執(zhí)行相同的命令添加這個(gè)Spec Repo即可罕拂。
2.創(chuàng)建Pod項(xiàng)目工程文件
這個(gè)第二步?jīng)]有什么好介紹的揍异,如果是有現(xiàn)有的組件項(xiàng)目全陨,并且在Git的版本管理下,那么這一步就算完成了衷掷,可以直接進(jìn)行下一步了辱姨。
如果你的組件還在你冗余龐大的項(xiàng)目中,需要拆分出來或者需要自己從零開始創(chuàng)建一個(gè)組件庫戚嗅,那么我建議你使用Cocoapods提供的一個(gè)工具將第二步與第三步結(jié)合起來做雨涛。
現(xiàn)在來說一下這個(gè)工具,首先我們可以用pod lib create PrivateRepo懦胞,可以帶上--template-url=URL參數(shù)(URL表示git倉庫的地址),就拿我創(chuàng)建的podTestLibrary為例子具體講一下這里是如何操作的替久,先cd到要?jiǎng)?chuàng)建項(xiàng)目的目錄然后執(zhí)行
他會(huì)問我們五個(gè)問題:
第一個(gè)問題:Objective-C 或者 Swift
第二個(gè)問題:Making a Demo Application,如果選是就會(huì)在你的Xcode工程中新建一個(gè)工程躏尉。
如果你想要一個(gè)demo或者你需要一個(gè)測(cè)試單元在你的工程中侣肄,你應(yīng)該選是
第三個(gè)問題:Choosing a Test Framework,你應(yīng)該測(cè)試你的工程醇份,確保別人可用
如何選擇:如果你不能決定稼锅,就選Specta/Epecta
第四個(gè)問題:View-based Testing,會(huì)根據(jù)你選的測(cè)試自動(dòng)生成一個(gè)
第五個(gè)問題: 你的前綴是什么僚纷。
當(dāng)你填完這些他會(huì)默認(rèn)調(diào)用pod install幫我們初始化好工程矩距,并幫我們打開對(duì)應(yīng)的工程
然后可以看到PrivateRepo的目錄如下(如果沒有tree命令怖竭,可以用brew安裝一個(gè)):
PrivateRepo下面二層的目錄結(jié)構(gòu)
這時(shí)打開PrivateRepo工程锥债,會(huì)看到如下的文件目錄:
1.Podspec metadata:可以讓你改變你的README和MyLibrary.podspec
2.Example for PrivateRepo:一個(gè)讓你編寫測(cè)試文件的文件夾,如果你沒有選擇測(cè)試文件夾痊臭,你就沒有這個(gè)目錄哮肚。
3.Tests:這里就是之前選擇的測(cè)試模塊
4.Development Pods:你實(shí)際寫代碼的地方,用你的代碼代替ReplaceMe.m文件
5.Frameworks:
如果你寫好了你的庫广匙,想寫測(cè)試模塊或者測(cè)試demo的時(shí)候允趟,首先進(jìn)入Example文件夾執(zhí)行pod update命令,打開工程你應(yīng)該包含 #import <PrivateRepo/XYZ.h>
特別注意:當(dāng)你更改了了Pod/Classes或者Pod/Assets或者更新了你的pod spec鸦致,你應(yīng)該執(zhí)行pod install命令或者 pod update潮剪。
測(cè)試無誤可以將項(xiàng)目添加并推送到遠(yuǎn)程倉庫,配置你的podspec文件分唾。
1抗碰、你應(yīng)該保存你的.podspec文件格式是正確的
用 pod lib lint 或者 pod spec lint可以檢查.podspec有沒有error或者warning,這兩個(gè)都是不能出現(xiàn)的绽乔,兩者的區(qū)別就是pod lib lint 不訪問網(wǎng)絡(luò)弧蝇,pod spec lint 會(huì)檢查倉庫和對(duì)應(yīng)的tag值。
2、如果你提交你的開源庫到trunk看疗,你不可以用任何的error 或者 warnings沙峻,不過你的xcode中是可以用警告,這里不做解釋鹃觉。
3专酗、如果提交到你的私人的倉庫中睹逃,如果你本地倉庫已經(jīng)有了對(duì)應(yīng)的私有倉庫盗扇,用
否則你要先建立一個(gè)私有倉庫.
3.創(chuàng)建podspec文件
如果已經(jīng)有了現(xiàn)成的項(xiàng)目沉填,就需要給這個(gè)項(xiàng)目創(chuàng)建一個(gè)podspec文件疗隶,創(chuàng)建它需要執(zhí)行Cocoapods的另外一個(gè)命令,官方文檔在這里
執(zhí)行完之后斑鼻,就創(chuàng)建了一個(gè)podspec文件,他其中會(huì)包含很多內(nèi)容猎荠,可以按照我之前介紹的進(jìn)行編輯,沒用的刪掉。編輯完成之后使用驗(yàn)證命令驗(yàn)證一下,驗(yàn)證無誤就可以進(jìn)入下一步了蚁孔。
本地測(cè)試podspec文件
我們可以創(chuàng)建一個(gè)新的項(xiàng)目肆汹,在這個(gè)項(xiàng)目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件,看是否可用输虱。 在Podfile中我們可以這樣編輯些楣,有兩種方式
然后執(zhí)行pod install命令安裝依賴,打開項(xiàng)目工程宪睹,可以看到庫文件都被加載到Pods子項(xiàng)目中了愁茁,不過它們并沒有在Pods目錄下,而是跟測(cè)試項(xiàng)目一樣存在于Development Pods/PodTestLibrary中亭病,這是因?yàn)槲覀兪窃诒镜販y(cè)試鹅很,而沒有把podspec文件添加到Spec Repo中的緣故。
在項(xiàng)目中編寫代碼罪帖,測(cè)試庫文件無誤后就可以開始下一步了道宅,提交podspec到Spec Repo中。
4.向Spec Repo提交podspec
向Spec Repo提交podspec需要完成兩點(diǎn)一個(gè)是podspec必須通過驗(yàn)證無誤胸蛛,在一個(gè)就是刪掉無用的注釋(這個(gè)不是必須的污茵,為了規(guī)范還是刪掉吧)。 向我們的私有Spec Repo提交podspec只需要一個(gè)命令
完成之后這個(gè)組件庫就添加到我們的私有Spec Repo中了葬项,可以進(jìn)入到~/.cocoapods/repos/PrivateRepo目錄下查看
再去看我們的PrivateRepo遠(yuǎn)端倉庫泞当,也有了一次提交,這個(gè)podspec也已經(jīng)被Push上去了民珍。
至此襟士,我們的這個(gè)組件庫就已經(jīng)制作添加完成了盗飒,使用pod search命令就可以查到我們自己的庫了。
這里說的是添加到私有的Repo陋桂,如果要添加到Cocoapods的官方庫了逆趣,可以使用trunk工具,具體可以查看官方文檔嗜历。
使用制作好的Pod
在完成這一系列步驟之后宣渗,我們就可以在正式項(xiàng)目中使用這個(gè)私有的Pod了,然后要指定我們的source梨州,并且將我們私有的庫添加進(jìn)去即可:
然后執(zhí)行pod update痕囱,更新庫依賴,然后打開項(xiàng)目可以看到暴匠,我們自己的庫文件已經(jīng)出現(xiàn)在Pods子項(xiàng)目中的Pods子目錄下了鞍恢,而不再是Development Pods。
更新維護(hù)podspec
最后再來說一下制作好的podspec文件后續(xù)的更新維護(hù)工作每窖,比如如何添加新的版本帮掉,如何刪除Pod。
我已經(jīng)制作好了PodTestLibrary的0.0.1版本窒典,現(xiàn)在我對(duì)他進(jìn)行升級(jí)工作蟆炊,這次我添加了更多的模塊到PodTestLibrary之中,包括工具類崇败,底層Model及UIKit擴(kuò)展等盅称,這里又嘗試了一下subspec功能,給PodTestLibrary創(chuàng)建了多個(gè)子分支后室。
具體做法是先將源文件添加到Pod/Classes中缩膝,然后按照不同的模塊對(duì)文件目錄進(jìn)行整理,因?yàn)槲矣兴膫€(gè)模塊岸霹,所以在Pod/Classes下有創(chuàng)建了四個(gè)子目錄疾层,完成之后繼續(xù)編輯之前的PodTestLibrary.podspec,這次增加了subspec特性
因?yàn)槲覀儎?chuàng)建了subspec所以項(xiàng)目整體的依賴dependency贡避,源文件source_files痛黎,頭文件public_header_files,資源文件resource等都移動(dòng)到了各自的subspec中刮吧,每個(gè)subspec之間也可以有相互的依賴關(guān)系湖饱,比如UIKitAddition就依賴于CommonTools。
編輯完成之后杀捻,在測(cè)試項(xiàng)目里pod update一下井厌,幾個(gè)子項(xiàng)目都被加進(jìn)項(xiàng)目工程了,寫代碼驗(yàn)證無誤之后,就可以將這個(gè)工程push到遠(yuǎn)端倉庫仅仆,并打上新的tag->1.0.0器赞。
最后再次使用pod lib lint驗(yàn)證編輯好的podsepc文件,沒有自身的WARNING或者ERROR之后墓拜,就可以再次提交到Spec Repo中了港柜,命令跟之前是一樣的。
最后介紹一下如何刪除一個(gè)私有Spec Repo
這樣這個(gè)Spec Repo就在本地刪除了咳榜,我們還可以通過
再把它給加回來。
如果我們要?jiǎng)h除私有Spec Repo下的某一個(gè)podspec怎么操作呢贿衍,此時(shí)無需借助Cocoapods
參考文章:https://guides.cocoapods.org/
? ? ? ? ? ? ? ??http://www.cocoachina.com/ios/20150228/11206.html