CocoaPods組件化實踐

前言

工程項目越來越大,團隊成員越來越多的情況下,組件化是趨勢,組件化好處就不細說了.
實施組件化之前我們首要的就是組件拆分,如何拆分拆分原則不是文章重點,假定拆分完之后我們有如下

  • 開發(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)先給自己備忘下吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CocoaPods 組件化實踐 項目在開發(fā)到一定階段后工程會變得異常龐大,模塊間的依賴錯綜復(fù)雜,維護成本非常大,并...
    rgcyc閱讀 9,829評論 8 29
  • 上篇文章介紹了項目要求及整體項目結(jié)構(gòu)的概要,本章我們用venders項目介紹下如何創(chuàng)建私有庫。 一、創(chuàng)建私有庫 1...
    海文_L閱讀 1,055評論 1 4
  • 前面介紹了如何創(chuàng)建私有庫,大家按上面提供的步驟完成子項目a、b、c、d、e的私有庫部署,本章我們介紹下各個私有庫如...
    海文_L閱讀 3,737評論 2 1
  • 甲方述求:成立一個項目,主項目由5個子項目組成,每個子項目可以獨立運行、發(fā)版、維護,各個子項目的功能無交集,子項目...
    海文_L閱讀 459評論 0 0
  • 前言 本篇主要講解組件化架構(gòu)思想,從零教你如何組件化一個項目。 如果喜歡我的文章,可以關(guān)注我微博:袁崢Seemyg...
    袁崢閱讀 21,463評論 41 339

友情鏈接更多精彩內(nèi)容