前言
隨著業(yè)務(wù)越來越龐大,在單工程中,app中代碼逐漸越來越大,面對高耦合和難以復(fù)用的模塊,我們就需要進(jìn)行重構(gòu)了。而面對多條業(yè)務(wù)線,組件化是一種優(yōu)秀的解決方案,將需要的組件以pod私有庫形式安裝到主工程中,組件間各自獨(dú)立,解耦,僅僅依賴一個(gè)中間件進(jìn)行通訊。那么對于各個(gè)組件托管到遠(yuǎn)程平臺最常用的是git,git的優(yōu)越性也無需贅言,但是很多公司對于代碼管理往往是本公司的svn服務(wù)器,本文的重點(diǎn)也是講解一下svn服務(wù)器托管的操作,這在網(wǎng)上資源是很少有正確的,這篇文章帶你真正學(xué)會cocoapods 基于svn托管方式。
鄭重申明
本文是一篇高級教程,不提供入門基礎(chǔ)教程。
首先我們以git為基礎(chǔ)講解代碼托管原理,請看下圖:

1.首先我們需要一個(gè)遠(yuǎn)程托管倉庫,git或者svn。
2.必須明確一個(gè)概念我們需要兩個(gè)遠(yuǎn)程倉庫,一個(gè)是遠(yuǎn)程的索引庫和一個(gè)遠(yuǎn)程的源碼庫,cocoapods 基本原理也是這樣的,平時(shí)采用的方式和我們組件化唯一區(qū)別就是將公有變?yōu)樗接小?br>
我們通過將遠(yuǎn)程索引庫添加到本地,然后在本地生成索引文件,當(dāng) pod 'LibBase',pod install,首先會在本地索引文件中查找到相應(yīng)庫文件地址進(jìn)行本地clone,這樣我們就可以使用了。
3.當(dāng)我們將代碼傳到遠(yuǎn)程源碼倉庫以后,需要在進(jìn)行第5步操作,向私有索引庫提交,這里需要解釋一下這個(gè)過程,當(dāng)我們通過命令行操作向本地私有索引庫推入索引文件,同時(shí)也會添加到遠(yuǎn)程索引庫,這樣當(dāng)小伙伴要使用你的庫,只需要更新他本地的就可以了。
那么以上就是git 方式的主要操作,下面我重點(diǎn)演示svn方式。
1.選用第三方svn服務(wù)器作為測試:
http://code.svnspot.com
這里允許創(chuàng)建兩個(gè)庫,剛好滿足我們私有索引庫和代碼庫的創(chuàng)建,

2.接下來我們需要將遠(yuǎn)程索引庫,添加到本地,這里為了滿足svn 操作我們需要安裝一個(gè) cocoapods-repo-svn插件,參考 https://github.com/dustywusty/cocoapods-repo-svn
pod repo-svn add Name Url
這里本地索引庫名字盡量保持一致,url 就是遠(yuǎn)程索引庫的地址
然后我們會在.cocoapod 看到這個(gè)文件夾

然后終端可以查看一下相應(yīng)的索引庫
pod repo

這里就有我們的索引庫 SpecsRepo。
3.接下來我們需要將遠(yuǎn)程源碼倉庫克隆到本地,采用Cornerstone 工具
兩種方式,直接添加遠(yuǎn)程地址或者通過終端命令克隆下來然后導(dǎo)入。
具體操作不在贅述。
4.創(chuàng)建本地私有模板庫
pod lib create Name

我們需要把 .git .gitignore .travis.yml 這三個(gè)文件刪掉,然后將這個(gè)庫拖入到 svn 本地倉庫的 trunk下面。當(dāng)然這個(gè)里面包括你的組件庫文件。
5.編寫podsepc 文件

這里我們需要將原地址改為svn 地址,可以進(jìn)行本地驗(yàn)證一下
pod lib lint
完成以后使用Cornerstone工具提交代碼至遠(yuǎn)程。
6.遠(yuǎn)程打標(biāo)簽tag
svn 終端命令行好像沒有直接打tag 的命令,我們可以直接通過Cornerstone打tag,需要注意的是標(biāo)簽的tag和podsepc 文件中的版本一致。

7.最后一步提交spec至私有索引庫
pod repo-svn push Name xx.podsepc
需要注意的是cd 到 本地trunk 文件夾目錄下,才能包含xx.podsepc 文件。
至此我們大功告成!我們可以通過終端 搜索一下我們的庫
pod search BCBaseLib

這里我已經(jīng)提交了兩個(gè)版本。
8.使用
Podfile文件編寫
platform :ios, '8.0'
target 'test' do
plugin 'cocoapods-repo-svn', :sources => [
'http://10.211.55.3/svn/SpecRepo' # 遠(yuǎn)程索引庫地址
]
use_frameworks!
pod 'BCBaseLib' # 本地 svn 私有庫
pod 'AFNetworking' # 可直接 pod 公開三方庫
end
可能會出現(xiàn)以下問題
- pod install 報(bào)錯(cuò)找不到組件
可以更新一下本地索引庫 pod repo-svn update --no-repo-update
2>路徑不對

我在測試中發(fā)現(xiàn)該地址不對,折騰了半天才發(fā)現(xiàn) 在podspec 文件中 s.source 路徑不對,通常產(chǎn)生這種問題大家可以先通過瀏覽器訪問該地址,如果不通就說明該地址不對。