使用Cocoapods創(chuàng)建私有podspec

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

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

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

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

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

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

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

7、更新維護(hù)podspec。

在這一系列的步驟中需要創(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)境其他方式暫不說明。

創(chuàng)建私有Spec Repo

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

因此我們需要創(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ù),我使用的是CODING ,當(dāng)然還有其他的可供選擇開源中國、Bitbucket以及CSDN

創(chuàng)建私有Spec Repo:

1、coding上創(chuàng)建Git倉庫:

2、Terminal中執(zhí)行如下命令

# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]

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

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

創(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è)工具,相關(guān)的文檔介紹是Using Pod Lib Create就拿我創(chuàng)建的LSJCommonUtils為例子具體講一下這里是如何操作的,先cd到要創(chuàng)建項(xiàng)目的目錄然后執(zhí)行

之后他會問你幾個(gè)問題, 問完他會自動執(zhí)行pod install命令創(chuàng)建項(xiàng)目并生成依賴。

接下來就是向Pod文件夾中添加庫文件和資源,并配置podspec文件,然后編輯demo工程,測試組件。

注:這里需要注意的是每當(dāng)你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新執(zhí)行一遍pod update命令。

測試無誤后需要將該項(xiàng)目添加并推送到遠(yuǎn)端倉庫,并編輯podspec文件。

通過Cocoapods創(chuàng)建出來的目錄本身就在本地的Git管理下,我們需要做的就是給它添加遠(yuǎn)端倉庫,同樣去GitHub或其他的Git服務(wù)提供商那里創(chuàng)建一個(gè)私有的倉庫,拿到SSH地址(PS:由于SSH地址需要公鑰,我這里并沒有仔細(xì)研究,所以這里我拿的是HTTPS地址),然后cd到LSJCommonUtils目錄,執(zhí)行以下操作:

cd /Users/lsj/Desktop/LSJCommonUtils

git add .

git commit -m "First Commit"

git remote add origin https://git.coding.net/Mikayla321/LSJCommonUtils.git

git push -f origin master

如下圖:


然后執(zhí)行 git push origin master ,發(fā)現(xiàn)報(bào)錯(cuò),! [rejected]

修改為如下,git push -f origin master,即可~

因?yàn)閜odspec文件中獲取Git版本控制的項(xiàng)目還需要tag號,所以我們要打上一個(gè)tag,

做完這些就可以開始編輯podspec文件了。我的podspec文件如下圖:

編輯完podspec文件后,需要驗(yàn)證一下這個(gè)文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不過xcode的WARNING是可以存在的,驗(yàn)證需要執(zhí)行一下命令

pod lib lint

當(dāng)你看到 LSJCommonUtils passed validation. 時(shí),說明驗(yàn)證通過了,不過這只是這個(gè)podspec文件是合格的,不一定說明這個(gè)Pod是可以用的,我們需要在本地做一下驗(yàn)證,這就是第四步的內(nèi)容了,第四步在具體說明。

創(chuàng)建podSpec文件

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

pod spec create PodTestLibrary git@coding.net:wtlucky/podTestLibrary.git

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

本地測試podSpec文件

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

然后執(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中。

向Spec Repo 提交podspec

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

pod repo push [私有Spec] [自己的podspec]

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

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

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

然而,發(fā)現(xiàn)有錯(cuò)誤:

解決辦法:http://blog.csdn.net/songchunmin_/article/details/51952910

原來是需要把緩存刪掉

使用命令:rm ~/Library/Caches/CocoaPods/search_index.json

清除后,再重新搜索,此時(shí)CocoaPod會重新創(chuàng)建搜索索引,成功后提示Creating search index for spec repo 'master'.. Done!

然后你就可以看到你自己制作的庫了:

使用制作好的Pod

在完成這一系列步驟之后,我們就可以在正式項(xiàng)目中使用這個(gè)私有的Pod了,只需要在項(xiàng)目的Podfile里增加以下一行代碼? ?pod 'LSJCommonUtils', '~> 0.1.0'? ?,執(zhí)行? pod?install

這個(gè)時(shí)候,得到提示

尼瑪?。。?!不科學(xué)啊,命名pod search有,為什么執(zhí)行的時(shí)候就沒有了????什么情況????

其實(shí)是這樣的,如果你不指定的話,pod install只會在master下搜索有沒有,而我們的spec文件在yohunlSpecs下面,當(dāng)然找不到了!

解決方式

在podfile文件最上方添加

默認(rèn)情況下,如果你不添加source的話,系統(tǒng)會默認(rèn)使用https://github.com/CocoaPods/Specs.git官方源,但是當(dāng)你添加了source后,系統(tǒng)就不再自動搜索官方源,所以這兩句都必須添加?。。?!

例如 當(dāng)你的文件中? 包含有 source 'https://git.coding.net/Mikayla321/LSJSpec.git',那么記得也要添加默認(rèn)的官方的 source 'https://github.com/CocoaPods/Specs.git' 。。要不然,則其它基于官方的都不能pod了。

好了,再次執(zhí)行 pod install,成功了。。。打開項(xiàng)目可以看到,我們自己的庫文件已經(jīng)出現(xiàn)在Pods子項(xiàng)目中的Pods子目錄下了。

更新維護(hù)podspec

待更新~

參考:http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容