使用Cocoapods為模塊化創(chuàng)建私有pods筆記

學(xué)習(xí)新知識必然是一個(gè)踩坑的過程,這兩天看了下pod私有庫的創(chuàng)建,總體來說還是比較簡單的,但是中間踩了一個(gè)坑,也不能說是坑吧,只是自己技術(shù)不扎實(shí),花了兩個(gè)下午才完全熟練。

私有庫的創(chuàng)建網(wǎng)上教程很多,但是對于基礎(chǔ)知識欠缺而且專業(yè)名詞知道的甚少的我來說還是有很大的困難的,所以記錄一下,畢竟我的記性那么不好

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

1.創(chuàng)建一個(gè)私有的Spec Repo。
2.創(chuàng)建Pod的所需要的項(xiàng)目工程文件,并且有可訪問的項(xiàng)目版本git地址。
3.創(chuàng)建并修改Pod所對應(yīng)的podspec文件。
4.本地測試配置好的podspec文件是否可用。
5.提交項(xiàng)目和podspec配置到Git倉庫,并打標(biāo)簽。
6.向私有的Spec Repo中提交podspec。
7.在個(gè)人項(xiàng)目中的Podfile中增加剛剛制作的好的Pod并使用。
8.更新維護(hù)podspec。

整體流程就是這8個(gè)步驟,其中前7個(gè)步驟是開始,第8個(gè)步驟是使用更新,畢竟我們的庫也不是寫好后就不會更改的

1創(chuàng)建一個(gè)私有的Spec Repo

這里叫做創(chuàng)建一個(gè)私有的倉庫源或者倉庫列表,或者直接叫做倉庫,或者是叫索引

Spec RepoPods的倉庫列表,我們pod install或者pod update的時(shí)候會從倉庫列表中查找當(dāng)前最新的版本,然后進(jìn)行下載更新。如果我們要做私有庫,就不能放在官方的倉庫列表中,所以要創(chuàng)建一個(gè)私有的倉庫列表,來存放我們私有庫的列表。
如果你使用過pod,本地會有一個(gè)倉庫列表,每次pod install 或者pod update會對倉庫列表進(jìn)行更新。在~/.cocoapods/repos目錄下,master就是官方的倉庫列表,里面的都是開源的,我們通過pod search XXX命令就可以搜索到這些開源庫

POD私有1

比如pod search 1210,可能是某個(gè)同學(xué)寫的私有庫的測試小demo,這里建議大家不要隨便往共用倉庫列表里面添加無用的開源庫,這個(gè)倉庫列表可是分發(fā)到全世界的!

POD私有2

進(jìn)入正題,創(chuàng)建一個(gè)私有Spec Repo,私有倉庫列表就是一個(gè)普通的空的git倉庫(后面會添加內(nèi)容的),在你們的git服務(wù)器上面創(chuàng)建一個(gè)新的倉庫就行,不需要里面有任何文件,然后你可以拿到你的git倉庫的一個(gè)地址,比如我coding網(wǎng)站上面創(chuàng)建一個(gè)名字為DDSpecs的倉庫,git地址是:https://coding.net/Yasin/DDSpecs.git(你是訪問不通的),然后在終端下執(zhí)行命令,將新創(chuàng)建的私有倉庫添加到本地Pods里面,這樣就相當(dāng)于使用pod的時(shí)候多了一個(gè)倉庫列表,多了一個(gè)數(shù)據(jù)源。

$ pod repo add DDSpecs https://coding.net/Yasin/DDSpecs.git

這個(gè)命令可能會進(jìn)行一些賬號的驗(yàn)證,成功后就像上圖1里面一樣會多一個(gè)pod倉庫列表?,F(xiàn)在可以看到DDSpecs文件夾下面是空的,這是正常的,因?yàn)槭且粋€(gè)全新的倉庫列表。添加公司已有的倉庫列表也是這個(gè)命令,但是里面可能會有私有庫列表。

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

這個(gè)步驟的目的:創(chuàng)建我們的模塊項(xiàng)目(一般是一個(gè)可運(yùn)行的demo,個(gè)別比較特殊的只有模塊的文件),把模塊的文件按照真實(shí)文件夾放好,并且上傳到git服務(wù)器,得到git地址。(附帶可以在這一步創(chuàng)建后面所需要的podspec文件和license文件)

這里我們也需要模塊項(xiàng)目的git地址,這個(gè)地址是下載代碼用的,可能你的模塊已經(jīng)創(chuàng)建好了git,也可能沒有,這都不重要,重要的是要有一個(gè)代碼的git地址。
這里提供三個(gè)方法,自己選擇喜歡合適的就行了:

  1. 使用命令創(chuàng)建一個(gè)新的項(xiàng)目工程
    找到一個(gè)存放項(xiàng)目的文件夾,輸入下面的命令
$ pod lib create UserModelDemo

POD私有3

這里會創(chuàng)建一個(gè)名為UserModelDemo的項(xiàng)目,里面包含了我們下面要用到的podspec文件和license文件,可以對項(xiàng)目進(jìn)行修改,變成我們想要的樣子。

  1. 使用命令接入已有的模塊項(xiàng)目
    找到一個(gè)存放項(xiàng)目的文件夾,輸入下面的命令
$ pod spec create PodTestLibrary git@coding.net:Yasin/UserModelDemo.git

這個(gè)命令我沒有試過,留個(gè)坑給大家吧。應(yīng)該也會創(chuàng)建podspec文件和license文件

  1. 正常手動創(chuàng)建一個(gè)項(xiàng)目
    就是平常我們創(chuàng)建項(xiàng)目的流程,創(chuàng)建一個(gè)普通的項(xiàng)目,或者說是已有的,然后修改成我們需要的樣子。

這三種方法都可以,關(guān)鍵是要有g(shù)it地址,請?jiān)俅未_認(rèn)我們這一步驟的目的達(dá)到了。真實(shí)文件夾存放、git地址。

3創(chuàng)建并修改Pod所對應(yīng)的podspec文件

上面第二步可能已經(jīng)創(chuàng)建好了podspec文件和license文件,也可能沒有,這一步重點(diǎn)介紹一下這兩個(gè)文件。

podspec文件是pods私有庫的描述文件,是Ruby格式的,里面包含了下載地址,私有庫的版本等信息。沒有的可以創(chuàng)建一個(gè),比如“DDUserModel.podspec”

 Pod::Spec.new do |s|
  s.name             = "DDUserModel"    #私有庫名稱
  s.version          = "1.0.0"          #版本號
  s.summary          = "Just Testing."     #簡短介紹,下面是詳細(xì)介紹
  s.description      = <<-DESC
                       Testing Private Podspec.
 
                       * Markdown format.
                       * Don't worry about the indent, we strip it!
                       DESC
  s.homepage         = "https://coding.net/Yasin/UserModelDemo" 
  #主頁,這里要填寫可以訪問到的地址,不然驗(yàn)證不通過

  # s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2" #截圖
  s.license          = { :type => 'MIT', :file => 'LICENSE' }             #開源協(xié)議
  s.author           = { 'Yasin' => 'yasinzhou@foxmail.com' }                   #作者信息
  s.source           = { :git => "https://coding.net/Yasin/UserModelDemo.git", :tag => s.version.to_s }      
  #項(xiàng)目地址,這里不支持ssh的地址,驗(yàn)證不通過,只支持HTTP和HTTPS,最好使用HTTPS

  # s.social_media_url = 'https://twitter.com/<twitter_username>'  #多媒體介紹地址
 
  s.platform     = :ios, '7.0'            #支持的平臺及版本
  s.requires_arc = true                   #是否使用ARC,如果指定具體文件,則具體的問題使用ARC
 
  s.source_files = 'Pod/Classes/**/*'     
  #代碼源文件地址,**/*表示Classes目錄及其子目錄下所有文件,
  #如果有多個(gè)目錄下則用逗號分開,如果需要在項(xiàng)目中分組顯示,這里也要做相應(yīng)的設(shè)置
  s.resource_bundles = {
    'PodTestLibrary' => ['Pod/Assets/*.png']
  }                                       #資源文件地址
 
  s.public_header_files = 'Pod/Classes/**/*.h'   #公開頭文件地址
  s.frameworks = 'UIKit'                  #所需的framework,多個(gè)用逗號隔開
  s.dependency 'AFNetworking', '~> 2.3'   
  #依賴關(guān)系,該項(xiàng)目所依賴的其他庫,如果有多個(gè)需要填寫多個(gè)s.dependency
end

這個(gè)文件基本上就這些內(nèi)容,可以下載幾個(gè)開源庫(不是pod安裝,而是直接去下載帶有demo的項(xiàng)目庫)對照參考一下,加深理解。我也是看了好幾個(gè)開源庫的才看懂的。

license文件就是上面描述文件里面提到的開源協(xié)議,是一個(gè)文本文件,直接拷貝一份,修改一下里面的年份和作者信息就行了,命名為“LICENSE”,沒有后綴

Copyright (c) 2016 Yasin <yasinzhou@foxmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

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

測試一下podspec文件是否書寫正確

這一步只是簡單的測試一下是否有格式錯(cuò)誤,使用命令

$ pod lib lint

如果有錯(cuò)誤根據(jù)提示修改就好了,一般來說問題不大

5提交項(xiàng)目和podspec配置到Git倉庫,并打標(biāo)簽

將沒有錯(cuò)誤的項(xiàng)目上傳到git,和podspec文件和license文件一起上傳。
上面的podspec文件中提到一個(gè)版本號,這個(gè)是git倉庫標(biāo)簽,打標(biāo)簽的方法就不說了,不會的查一下吧,這里需要注意的是打標(biāo)簽需要推送到遠(yuǎn)端
這個(gè)版本號和xcode中的那個(gè)版本沒有聯(lián)系的,不過一般為了查看方便,會修改為一致。
其他的也沒有什么了

6向私有的Spec Repo中提交podspec

完成這一步就可以使用pod install命令進(jìn)行安裝了

只有將podspec文件提交到倉庫列表后才能像平常一樣使用pods安裝管理,不過因?yàn)槭撬接械膫}庫列表,換臺機(jī)器要重新添加倉庫列表

$ pod repo push DDSpecs DDUserModel.podspec  #前面是本地Repo名字 后面是podspec文件

這一步可能也會報(bào)錯(cuò),比如你的項(xiàng)目地址不能訪問啦、沒有開源協(xié)議啦、git遠(yuǎn)程倉庫沒有打標(biāo)簽啦...等等,如果報(bào)錯(cuò)根據(jù)提示修改,修改之后從步驟5重新走一下,要修改版本號和重新打標(biāo)簽,或者你可以把原來的標(biāo)簽刪了,再加在最新的節(jié)點(diǎn)上,但是一般不建議這樣做。

這個(gè)地方感覺挺麻煩的,不知道是不是我理解的有問題,有理解更好的可以交流一下,大家都是一起學(xué)習(xí)的嘛??

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

完成后可以新建一個(gè)工程,就像使用普通pod庫一樣試驗(yàn)一下

這里再說一個(gè)坑:swift的類和成員變量在pod里面都是私有的??,所以在定義可以給外面引用的類和成員變量的時(shí)候要加上public屬性,不然你會看到文件pod下來了,但是引用類和成員變量的時(shí)候會提示找不到。我艸了,當(dāng)時(shí)在這個(gè)地方卡了一個(gè)下午,各種配置都是對的,就是引用不了,試了各種方法,后來才發(fā)現(xiàn)是權(quán)限的問題??,只能說自己好傻,基礎(chǔ)知識太欠啊

8更新維護(hù)podspec

私有庫也是會更新的,基本上都是把更新后的內(nèi)容push到遠(yuǎn)端git服務(wù)器,然后重走5和6的步驟,重新打標(biāo)簽,重新推送到pod倉庫列表,然后在項(xiàng)目里面pod install或者pod update

總結(jié)

首先有幾個(gè)疑問:
1.模塊化如果使用pods私有庫的話,那每次修改豈不是都要更新維護(hù)podspec?特別是在改BUG的時(shí)候,那種是不是太痛苦?
2.感覺模塊化pods私有庫更適合大一點(diǎn)的團(tuán)隊(duì)使用,每個(gè)人負(fù)責(zé)一個(gè)私有庫的維護(hù),如果是一兩個(gè)人,每個(gè)模塊一個(gè)pods私有庫,那是不是太痛苦?

另外說一下如果pod私有庫有依賴關(guān)系的話,上傳git服務(wù)器的時(shí)候可以對依賴庫進(jìn)行忽略。
如果是使用SourceTree可以在設(shè)置-高級里面添加忽略路徑,比如/Example/Pods,更多更高級的用法可以更深入的學(xué)習(xí)哈

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

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

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