使用CocoaPods創(chuàng)建私有Spec Repo管理項目公共組件(上)

隨著項目和業(yè)務的發(fā)展疆导,項目中會有很多基礎(chǔ)功能模塊和通用業(yè)務模塊可以抽象出來獨立成組件赁项,這樣可以為我們以后在開發(fā)新項目的時候提供共用基礎(chǔ)組件,進行組件化編程是鬼,不需要重新造輪子肤舞,節(jié)約人力物力紫新,節(jié)約生命均蜜,提高開發(fā)效率。因此我們就需要一個方案來合理的管理公共的組件芒率。

Git腳本 VS CocoaPods私有倉庫

1囤耳、Git腳本:就是把我們的公共組件代碼單獨創(chuàng)建一個工程倉庫,然后把代碼放在里面,然后在我們需要用到的地方通過Git腳本命令將代碼拉取下來充择,最后我們手動創(chuàng)建一個workplace把項目關(guān)聯(lián)起來德玫。這種方法簡單粗暴,但是問題很多椎麦,比如版本不好控制宰僧,并且需要很多手動操作。操作一多就容易出問題观挎,所以不推薦使用這種方式琴儿。
2、CocoaPods私有倉庫:幾乎全自動化嘁捷,還可以對公共組件代碼進行版本控制造成。我們在集成的時候可以按需獲取指定版本。

Spec Repo的概念理解

CocoaPods對于一名iOS開發(fā)來說再熟悉不過了雄嚣,它的工作原理就是在GitHub上面有個Spec Repo晒屎,它里面包括成千上萬的podspec文件索引目錄。然后我們在項目集成的時候可以通過它去找到我們需要的開源代碼缓升。其實CocoaPods的Spec Repo就是一個中介鼓鲁。

The Specs Repo is the repository on GitHub that contains the list of all available pods. Every library has an individual folder, which contains sub folders of the available versions of that pod.

一、創(chuàng)建私有 Spec Repo

按照上面的理解港谊,我們?nèi)绻茏约簞?chuàng)建一個類似CocoaPods的Spec Repo坐桩,然后把我們公共組件的podspec文件放在里面,然后集成的時候讓CocoaPods幫我們集成那我們就能達到目的封锉。

  • 1绵跷、進入./cocoapods/repos 查看已經(jīng)存在的spec repo,這個時候我們能看到一個master文件夾成福。
cd ~/.cocoapods/repos
ls
  • 2碾局、在私有g(shù)it服務器上創(chuàng)建自己的spec repo,
    這一步如果大家要創(chuàng)建私有倉庫的話奴艾,應該在自己公司的git服務器上創(chuàng)建净当;我這里為了測試方便在GitHub上面創(chuàng)建的一個公有倉庫。創(chuàng)建完成后在終端執(zhí)行以下命令:
 # pod repo add [Private Repo Name] [Your GitHub HTTPS clone URL]
$ pod repo add HJSpecs https://github.com/OldGhost366/HJSpecs.git
  • 3蕴潦、使用第1步中的命令進入目錄我們發(fā)現(xiàn)多了一個HJSpecs文件夾像啼,到這里我們的私有spec repo就創(chuàng)建好了。
    或者我們還可以使用pod repo list命令查看潭苞,
HJSpecs
 Type: git (master)
URL:  https://github.com/OldGhost366/HJSpecs.git
Path: /Users/j/.cocoapods/repos/HJSpecs
master
Type: git (master)
URL:  https://github.com/CocoaPods/Specs.git
Path: /Users/j/.cocoapods/repos/master

二忽冻、創(chuàng)建pods公共組件庫

這一步最簡單的辦法就是直接創(chuàng)建一個文件夾然后里面創(chuàng)建一個.podspec結(jié)尾的文件,這樣我們的公共組件庫就創(chuàng)建成功了此疹。

  • 1僧诚、在這里我使用的是pod命令來創(chuàng)建:pod lib create HJPodTestLib 這里會詢問幾個問題遮婶,最好都選NO
jdeMacBook-Pro:PodSpecRepo j$ pod lib create HJPodTestLib
Cloning `https://github.com/CocoaPods/pod-template.git` into `HJPodTestLib`.
Configuring HJPodTestLib template.
To get you started we need to ask a few questions, this should only take a minute.
If this is your first time we recommend running through with the guide: 
 - http://guides.cocoapods.org/making/using-pod-lib-create.html
 ( hold cmd and double click links to open in a browser. )
What language do you want to use?? [ Swift / ObjC ]
> ObjC
Would you like to include a demo application with your library? [ Yes / No ]
 > No
Which testing frameworks will you use? [ Specta / Kiwi / None ]
 > None
Would you like to do view based testing? [ Yes / No ]
 > No
What is your class prefix?
 > HJ
  • 2、在遠程git服務器創(chuàng)建組件倉庫湖笨,并且和本地關(guān)聯(lián)
git add .
git commit -s -m "Initial Commit of Library"
git remote add origin https://github.com/OldGhost366/HJPodTestLib.git          
git push origin master     
  • 3旗扑、創(chuàng)建tag,因為podspec文件中獲取Git版本控制的項目還需要tag號慈省,所以我們要打上一個tag臀防,這一步一定不要忘記 不然第5步就會說找不到版本。
git tag -m "第一版" 0.1.0
git push --tags
  • 4边败、編寫podspec文件清钥,
    我里面標注要修改的地方一定要修改下不要用默認的,不然第5不會出警告放闺。
Pod::Spec.new do |s|
  s.name             = 'HJPodTestLib'
  s.version          = '0.1.0'
  s.summary          = 'HJPodTestLib.'  #這里要修改下

 s.description      = <<-DESC
 description of the pod here. #這里也要修改下
                       DESC

  s.homepage         = 'https://github.com/OldGhost366/HJPodTestLib'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'OldGhost366' => 'oldghost007@163.com' }
  s.source           = { :git => 'https://github.com/OldGhost366/HJPodTestLib.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0'

  s.source_files = 'HJPodTestLib/Classes/**/*'
end
  • 5祟昭、驗證 pod lib lint,
    ERROR和WARMING都不能有怖侦,不然不能提交篡悟。
jdeMacBook-Pro:HJPodTestLib j$ pod lib lint
 -> HJPodTestLib (0.1.0)
HJPodTestLib passed validation.
  • 6、提交podspec到私有spec repo
    這個時候需要匾寝,必須前面驗證通過搬葬,不然提交會失敗,因為提交過程先會進行驗證艳悔。
    執(zhí)行下面命令后CocoasPod自動會將podspec到本地和遠程spec repo Git倉庫急凰。我們這時候可以在Git遠程倉庫可以看到這個podspec文件了。
pod repo push HJSpecs HJPodTestLib.podspec

三猜年、集成測試

  • 1抡锈、搜索私有庫看是否存在
pod search HJPodTestLib
-> HJPodTestLib (0.1.0)
   HJPodTestLib.
   pod 'HJPodTestLib', '~> 0.1.0'
   - Homepage: https://github.com/OldGhost366/HJSpecs.git
   - Source:   https://github.com/OldGhost366/HJPodTestLib.git
   - Versions: 0.1.0 [HJSpecs repo]
(END)
  • 2、創(chuàng)建項目測試
pod init

然后我們編輯Podfile文件

target 'PodTest' do
platform :ios, '8.0'
pod 'HJPodTestLib', '~> 0.1.0'
pod 'AFNetworking'
end

執(zhí)行pod install

[!] Unable to find a specification for `HJPodTestLib`

這個命令之后可能會產(chǎn)生上面的錯誤乔外,如果你沒遇到最好床三,因為這個可能和我的Xcode(8.1)和CocoaPods(1.2.1)版本有關(guān)。網(wǎng)上查了下好像和Xcode8有關(guān)杨幼,但是我按里面的解決辦法沒有解決撇簿,因為我輸入下面命令后根本沒有反應。

pod spec lint --sources='https://github.com/OldGhost366/HJSpecs.git,https://github.com/CocoaPods/Specs'

最終解決辦法在Podfile里面增加source指定差购,兩個都要添加

#增加下面兩個source這樣pod install就不會出問題了
source 'https://github.com/OldGhost366/HJSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'
target 'PodTest' do
platform :ios, '8.0'
pod 'HJPodTestLib', '~> 0.1.0'
pod 'AFNetworking'
end

通過上面的步驟我們實現(xiàn)了一個我們自己的CocoaPods私有spec repo四瘫。這樣我們就可以通過CocoaPods來管理我們的公共組件了。
我的另外一篇-創(chuàng)建subspec
參考:
http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欲逃,一起剝皮案震驚了整個濱河市找蜜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌暖夭,老刑警劉巖锹杈,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撵孤,死亡現(xiàn)場離奇詭異迈着,居然都是意外死亡竭望,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門裕菠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咬清,“玉大人,你說我怎么就攤上這事奴潘【缮眨” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵画髓,是天一觀的道長掘剪。 經(jīng)常有香客問我,道長奈虾,這世上最難降的妖魔是什么夺谁? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮肉微,結(jié)果婚禮上匾鸥,老公的妹妹穿的比我還像新娘。我一直安慰自己碉纳,他們只是感情好勿负,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劳曹,像睡著了一般奴愉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铁孵,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天躁劣,我揣著相機與錄音,去河邊找鬼库菲。 笑死账忘,一個胖子當著我的面吹牛岂膳,可吹牛的內(nèi)容都是我干的损谦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼芋忿,長吁一口氣:“原來是場噩夢啊……” “哼烫止!你這毒婦竟也來了蒋荚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤馆蠕,失蹤者是張志新(化名)和其女友劉穎期升,沒想到半個月后惊奇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡播赁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年颂郎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片容为。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡乓序,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坎背,到底是詐尸還是另有隱情替劈,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布得滤,位于F島的核電站陨献,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏懂更。R本人自食惡果不足惜眨业,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膜蛔。 院中可真熱鬧坛猪,春花似錦、人聲如沸皂股。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呜呐。三九已至就斤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蘑辑,已是汗流浹背洋机。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洋魂,地道東北人绷旗。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像副砍,于是被迫代替她去往敵國和親衔肢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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