使用Cocoapods為模塊化創建私有pods筆記

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

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

創建一個私有的podspec包括如下那么幾個步驟:

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

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

1創建一個私有的Spec Repo

這里叫做創建一個私有的倉庫源或者倉庫列表,或者直接叫做倉庫,或者是叫索引

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

POD私有1

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

POD私有2

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

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

這個命令可能會進行一些賬號的驗證,成功后就像上圖1里面一樣會多一個pod倉庫列表。現在可以看到DDSpecs文件夾下面是空的,這是正常的,因為是一個全新的倉庫列表。添加公司已有的倉庫列表也是這個命令,但是里面可能會有私有庫列表。

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

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

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

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

POD私有3

這里會創建一個名為UserModelDemo的項目,里面包含了我們下面要用到的podspec文件和license文件,可以對項目進行修改,變成我們想要的樣子。

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

這個命令我沒有試過,留個坑給大家吧。應該也會創建podspec文件和license文件

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

這三種方法都可以,關鍵是要有git地址,請再次確認我們這一步驟的目的達到了。真實文件夾存放git地址

3創建并修改Pod所對應的podspec文件

上面第二步可能已經創建好了podspec文件和license文件,也可能沒有,這一步重點介紹一下這兩個文件。

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

 Pod::Spec.new do |s|
  s.name             = "DDUserModel"    #私有庫名稱
  s.version          = "1.0.0"          #版本號
  s.summary          = "Just Testing."     #簡短介紹,下面是詳細介紹
  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" 
  #主頁,這里要填寫可以訪問到的地址,不然驗證不通過

  # s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2" #截圖
  s.license          = { :type => 'MIT', :file => 'LICENSE' }             #開源協議
  s.author           = { 'Yasin' => 'yasinzhou@foxmail.com' }                   #作者信息
  s.source           = { :git => "https://coding.net/Yasin/UserModelDemo.git", :tag => s.version.to_s }      
  #項目地址,這里不支持ssh的地址,驗證不通過,只支持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目錄及其子目錄下所有文件,
  #如果有多個目錄下則用逗號分開,如果需要在項目中分組顯示,這里也要做相應的設置
  s.resource_bundles = {
    'PodTestLibrary' => ['Pod/Assets/*.png']
  }                                       #資源文件地址
 
  s.public_header_files = 'Pod/Classes/**/*.h'   #公開頭文件地址
  s.frameworks = 'UIKit'                  #所需的framework,多個用逗號隔開
  s.dependency 'AFNetworking', '~> 2.3'   
  #依賴關系,該項目所依賴的其他庫,如果有多個需要填寫多個s.dependency
end

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

license文件就是上面描述文件里面提到的開源協議,是一個文本文件,直接拷貝一份,修改一下里面的年份和作者信息就行了,命名為“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文件是否書寫正確

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

$ pod lib lint

如果有錯誤根據提示修改就好了,一般來說問題不大

5提交項目和podspec配置到Git倉庫,并打標簽

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

6向私有的Spec Repo中提交podspec

完成這一步就可以使用pod install命令進行安裝了

只有將podspec文件提交到倉庫列表后才能像平常一樣使用pods安裝管理,不過因為是私有的倉庫列表,換臺機器要重新添加倉庫列表

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

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

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

7在個人項目中的Podfile中增加剛剛制作的好的Pod并使用

完成后可以新建一個工程,就像使用普通pod庫一樣試驗一下

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

8更新維護podspec

私有庫也是會更新的,基本上都是把更新后的內容push到遠端git服務器,然后重走5和6的步驟,重新打標簽,重新推送到pod倉庫列表,然后在項目里面pod install或者pod update

總結

首先有幾個疑問:
1.模塊化如果使用pods私有庫的話,那每次修改豈不是都要更新維護podspec?特別是在改BUG的時候,那種是不是太痛苦?
2.感覺模塊化pods私有庫更適合大一點的團隊使用,每個人負責一個私有庫的維護,如果是一兩個人,每個模塊一個pods私有庫,那是不是太痛苦?

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

POD私有4
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,401評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,011評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,263評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,543評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,323評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,874評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,968評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,095評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,605評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,551評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,720評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,242評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,961評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,358評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,612評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,330評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,690評論 2 370

推薦閱讀更多精彩內容