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

參考文章:

CocoaPods私有庫配置筆記

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

cocoapods應(yīng)用第二部分-私有庫相關(guān)


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

  1. 創(chuàng)建并設(shè)置一個(gè)私有的Spec Repo。
  2. 創(chuàng)建Pod的所需要的項(xiàng)目工程文件,并配置對(duì)應(yīng)的podspec文件。
  3. 本地測(cè)試配置好的podspec文件是否可用。
  4. 向私有的Spec Repo中提交podspec。
  5. 在個(gè)人項(xiàng)目中的Podfile中增加剛剛制作的好的Pod并使用。
  6. 更新維護(hù)podspec。

在這一系列的步驟中需要?jiǎng)?chuàng)建兩個(gè)Git倉庫,分別是第一步和第二步,并且第一步只是在初次創(chuàng)建私有podspec時(shí)才需要,之后在創(chuàng)建其他的只需要從第二步開始就可以。


創(chuàng)建私有Spec Repo

創(chuàng)建一個(gè) Git倉庫,這個(gè)倉庫你可以創(chuàng)建私有的也可以創(chuàng)建公開的,不過既然私有的Spec Repo,還是創(chuàng)建私有的倉庫吧,需要注意的就是如果項(xiàng)目中有其他同事共同開發(fā)的話,你還要給他這個(gè)Git倉庫的權(quán)限。

創(chuàng)建完成之后在Terminal中執(zhí)行如下命令
pod repo add YJKSpecs http://gitlab.ihaozhuo.com/iOS/YJKSpecs.git
執(zhí)行結(jié)果如下圖:

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

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

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


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

使用Cocoapods提供的一個(gè)工具將第二步與第三步結(jié)合起來做。相關(guān)的文檔介紹是Using Pod Lib Create 就拿我創(chuàng)建的podTestLibrary為例子具體講一下這里是如何操作的,先cd到要?jiǎng)?chuàng)建項(xiàng)目的目錄然后執(zhí)行
pod lib create podTestLibrary
執(zhí)行結(jié)果如下圖:

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

其中會(huì)有幾個(gè)問題,看著大概意思選擇一個(gè)選項(xiàng)就好。

生成的項(xiàng)目結(jié)構(gòu)如圖:

項(xiàng)目結(jié)構(gòu).png

接下來就是向Pod文件夾中添加庫文件和資源,并配置podspec文件,我把一個(gè)測(cè)試的文件放入上圖標(biāo)注的文件夾下,然后進(jìn)入Example文件夾執(zhí)行pod update命令。

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

不執(zhí)行pod update命令,podTestLibrary 項(xiàng)目中直接導(dǎo)入私有庫是無法識(shí)別的。

無法識(shí)別01.png

新添加的文件在沒有執(zhí)行pod update命令時(shí),podTestLibrary 項(xiàng)目中的文件并不能識(shí)別。

無法識(shí)別02.png

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

通過Cocoapods創(chuàng)建出來的目錄本身就在本地的Git管理下,我們需要做的就是給它添加遠(yuǎn)端倉庫,然后cdPodTestLibrary目錄

$ git add .
$ git commit -s -m "Initial Commit of Library"
$ git remote add origin git@gitlab.ihaozhuo.com:iOS/YJKTest.git #添加遠(yuǎn)端倉庫
$ git push origin master #提交到遠(yuǎn)端倉庫

因?yàn)?code>podspec文件中獲取Git版本控制的項(xiàng)目還需要tag號(hào),所以我們要打上一個(gè)tag
$ git tag -m "first release" 0.1.0
$ git push --tags #推送tag到遠(yuǎn)端倉庫

編輯podspec文件,下面我貼上我的podspec文件,并在后面以注釋的形式說明每個(gè)字段的含義,沒有涉及到的字段可以去官方文檔查閱

Pod::Spec.new do |s|
s.name = 'podTestLibrary'??#名稱
s.version = '0.1.0'??#版本號(hào)
s.summary = 'A short description of podTestLibrary.'??#簡短介紹,下面是詳細(xì)介紹

# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!

s.description = <<-DESC
TODO: Add long description of the pod here.
DESC

s.homepage = 'https://github.com/王佳佳/podTestLibrary'?? #主頁
s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'??#截圖
s.license = { :type => 'MIT', :file => 'LICENSE' }??#開源協(xié)議
s.author = { '王佳佳' => 'wangjiajia@hz-health.cn' }??#作者信息
s.source = { :git => 'http://gitlab.ihaozhuo.com/iOS/YJKTest.git', :tag => "0.1.0" }??#項(xiàng)目地址,這里不支持ssh的地址,驗(yàn)證不通過,只支持HTTP和HTTPS,最好使用HTTPS
s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'??#多媒體介紹地址
s.ios.deployment_target = '8.0'??#支持的平臺(tái)及版本
s.source_files = 'podTestLibrary/Classes/**/*' ??#代碼源文件地址,**/*表示Classes目錄及其子目錄下所有文件,如果有多個(gè)目錄下則用逗號(hào)分開,如果需要在項(xiàng)目中分組顯示,這里也要做相應(yīng)的設(shè)置

# s.resource_bundles = {
'podTestLibrary' => ['podTestLibrary/Assets/.png']
} #資源文件地址
# s.public_header_files = 'Pod/Classes/**/
.h'??#公開頭文件地址
#s.frameworks = 'UIKit', 'MapKit'??#所需的framework,多個(gè)用逗號(hào)隔開
#s.dependency 'AFNetworking', '~> 2.3'??#依賴關(guān)系,該項(xiàng)目所依賴的其他庫,如果有多個(gè)需要填寫多個(gè)s.dependency
end

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

驗(yàn)證命令.png

存在警告可以通過下面命令忽略
pod lib lint --allow-warnings
當(dāng)看到驗(yàn)證成功則說明podspec文件是合格的,這一步就算完成啦。

驗(yàn)證通過.png

本地測(cè)試podspec文件

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

pod ‘podTestLibrary’, :path => ‘/Users/wangjiajia/Desktop/podTestLibrary’ # 指定路徑
pod ‘podTestLibrary’, :podspec => ‘/Users/wangjiajia/Desktop/podTestLibrary/podTestLibrary.podspec’ # 指定podspec文件

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

效果圖如下:

本地測(cè)試.png

向Spec Repo提交podspec

向Spec Repo提交podspec需要確定的是podspec必須通過驗(yàn)證無誤(若存在警告錯(cuò)誤同樣可用 --allow-warnings來忽略)。 向我們的私有Spec Repo提交podspec只需要一個(gè)命令

$ pod repo push YJKSpecs podTestLibrary.podspec #前面是本地Repo名字 后面是podspec名字

如圖:

向Spec Repo提交podspec .png

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

如圖:

本地私有庫.png

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

看下圖:

搜索自己的控件.png

這里可以發(fā)現(xiàn)找到的這個(gè)并不是我們的控件,由此猜測(cè)應(yīng)該是在[master repo]里存在和我們命名一樣的鬼東西,這里我們先不管啦,直接看下一步,試試我們的控件可不可以從遠(yuǎn)端拉取下來。


使用制作好的Pod

在Podfile里添加相應(yīng)的配置信息,

如圖所示:

Podfile配置.png

在podfile文件最上方添加
source 'https://github.com/CocoaPods/Specs.git' #官方倉庫的地址
source 'http://gitlab.ihaozhuo.com/iOS/YJKSpecs.git' #我們自己的私有spec倉庫的地址

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

執(zhí)行 pod install,結(jié)果如下圖:

導(dǎo)入控件01.png

果然出問題啦,找到人家的控件啦,這時(shí)候咋辦呢,試一試將倉庫地址的順序變一下看看啥效果吧。

更改查找?guī)斓捻樞?png

再次執(zhí)行 pod install,結(jié)果如下圖:

導(dǎo)入控件02.png

果然是可以成功,這個(gè)問題就教育們要注意兩點(diǎn)

1、書寫的代碼最好存在相應(yīng)的標(biāo)志信息,防止與他人的代碼產(chǎn)生雷同。
2、在存在私有庫的時(shí)候,最好把自己私有庫的地址放在上邊,這樣在產(chǎn)生相同的控件時(shí)也可以準(zhǔn)確找到自己想要的那個(gè)。

當(dāng)然在存在雷同的時(shí)候最好對(duì)類名進(jìn)行修改。


更新維護(hù)podspec

更新維護(hù)幾乎就是重復(fù)上面的步驟,
1、在第二部生成的項(xiàng)目文件中,修改你的控件的代碼,修改完成在之后經(jīng)過 pod update 之后就在項(xiàng)目進(jìn)行測(cè)試,測(cè)試完成及可提交遠(yuǎn)端,并打上相應(yīng)標(biāo)簽。
2、修改podspec,并進(jìn)行本地測(cè)試,測(cè)試完成,將podspec推向遠(yuǎn)端就好。

在公用控件更新維護(hù)的時(shí)候最好能夠多個(gè)版本兼容,因?yàn)橐粋€(gè)基礎(chǔ)控件的改動(dòng),可能會(huì)涉及到項(xiàng)目中多處地方的,一個(gè)API的定義變更,可能會(huì)影響到項(xiàng)目中大量的業(yè)務(wù)代碼變動(dòng)。
還有就是在Podfile建議要帶上版本號(hào),以免他人的變動(dòng)給你帶來大量的任務(wù)量。

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

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