閱讀此文章之前你需要對cocoapods有基本的了解,這里給大家附上幾篇文章:
IOS依賴管理 - CocoaPods(PS:就在前幾天安眠重裝了系統(tǒng),重新安裝cocoapods發(fā)現(xiàn)跟以前有點(diǎn)點(diǎn)不一樣,所以順便對文章做了更新)
一. 前話
安眠是從去年后半年開始投入到現(xiàn)在的產(chǎn)品當(dāng)中,前期該款產(chǎn)品只有國內(nèi)一條產(chǎn)品線,之前搭的框架一直順順暢暢也沒什么問題,中途公司決定要拓展國際產(chǎn)品線,考慮到業(yè)務(wù)邏輯的差異化會(huì)趨于明顯大家討論后決定國內(nèi)國際分開兩個(gè)產(chǎn)品線進(jìn)行開發(fā),于是直接把當(dāng)時(shí)的代碼放到新的代碼倉并且開始在這一套代碼上面做改動(dòng)(等我知道的時(shí)候其實(shí)內(nèi)心是拒絕)然后問題就來了。。
當(dāng)前代碼改成國際版也是需要時(shí)間的,導(dǎo)致后面國內(nèi)版跟國際版中間差了幾個(gè)版本,這種差異引出的問題是,對于通用的模塊業(yè)務(wù)中存在的隱性bug,國內(nèi)版在后期迭代中逐步修復(fù),但國際版無論如何跟當(dāng)前的國內(nèi)版都無法同步,修復(fù)或者業(yè)務(wù)邏輯調(diào)整都需要從國內(nèi)版的某一個(gè)或者甚至多個(gè)版本中進(jìn)行選擇性同步,這種做法簡直喪盡天良毫不優(yōu)雅!但是有什么辦法呢?拆分模塊。
二. 拆分模塊準(zhǔn)備工作
cocoapods安裝完畢
對podfile文件和podspec文件有大致了解,可參考本文一開始貼出來的附文
充分了解產(chǎn)品業(yè)務(wù)邏輯,找出通用部分以及通用部分的差異處,想不通的最好嘗試著畫業(yè)務(wù)邏輯圖,這里安眠就不細(xì)說,以后有機(jī)會(huì)可以給大家分享一下
準(zhǔn)備好新的工程git倉以及各模塊的git倉
三. 拆
通過拆分之前的考量,安眠是這樣決定的: 每個(gè)工程都會(huì)有一些基類或工具類等在不同工程里都可以復(fù)用,把這些代碼移植出來做為基類模塊,這樣以后開發(fā)新的產(chǎn)品線可以直接引入該基類模塊,對于架構(gòu)的前期準(zhǔn)備工作會(huì)節(jié)省一些時(shí)間; 針對安眠開發(fā)的產(chǎn)品而言,編輯器是產(chǎn)品里最重要也是可以獨(dú)立開來的一個(gè)工具業(yè)務(wù),所以這一塊被做為編輯器模塊移植出來。開動(dòng)。
1.代碼拆分,新建模塊項(xiàng)目,把相關(guān)代碼移植出來,編譯通過
2.模塊項(xiàng)目中創(chuàng)建podspec文件 參考CocoaPods官方文檔-Podspec配置格式
- 聲明依賴第三方庫
s.dependency '*第三方*'
- 聲明包含代碼路徑
sp.source_files = '*路徑*/*.{h,m}'
- 聲明引用頭文件
sp.prefix_header_file = '*路徑*'
- 聲明資源引用路徑
sp.resources = '*路徑*'
- 整體podspec格式如下
Pod::Spec.new do |s|
s.name = '*名字*'
s.version = '1.0.0'
s.license = 'MIT'
s.requires_arc = true
s.default_subspec = 'Core'
s.ios.deployment_target = '7.0'
s.dependency '*第三方*'
s.dependency '*第三方*', '~> 3.7.3'
s.subspec "Core" do |sp|
sp.source_files = '*路徑*/*.{h,m}'
sp.prefix_header_file = '*路徑*'
sp.framework = '*系統(tǒng)庫*'
sp.resources = '*路徑*'
end
end
3.編輯podfile文件
- 本地引用:
pod '*podspec的名字*', :path => '*路徑*'
4.終端更新cocopods文件引用,這時(shí)項(xiàng)目應(yīng)該大概能跑起來了,跑不起來再找具體問題挨個(gè)修復(fù)
pod update
四. 遇到的問題
[!] [Xcodeproj] Generated duplicate UUIDs:
解決辦法:
終端:export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES
五. 收尾
安眠這里分享的是本地引入,本地引入成功后程序能夠跑起來的話,就是完成了一了大半部分,這時(shí)可以把本地的模塊工程上傳到代碼倉之后再慢慢修改優(yōu)化
至于接下來你的主體工程是要通過本地引入還是通過代碼倉地址引入就看你們需要嘍~