隨著項(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/