iOS 開發(fā)之Cocoapods的使用及制作私有pods

一、安裝CocoaPods

第一步:升級ruby環(huán)境

```

sudo gem updte --system

```

更新Ruby環(huán)境

如果出現(xiàn)

更新ruby錯誤

然后就可以進(jìn)行Cocoapods的安裝了,

第二步:更換淘寶的RubyGems鏡像代替官方版本,


移除官方的鏡像


更換成淘寶鏡像


驗(yàn)證是否更換成功

第三步:安裝Cocoapods

如果你的是版本是10.11以下用這個命令

安裝Cocoapods

如果你的是版本是10.11以上用這個命令

安裝Cocoapods

然后執(zhí)行

將Cocoapods Specs repository復(fù)制到你電腦的~/.cocoapods目錄下

現(xiàn)在這個repo文件夾大概有750M,所以下載起來非常慢,如果你等的比較著急,想看一下當(dāng)前下載的大小

首先

進(jìn)入cocoa pods文件夾中

然后

用這個命令可以查看文件夾大小,我的已經(jīng)下載完成了,一共是750M

至此我們的Cocoapods就安裝完畢了。

二、如何使用我們的Cocoapods

第一步:創(chuàng)建一個Xcode工程并且進(jìn)入你的Xcode工程的目錄中

進(jìn)入工程對應(yīng)的文件夾

第二步:創(chuàng)建一個Podfile

執(zhí)行pod init創(chuàng)建一個Podfile

或者

直接用vim Podfile創(chuàng)建一個Podfile

它們之間的區(qū)別就是pod init生成的Podfile會默認(rèn)幫我們生成一些代碼,而vim Podfile的Podfile是空的。

我是用pod init生成的Podfile文件

生成的默認(rèn)代碼

然后我們就要編寫我們Podfile了,詳見此文第四部分-我的Podfile

編輯好的Podfile文件

第三步:執(zhí)行pod install.

初始化完成

然后打開MyApplication.xcworkspace就可以了。

三、pod update 和 pod install的區(qū)別

大部分人第一次初始化Podfile的時候會用pod install,之后就一直用pod update。

那么我們到底該怎么用他們呢,他們的之間的區(qū)別是什么呢?

pod install:每次如果下載新的pods的時候,都會把版本的信息寫進(jìn)podfile.lock中,podfile.lock會追蹤這些版本,并且鎖定這些版本。當(dāng)你用這個命令的時候,他只會下載Podfile.lock中不存在的三方庫。他也只會去下載Podfile.lock中記錄的版本,而不會是檢測一個更新的版本。如果沒有Podfile.lock中沒有指定版本,他會去搜索Podfile文件中對應(yīng)的版本,如果不指定版本,默認(rèn)為最新版本。

pod update [PODNAME]:會直接去找[PODNAME]最新的三方庫,而不會去管Podfile.lock中的版本,他會一直下載最新版本,如果你指定了版本,他會下載你指定版本中最新的版本。如果使用 pod update,那么他會將你 Podfile中的所有三方庫都更新成最新的版本。而且他會把Podfile.lock中的版本更改成對應(yīng)的版本。

四、我的Podfile

第一行:你的平臺+你支持的版本

? (platform :ios, '8.0')?

第二行:必須寫上你所連接的Xcode target,這個一般就是你App的工程的名稱

? (target 'MyApplication' do)

最后一行:end

(end)

第三到N行:在每一行添加一個你想要使用的三方庫

? (pod '$PODNAME')

我們有以下的幾種方式添加三方庫

? 一、添加開源的三方庫

? ?可以用pod search [PODNAME]命令搜索你想要的三方庫

搜索到想要的三方庫把對應(yīng)的pod [PODNAME]添加到Podfile中即可,如果用pod [PODNAME]/[Subspecs]那么只使用對應(yīng)的子三方庫

關(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

這個和我們平常的項(xiàng)目最大的區(qū)別就是有必須.podspec和LICENSE這兩個文件。

整體先說明一下創(chuàng)建一個私有的podspec包括如下那么幾個步驟:

1.創(chuàng)建并設(shè)置一個私有的Spec Repo。

2.創(chuàng)建Pod的所需要的項(xiàng)目工程文件,并且有可訪問的項(xiàng)目版本控制地址。

3.創(chuàng)建Pod所對應(yīng)的podspec文件。

4.本地測試配置好的podspec文件是否可用。

5.向私有的Spec Repo中提交podspec。

6.在個人項(xiàng)目中的Podfile中增加剛剛制作的好的Pod并使用。

7.更新維護(hù)pod spec。

在這一系列的步驟中需要創(chuàng)建兩個Git倉庫,分別是第一步和第二步(第二步不一定非要是Git倉庫,只要是可以獲取到相關(guān)代碼文件就可以,也可以是SVN的,也可以說zip包,區(qū)別就是在podspec中的source項(xiàng)填寫的內(nèi)容不同),并且第一步只是在初次創(chuàng)建私有podspec時才需要,之后在創(chuàng)建其他的只需要從第二步開始就可以。本文只介紹在Git環(huán)境下的操作,其他環(huán)境其他方式暫不說明。

1.創(chuàng)建私有Spec Repo

先來說第一步,什么是Spec Repo?它是所有的Pods的一個索引,就是一個容器,所有公開的Pods都在這個里面,它實(shí)際是一個Git倉庫remote端在GitHub上,但是當(dāng)你使用了Cocoapods后它會被clone到本地的~/.cocoapods/repos目錄下,可以進(jìn)入到這個目錄看到master文件夾就是這個官方的Spec Repo了。

官方的Spec Repo目錄

因此我們需要創(chuàng)建一個類似于master的私有Spec Repo,這里我們可以fork官方的Repo,也可以自己創(chuàng)建,個人建議不fork,因?yàn)槟阒皇窍胩砑幼约旱腜ods,沒有必要把現(xiàn)有的公開Pods都copy一份。所以創(chuàng)建一個 Git倉庫,這個倉庫你可以創(chuàng)建私有的也可以創(chuàng)建公開的,不過既然私有的Spec Repo,還是創(chuàng)建私有的倉庫吧,需要注意的就是如果項(xiàng)目中有其他同事共同開發(fā)的話,你還要給他這個Git倉庫的權(quán)限。因?yàn)镚itHub的私有倉庫是收費(fèi)的,我還不是GitHub的付費(fèi)用戶,所以我使用了其他Git服務(wù),我使用的是cocoachina,當(dāng)然還有其他的可供選擇開源中國、Bitbucket以及CSDN Code.

創(chuàng)建完成之后在Terminal中執(zhí)行如下命令

PrivateRepo是我們的私有庫名字,后面是對應(yīng)的git遠(yuǎn)程倉庫的網(wǎng)址

此時如果成功的話進(jìn)入到~/.cocoapods/repos目錄下就可以看到PrivateRepo這個目錄了。至此第一步創(chuàng)建私有Spec Repo完成。

添加成功對應(yīng)的文件夾

PS:如果有其他合作人員共同使用這個私有Spec Repo的話在他有對應(yīng)Git倉庫的權(quán)限的前提下執(zhí)行相同的命令添加這個Spec Repo即可。

2.創(chuàng)建Pod項(xiàng)目工程文件

這個第二步?jīng)]有什么好介紹的,如果是有現(xiàn)有的組件項(xiàng)目,并且在Git的版本管理下,那么這一步就算完成了,可以直接進(jìn)行下一步了。

如果你的組件還在你冗余龐大的項(xiàng)目中,需要拆分出來或者需要自己從零開始創(chuàng)建一個組件庫,那么我建議你使用Cocoapods提供的一個工具將第二步與第三步結(jié)合起來做。

現(xiàn)在來說一下這個工具,首先我們可以用pod lib create PrivateRepo,可以帶上--template-url=URL參數(shù)(URL表示git倉庫的地址),就拿我創(chuàng)建的podTestLibrary為例子具體講一下這里是如何操作的,先cd到要創(chuàng)建項(xiàng)目的目錄然后執(zhí)行

進(jìn)入你想創(chuàng)建的指定的文件中

他會問我們五個問題:

第一個問題:Objective-C 或者 Swift

第二個問題:Making a Demo Application,如果選是就會在你的Xcode工程中新建一個工程。

如果你想要一個demo或者你需要一個測試單元在你的工程中,你應(yīng)該選是

第三個問題:Choosing a Test Framework,你應(yīng)該測試你的工程,確保別人可用

如何選擇:如果你不能決定,就選Specta/Epecta

第四個問題:View-based Testing,會根據(jù)你選的測試自動生成一個

第五個問題: 你的前綴是什么。

這個里面要是不填的話默認(rèn)就是橫線的答案

當(dāng)你填完這些他會默認(rèn)調(diào)用pod install幫我們初始化好工程,并幫我們打開對應(yīng)的工程

自動幫我們執(zhí)行,不用我們進(jìn)行配置

然后可以看到PrivateRepo的目錄如下(如果沒有tree命令,可以用brew安裝一個):

PrivateRepo下面二層的目錄結(jié)構(gòu)

PrivateRepo下面二層的目錄結(jié)構(gòu)

這時打開PrivateRepo工程,會看到如下的文件目錄:

PrivateRepo對應(yīng)的文件目錄

1.Podspec metadata:可以讓你改變你的README和MyLibrary.podspec

2.Example for PrivateRepo:一個讓你編寫測試文件的文件夾,如果你沒有選擇測試文件夾,你就沒有這個目錄。

3.Tests:這里就是之前選擇的測試模塊

4.Development Pods:你實(shí)際寫代碼的地方,用你的代碼代替ReplaceMe.m文件

將文件或者代碼寫進(jìn)來

5.Frameworks:

如果你寫好了你的庫,想寫測試模塊或者測試demo的時候,首先進(jìn)入Example文件夾執(zhí)行pod update命令,打開工程你應(yīng)該包含 #import <PrivateRepo/XYZ.h>

然后包含對應(yīng)的頭文件就可以了

特別注意:當(dāng)你更改了了Pod/Classes或者Pod/Assets或者更新了你的pod spec,你應(yīng)該執(zhí)行pod install命令或者 pod update。

測試無誤可以將項(xiàng)目添加并推送到遠(yuǎn)程倉庫,配置你的podspec文件。

本地追蹤并且快照
關(guān)聯(lián)遠(yuǎn)程服務(wù)器
推送到遠(yuǎn)程master分支并打上tag

1、你應(yīng)該保存你的.podspec文件格式是正確的

我的PrivateRepo.podspec文件

用 pod lib lint 或者 pod spec lint可以檢查.podspec有沒有error或者warning,這兩個都是不能出現(xiàn)的,兩者的區(qū)別就是pod lib lint 不訪問網(wǎng)絡(luò),pod spec lint 會檢查倉庫和對應(yīng)的tag值。

2、如果你提交你的開源庫到trunk,你不可以用任何的error 或者 warnings,不過你的xcode中是可以用警告,這里不做解釋。

3、如果提交到你的私人的倉庫中,如果你本地倉庫已經(jīng)有了對應(yīng)的私有倉庫,用

MyLibrary表示的是本地的私有庫,MyLibrary表示對應(yīng)的.podspec文件

否則你要先建立一個私有倉庫.

3.創(chuàng)建podspec文件

如果已經(jīng)有了現(xiàn)成的項(xiàng)目,就需要給這個項(xiàng)目創(chuàng)建一個podspec文件,創(chuàng)建它需要執(zhí)行Cocoapods的另外一個命令,官方文檔在這里

PodTestLibrary為本地庫名,后面為對應(yīng)的git網(wǎng)址

執(zhí)行完之后,就創(chuàng)建了一個podspec文件,他其中會包含很多內(nèi)容,可以按照我之前介紹的進(jìn)行編輯,沒用的刪掉。編輯完成之后使用驗(yàn)證命令驗(yàn)證一下,驗(yàn)證無誤就可以進(jìn)入下一步了。

本地測試podspec文件

我們可以創(chuàng)建一個新的項(xiàng)目,在這個項(xiàng)目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件,看是否可用。 在Podfile中我們可以這樣編輯,有兩種方式

可以用指定:path或者用指定:podspec路徑這兩種方法

然后執(zhí)行pod install命令安裝依賴,打開項(xiàng)目工程,可以看到庫文件都被加載到Pods子項(xiàng)目中了,不過它們并沒有在Pods目錄下,而是跟測試項(xiàng)目一樣存在于Development Pods/PodTestLibrary中,這是因?yàn)槲覀兪窃诒镜販y試,而沒有把podspec文件添加到Spec Repo中的緣故。

在項(xiàng)目中編寫代碼,測試庫文件無誤后就可以開始下一步了,提交podspec到Spec Repo中。

4.向Spec Repo提交podspec

向Spec Repo提交podspec需要完成兩點(diǎn)一個是podspec必須通過驗(yàn)證無誤,在一個就是刪掉無用的注釋(這個不是必須的,為了規(guī)范還是刪掉吧)。 向我們的私有Spec Repo提交podspec只需要一個命令

完成之后這個組件庫就添加到我們的私有Spec Repo中了,可以進(jìn)入到~/.cocoapods/repos/PrivateRepo目錄下查看

再去看我們的PrivateRepo遠(yuǎn)端倉庫,也有了一次提交,這個podspec也已經(jīng)被Push上去了。

至此,我們的這個組件庫就已經(jīng)制作添加完成了,使用pod search命令就可以查到我們自己的庫了。

搜索之后的結(jié)果

這里說的是添加到私有的Repo,如果要添加到Cocoapods的官方庫了,可以使用trunk工具,具體可以查看官方文檔。

使用制作好的Pod

在完成這一系列步驟之后,我們就可以在正式項(xiàng)目中使用這個私有的Pod了,然后要指定我們的source,并且將我們私有的庫添加進(jìn)去即可:

指定source并且添加即可測試

然后執(zhí)行pod update,更新庫依賴,然后打開項(xiàng)目可以看到,我們自己的庫文件已經(jīng)出現(xiàn)在Pods子項(xiàng)目中的Pods子目錄下了,而不再是Development Pods。

這個依賴已經(jīng)被添加進(jìn)去了

更新維護(hù)podspec

最后再來說一下制作好的podspec文件后續(xù)的更新維護(hù)工作,比如如何添加新的版本,如何刪除Pod。

我已經(jīng)制作好了PodTestLibrary的0.0.1版本,現(xiàn)在我對他進(jìn)行升級工作,這次我添加了更多的模塊到PodTestLibrary之中,包括工具類,底層Model及UIKit擴(kuò)展等,這里又嘗試了一下subspec功能,給PodTestLibrary創(chuàng)建了多個子分支。

具體做法是先將源文件添加到Pod/Classes中,然后按照不同的模塊對文件目錄進(jìn)行整理,因?yàn)槲矣兴膫€模塊,所以在Pod/Classes下有創(chuàng)建了四個子目錄,完成之后繼續(xù)編輯之前的PodTestLibrary.podspec,這次增加了subspec特性

因?yàn)槲覀儎?chuàng)建了subspec所以項(xiàng)目整體的依賴dependency,源文件source_files,頭文件public_header_files,資源文件resource等都移動到了各自的subspec中,每個subspec之間也可以有相互的依賴關(guān)系,比如UIKitAddition就依賴于CommonTools。

編輯完成之后,在測試項(xiàng)目里pod update一下,幾個子項(xiàng)目都被加進(jìn)項(xiàng)目工程了,寫代碼驗(yàn)證無誤之后,就可以將這個工程push到遠(yuǎn)端倉庫,并打上新的tag->1.0.0。

最后再次使用pod lib lint驗(yàn)證編輯好的podsepc文件,沒有自身的WARNING或者ERROR之后,就可以再次提交到Spec Repo中了,命令跟之前是一樣的。

最后介紹一下如何刪除一個私有Spec Repo

PrivateRepo用你的私有庫代替

這樣這個Spec Repo就在本地刪除了,我們還可以通過

前面表示你私有庫的名字,后面表示 ? ? git對應(yīng)的遠(yuǎn)程倉庫的地址

再把它給加回來。

如果我們要刪除私有Spec Repo下的某一個podspec怎么操作呢,此時無需借助Cocoapods

cd到對應(yīng)的文件夾,刪掉對應(yīng)的庫就好了

參考文章:https://guides.cocoapods.org/

? ? ? ? ? ? ? ??http://www.cocoachina.com/ios/20150228/11206.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容