整體先說明一下創(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/