iOS 借助CocoaPods/github創(chuàng)建遠(yuǎn)程私有庫

隨著項(xiàng)目和業(yè)務(wù)的發(fā)展新锈,項(xiàng)目中會有很多基礎(chǔ)功能模塊和通用業(yè)務(wù)模塊可以抽象出來獨(dú)立成組件眶熬,這樣可以為我們以后在開發(fā)新項(xiàng)目的時候提供共用基礎(chǔ)組件,進(jìn)行組件化編程拳缠,不需要重新造輪子贸弥,節(jié)約人力物力,節(jié)約生命哲鸳,提高開發(fā)效率盔憨。因此我們就需要一個方案來合理的管理公共的組件。

Git腳本 VS CocoaPods私有倉庫

1婿奔、Git腳本:就是把我們的公共組件代碼單獨(dú)創(chuàng)建一個工程倉庫问慎,然后把代碼放在里面,然后在我們需要用到的地方通過Git腳本命令將代碼拉取下來记餐,最后我們手動創(chuàng)建一個workplace把項(xiàng)目關(guān)聯(lián)起來薇正。這種方法簡單粗暴,但是問題很多挖腰,比如版本不好控制,并且需要很多手動操作审轮。操作一多就容易出問題,所以不推薦使用這種方式篡诽。

2榴捡、CocoaPods私有倉庫:幾乎全自動化,還可以對公共組件代碼進(jìn)行版本控制达椰。我們在集成的時候可以按需獲取指定版本项乒。

Spec Repo的概念理解

CocoaPods對于一名iOS開發(fā)來說再熟悉不過了,它的工作原理就是在GitHub上面有個Spec Repo蝇裤,它里面包括成千上萬的podspec文件索引目錄埃碱。然后我們在項(xiàng)目集成的時候可以通過它去找到我們需要的開源代碼。其實(shí)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幫我們集成那我們就能達(dá)到目的。

1瘩扼、進(jìn)入./cocoapods/repos 查看已經(jīng)存在的spec repo集绰,這個時候我們能看到一個master文件夾。

cd ~/.cocoapods/repos

ls

2栽燕、在私有g(shù)it服務(wù)器上創(chuàng)建自己的spec repo

這一步如果大家要創(chuàng)建私有倉庫的話,應(yīng)該在自己公司的git服務(wù)器上創(chuàng)建浴讯;我這里為了測試方便在GitHub上面創(chuàng)建的一個公有倉庫。創(chuàng)建完成后在終端執(zhí)行以下命令:

?# pod repo add [Repo Name] [倉庫 URL]

如下:

$ pod repo add SpecsDemo https://github.com/XXXXXX/SpecsDemo.git

3侍郭、使用第1步中的命令進(jìn)入目錄我們發(fā)現(xiàn)多了一個SpecsDemo文件夾掠河,到這里我們的私有spec repo就創(chuàng)建好了猛计。

或者我們還可以使用pod repo list命令查看奉瘤,

SpecsDemo

?Type: git (master)

URL: ?https://github.com/xxxxx/SpecsDemo.git

Path: /Users/j/.cocoapods/repos/SpecsDemo

master

Type: git (master)

URL: ?https://github.com/CocoaPods/SpecsDemo.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 SpecsDemoPodTestLib 這里會詢問幾個問題批销,最好都選NO

jdeMacBook-Pro:PodSpecRepo j$ pod lib create SpecsDemoPodTestLib

Cloning `https://github.com/CocoaPods/pod-template.git` into `SpecsDemoPodTestLib`.

Configuring SpecsDemoPodTestLib 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?

?> SD

2染坯、在遠(yuǎn)程git服務(wù)器創(chuàng)建組件倉庫,并且和本地關(guān)聯(lián)

git add .

git commit -s -m "Initial Commit of Library"

git remote add origin https://github.com/xxxxx/SpecsDemoPodTestLib.git ? ? ? ? ?

git push origin master

3掀宋、創(chuàng)建tag仲锄,因?yàn)閜odspec文件中獲取Git版本控制的項(xiàng)目還需要tag號,所以我們要打上一個tag是趴,這一步一定不要忘記 不然第5步就會說找不到版本澄惊。

git tag -m "第一版" 0.1.0

git push --tags

4、編寫podspec文件肛搬,我里面標(biāo)注要修改的地方一定要修改下不要用默認(rèn)的,不然第5不會出警告蛤奢。

Pod::Spec.new do |s|

? s.name ? ? ? ? ? ? = 'SpecsDemoPodTestLib'

? s.version ? ? ? ? ?= '0.1.0'

? s.summary ? ? ? ? ?= 'SpecsDemoPodTestLib.' ?#這里要修改下

?s.description ? ? ?= <<-DESC

?description of the pod here. #這里也要修改下

? ? ? ? ? ? ? ? ? ? ? ?DESC

? s.homepage ? ? ? ? = 'https://github.com/xxxxx/SpecsDemoPodTestLib'

? # s.screenshots ? ? = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'

? s.license ? ? ? ? ?= { :type => 'MIT', :file => 'LICENSE' }

? s.author ? ? ? ? ? = { 'xxxxx' => 'xxxxx@163.com' }

? s.source ? ? ? ? ? = { :git => 'https://github.com/xxxxx/SpecsDemoPodTestLib.git', :tag => s.version.to_s }

? # s.social_media_url = 'https://twitter.com/'

? s.ios.deployment_target = '8.0'

? s.source_files = 'SpecsDemoPodTestLib/Classes/**/*'

end

5陶贼、驗(yàn)證 pod lib lint拜秧,ERROR和WARMING都不能有,不然不能提交枉氮。

jdeMacBook-Pro:HJPodTestLib j$ pod lib lint

?-> SpecsDemoPodTestLib (0.1.0)

SpecsDemoPodTestLib passed validation.

6聊替、提交podspec到私有spec repo

這個時候需要,必須前面驗(yàn)證通過惹悄,不然提交會失敗,因?yàn)樘峤贿^程先會進(jìn)行驗(yàn)證象缀。

執(zhí)行下面命令后CocoasPod自動會將podspec到本地和遠(yuǎn)程spec repo Git倉庫爷速。我們這時候可以在Git遠(yuǎn)程倉庫可以看到這個podspec文件了。

pod repo push SpecsDemo SpecsDemoPodTestLib.podspec

三莉给、集成測試

1廉沮、搜索私有庫看是否存在

pod search SpecsDemoPodTestLib

-> SpecsDemoPodTestLib (0.1.0)

? ?SpecsDemoPodTestLib.

? ?pod 'SpecsDemoPodTestLib', '~> 0.1.0'

? ?- Homepage: https://github.com/xxxxx/SpecsDemo.git

? ?- Source: ? https://github.com/xxxxx/SpecsDemoPodTestLib.git

? ?- Versions: 0.1.0 [SpecsDemo repo]

(END)

2滞时、創(chuàng)建項(xiàng)目測試

pod init

然后我們編輯Podfile文件

target 'PodTest' do

platform :ios, '8.0'

pod 'SpecsDemoPodTestLib', '~> 0.1.0'

pod 'AFNetworking'

end

執(zhí)行pod install

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

這個命令之后可能會產(chǎn)生上面的錯誤,如果你沒遇到最好曼玩,因?yàn)檫@個可能和我的Xcode(8.1)和CocoaPods(1.2.1)版本有關(guān)。網(wǎng)上查了下好像和Xcode8有關(guān)黍判,但是我按里面的解決辦法沒有解決,因?yàn)槲逸斎胂旅婷詈蟾緵]有反應(yīng)美旧。

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

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

#增加下面兩個source這樣pod install就不會出問題了

source 'https://github.com/xxxxx/SpecsDemo.git'

source 'https://github.com/CocoaPods/Specs.git'

target 'PodTest' do

platform :ios, '8.0'

pod 'SpecsDemoPodTestLib', '~> 0.1.0'

pod 'AFNetworking'

end

通過上面的步驟我們實(shí)現(xiàn)了一個我們自己的CocoaPods私有spec repo陶舞。這樣我們就可以通過CocoaPods來管理我們的公共組件了。


參考:

http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市颁井,隨后出現(xiàn)的幾起案子蠢护,更是在濱河造成了極大的恐慌,老刑警劉巖葵硕,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懈凹,死亡現(xiàn)場離奇詭異,居然都是意外死亡库北,警方通過查閱死者的電腦和手機(jī)们陆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杂腰,“玉大人椅文,你說我怎么就攤上這事惜颇⌒羯福” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵望伦,是天一觀的道長屯伞。 經(jīng)常有香客問我豪直,道長,這世上最難降的妖魔是什么弓乙? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮勾习,結(jié)果婚禮上懈玻,老公的妹妹穿的比我還像新娘。我一直安慰自己涂乌,他們只是感情好湾盒,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诅需,像睡著了一般荧库。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上场刑,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機(jī)與錄音铐懊,去河邊找鬼瞎疼。 笑死,一個胖子當(dāng)著我的面吹牛茅茂,可吹牛的內(nèi)容都是我干的太抓。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼碴倾,長吁一口氣:“原來是場噩夢啊……” “哼掉丽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矫户,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤残邀,失蹤者是張志新(化名)和其女友劉穎柑蛇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體空免,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹋砚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年摄杂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墨坚。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡映挂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帽撑,到底是詐尸還是另有隱情,我是刑警寧澤扣蜻,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站专筷,受9級特大地震影響弱贼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜磷蛹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一吮旅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧味咳,春花似錦庇勃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掂铐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間全陨,已是汗流浹背爆班。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辱姨,地道東北人柿菩。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像雨涛,于是被迫代替她去往敵國和親枢舶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361

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