前言
工程項目越來越大,團隊成員越來越多的情況下,組件化是趨勢,組件化好處就不細說了.
實施組件化之前我們首要的就是組件拆分,如何拆分拆分原則不是文章重點,假定拆分完之后我們有如下
- 開發(fā)流程中我們會有一個主工程(所謂的殼工程)MainApp
- 業(yè)務(wù)組件:Business_a
- 基礎(chǔ)組件:BaseAppKit 內(nèi)部依賴第三方庫AFN
- 遠程索引庫my_proj_spec
MainApp依賴business_a
Business_a依賴BaseAppKit
BaseAppKit依賴AFN
當(dāng)然實際大型項目開發(fā)會有很多的業(yè)務(wù)組件、通用業(yè)務(wù)組件、基礎(chǔ)組件、路由、日志等。
接下來就開始我們簡單的組件化搭建吧
創(chuàng)建索引倉
組件化之前,我們首先要理解組件化的基本流程
pod 'SDWebImage'
本質(zhì)上去CocoaPods官方https://github.com/CocoaPods/Specs.git
中去尋找對應(yīng)的第三方庫的.podspec文件,進而解析文件依賴源碼資源等配置信息,拉進你的工程
pod repo
pod repo查看本地repo倉
master
- Type: git (master)
- URL: https://github.com/CocoaPods/Specs.git
- Path: /Users/pengxin/.cocoapods/repos/master
會在這里搜索SDWebImage的spec文件,pod setup之所以慢就是拉取官方的倉到本地,知道這個原理后,如果pod setup很慢把已經(jīng)下載好的repo拖進你的電腦也是一種解決方法
創(chuàng)建索引庫my_proj_spec
首先創(chuàng)建我們私有的遠程索引倉my_proj_spec,我已在碼云上已創(chuàng)建好git@gitee.com:xxx/my_proj_spec.git
然后把my_proj_spec索引庫添加到本地
pod repo add my_proj_spec https://gitee.com/xxx/my_proj_spec.git
添加后 我們執(zhí)行下pod repo查看下
以后組件有更新,我們本地可以更新下索引
pod pod repo update my_proj_spec
創(chuàng)建基礎(chǔ)組件庫BaseAppKit
- 這里我們簡單用GitHub模板來創(chuàng)建一個工程
pod lib create BaseAppKit
根據(jù)提示和你的需要下一步即可
創(chuàng)建完后我們編輯BaseAppKit.podspec讓其依賴AFN
s.source = { :git => 'git@gitee.com:xxx/BaseAppKit.git', :tag => s.version.to_s}//這個地方不要錯了
s.dependency 'AFNetworking'
BaseAppKit.podspec這個文件就是你的組件發(fā)布配置文件,將來會更新推送到遠程my_proj_spec倉庫對外下載更新的,具體細節(jié)展開篇幅較多了,如果不熟悉的自行谷歌、百度吧。
我們執(zhí)行pod install看下庫工程是否下載依賴了AFN
- 提交源代碼并打tag
注意這里的tag必須跟podspec中的tag一致,因為CocoaPods是通過podspec文件中的tag去找源文件的,如果tag對應(yīng)不起來就會驗證失敗。打好tag提交遠端
git add -A && git commit -m "Release 0.1.0"
git tag 0.1.0
git remote add origin git@github.com:username/BaseAppKit.git//關(guān)聯(lián)遠程庫
git push --tags
git push -u origin master
- 驗證spec
有兩種方式驗證
本地驗證:
pod lib lint --allow-warnings
聯(lián)網(wǎng)驗證
pod spec lint --sources='git@gitee.com:xxx/my_proj_spec.git,https://github.com/CocoaPods/Specs' --allow-warnings
建議大家都?用聯(lián)?網(wǎng)驗證
這里可選參數(shù)有:
--allow-warnings 允許警告
--sources=‘master,privateSpecs:指定源 比如你的私有pod同時依賴了公有庫和私有庫你必須指定源才行,因為默認會去公有源查找對應(yīng)的依賴
--use-libraries 如果使用了靜態(tài)庫 記得加上
- 推送到Spec倉庫
pod repo push my_proj_spec BaseAppKit.podspec --allow-warnings
同樣的加上上?面驗證時使?用到的可選參數(shù)
創(chuàng)建業(yè)務(wù)組件Business_a
創(chuàng)建過程同上略過
- 編輯BaseAppKit.podspec
s.dependency 'BaseAppKit'
- 編輯Podfile
因為依賴的是我們自己的私有庫所以要特別指定源
source 'https://gitee.com/frankpx/my_proj_spec.git'
source 'https://github.com/CocoaPods/Specs.git'
pod install 試試看有沒有正確下載你的私有組件。
當(dāng)然了較大團隊內(nèi)部還可以把CocoaPods公有庫的spec文件遷移發(fā)布到公司內(nèi)部遠端私有spec上,這樣上面就可以不用添加source 'https://github.com/CocoaPods/Specs.git'官方索引源,這樣團隊其它成員在私自引入第三方庫上就會有所控制,流程上面更規(guī)范些。
之后有時間會繼續(xù)寫一些延續(xù)的實踐,組件化本地聯(lián)調(diào)(創(chuàng)建dmeo工程和framework工程以及之間的聯(lián)調(diào)、組件項目中資源文件管理、路由相關(guān)工程實踐、fastlane自動化證書管理、打包等),在此先立個flag,就當(dāng)先給自己備忘下吧