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