參考文章:
CocoaPods私有庫配置筆記
使用Cocoapods創(chuàng)建私有podspec
cocoapods應(yīng)用第二部分-私有庫相關(guān)
整體先說明一下創(chuàng)建一個私有的podspec包括如下那么幾個步驟:
- 創(chuàng)建并設(shè)置一個私有的Spec Repo。
- 創(chuàng)建Pod的所需要的項目工程文件沟娱,并配置對應(yīng)的podspec文件。
- 本地測試配置好的podspec文件是否可用柄冲。
- 向私有的Spec Repo中提交podspec朱嘴。
- 在個人項目中的Podfile中增加剛剛制作的好的Pod并使用糕珊。
- 更新維護(hù)podspec。
在這一系列的步驟中需要創(chuàng)建兩個Git倉庫假消,分別是第一步和第二步,并且第一步只是在初次創(chuàng)建私有podspec時才需要岭接,之后在創(chuàng)建其他的只需要從第二步開始就可以富拗。
創(chuàng)建私有Spec Repo
創(chuàng)建一個 Git倉庫,這個倉庫你可以創(chuàng)建私有的也可以創(chuàng)建公開的鸣戴,不過既然私有的Spec Repo啃沪,還是創(chuàng)建私有的倉庫吧,需要注意的就是如果項目中有其他同事共同開發(fā)的話窄锅,你還要給他這個Git倉庫的權(quán)限创千。
創(chuàng)建完成之后在Terminal中執(zhí)行如下命令
pod repo add YJKSpecs http://gitlab.ihaozhuo.com/iOS/YJKSpecs.git
執(zhí)行結(jié)果如下圖:
此時如果成功的話進(jìn)入到~/.cocoapods/repos目錄下就可以看到Y(jié)JKSpecs這個目錄了。至此第一步創(chuàng)建私有Spec Repo完成入偷。
PS:如果有其他合作人員共同使用這個私有Spec Repo的話在他有對應(yīng)Git倉庫的權(quán)限的前提下執(zhí)行相同的命令添加這個Spec Repo即可追驴。
創(chuàng)建Pod項目工程文件
使用Cocoapods
提供的一個工具將第二步與第三步結(jié)合起來做。相關(guān)的文檔介紹是Using Pod Lib Create 就拿我創(chuàng)建的podTestLibrary
為例子具體講一下這里是如何操作的疏之,先cd
到要創(chuàng)建項目的目錄然后執(zhí)行
pod lib create podTestLibrary
執(zhí)行結(jié)果如下圖:
其中會有幾個問題殿雪,看著大概意思選擇一個選項就好。
生成的項目結(jié)構(gòu)如圖:
接下來就是向Pod文件夾中添加庫文件和資源锋爪,并配置podspec文件丙曙,我把一個測試的文件放入上圖標(biāo)注的文件夾下,然后進(jìn)入Example文件夾執(zhí)行pod update命令其骄。
注:這里需要注意的是每當(dāng)你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新執(zhí)行一遍pod update命令亏镰。
不執(zhí)行pod update命令,podTestLibrary 項目中直接導(dǎo)入私有庫是無法識別的年栓。
新添加的文件在沒有執(zhí)行pod update命令時拆挥,podTestLibrary 項目中的文件并不能識別。
測試無誤后需要將該項目添加并推送到遠(yuǎn)端倉庫某抓,并編輯podspec
文件纸兔。
通過Cocoapods
創(chuàng)建出來的目錄本身就在本地的Git
管理下,我們需要做的就是給它添加遠(yuǎn)端倉庫否副,然后cd
到PodTestLibrary
目錄
$ 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)端倉庫
因為podspec
文件中獲取Git
版本控制的項目還需要tag
號汉矿,所以我們要打上一個tag
$ git tag -m "first release" 0.1.0
$ git push --tags #推送tag到遠(yuǎn)端倉庫
編輯podspec
文件,下面我貼上我的podspec
文件,并在后面以注釋的形式說明每個字段的含義备禀,沒有涉及到的字段可以去官方文檔查閱
Pod::Spec.new do |s|
s.name = 'podTestLibrary'??#名稱
s.version = '0.1.0'??#版本號
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.
DESCs.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" }??#項目地址奈揍,這里不支持ssh的地址,驗證不通過赋续,只支持HTTP和HTTPS男翰,最好使用HTTPS
s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'??#多媒體介紹地址
s.ios.deployment_target = '8.0'??#支持的平臺及版本
s.source_files = 'podTestLibrary/Classes/**/*' ??#代碼源文件地址,**/*表示Classes目錄及其子目錄下所有文件纽乱,如果有多個目錄下則用逗號分開蛾绎,如果需要在項目中分組顯示,這里也要做相應(yīng)的設(shè)置# s.resource_bundles = {
'podTestLibrary' => ['podTestLibrary/Assets/.png']
} #資源文件地址
# s.public_header_files = 'Pod/Classes/**/.h'??#公開頭文件地址
#s.frameworks = 'UIKit', 'MapKit'??#所需的framework鸦列,多個用逗號隔開
#s.dependency 'AFNetworking', '~> 2.3'??#依賴關(guān)系租冠,該項目所依賴的其他庫,如果有多個需要填寫多個s.dependency
end
編輯完podspec文件后薯嗤,需要驗證一下這個文件是否可用顽爹,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中骆姐,不過xcode的WARNING是可以存在的镜粤,驗證需要執(zhí)行一下命令
pod lib lint
存在警告可以通過下面命令忽略
pod lib lint --allow-warnings
當(dāng)看到驗證成功則說明podspec文件是合格的,這一步就算完成啦玻褪。
本地測試podspec文件
我們可以創(chuà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命令安裝依賴稚矿,打開項目工程庸诱,可以看到庫文件都被加載到Pods子項目中了,不過它們并沒有在Pods目錄下晤揣,而是跟測試項目一樣存在于Development Pods/podTestLibrary中桥爽,這是因為我們是在本地測試,而沒有把podspec文件添加到Spec Repo中的緣故昧识。
在項目中編寫代碼钠四,測試庫文件無誤后就可以開始下一步了,提交podspec到Spec Repo中跪楞。
效果圖如下:
向Spec Repo提交podspec
向Spec Repo提交podspec需要確定的是podspec必須通過驗證無誤(若存在警告錯誤同樣可用 --allow-warnings來忽略)缀去。 向我們的私有Spec Repo提交podspec只需要一個命令
$ pod repo push YJKSpecs podTestLibrary.podspec #前面是本地Repo名字 后面是podspec名字
如圖:
完成之后這個組件庫就添加到我們的私有Spec Repo中了,可以進(jìn)入到~/.cocoapods/repos/YJKSpecs目錄下查看
如圖:
至此甸祭,我們的這個組件庫就已經(jīng)制作添加完成了缕碎,使用pod search命令就可以查到我們自己的庫了
看下圖:
這里可以發(fā)現(xiàn)找到的這個并不是我們的控件,由此猜測應(yīng)該是在[master repo]里存在和我們命名一樣的鬼東西池户,這里我們先不管啦咏雌,直接看下一步凡怎,試試我們的控件可不可以從遠(yuǎn)端拉取下來。
使用制作好的Pod
在Podfile里添加相應(yīng)的配置信息赊抖,
如圖所示:
在podfile文件最上方添加
source 'https://github.com/CocoaPods/Specs.git' #官方倉庫的地址
source 'http://gitlab.ihaozhuo.com/iOS/YJKSpecs.git' #我們自己的私有spec倉庫的地址
默認(rèn)情況下,如果你不添加source的話,系統(tǒng)會默認(rèn)使用 https://github.com/CocoaPods/Specs.git官方源,但是當(dāng)你添加了source后,系統(tǒng)就不再自動搜索 官方源,所以這兩句都必須添加!!!!!
執(zhí)行 pod install,結(jié)果如下圖:
果然出問題啦统倒,找到人家的控件啦,這時候咋辦呢氛雪,試一試將倉庫地址的順序變一下看看啥效果吧房匆。
再次執(zhí)行 pod install,結(jié)果如下圖:
果然是可以成功,這個問題就教育們要注意兩點
1注暗、書寫的代碼最好存在相應(yīng)的標(biāo)志信息坛缕,防止與他人的代碼產(chǎn)生雷同。
2捆昏、在存在私有庫的時候赚楚,最好把自己私有庫的地址放在上邊,這樣在產(chǎn)生相同的控件時也可以準(zhǔn)確找到自己想要的那個骗卜。
當(dāng)然在存在雷同的時候最好對類名進(jìn)行修改宠页。
更新維護(hù)podspec
更新維護(hù)幾乎就是重復(fù)上面的步驟,
1寇仓、在第二部生成的項目文件中举户,修改你的控件的代碼,修改完成在之后經(jīng)過 pod update 之后就在項目進(jìn)行測試遍烦,測試完成及可提交遠(yuǎn)端俭嘁,并打上相應(yīng)標(biāo)簽。
2服猪、修改podspec供填,并進(jìn)行本地測試,測試完成罢猪,將podspec推向遠(yuǎn)端就好近她。
在公用控件更新維護(hù)的時候最好能夠多個版本兼容,因為一個基礎(chǔ)控件的改動膳帕,可能會涉及到項目中多處地方的粘捎,一個API的定義變更,可能會影響到項目中大量的業(yè)務(wù)代碼變動危彩。
還有就是在Podfile建議要帶上版本號攒磨,以免他人的變動給你帶來大量的任務(wù)量。