日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

git公有转私有_【IT新手之路】客户端组件化之私有库搭建

發(fā)布時(shí)間:2025/3/20 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git公有转私有_【IT新手之路】客户端组件化之私有库搭建 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

在組件化之前,小花錢包 App 項(xiàng)目代碼,在代碼結(jié)構(gòu),代碼質(zhì)量和層級(jí)劃分上都處于一個(gè)比較亂的狀態(tài)。這樣的項(xiàng)目條件在業(yè)務(wù)發(fā)展不是很快的時(shí)候,是可以適應(yīng)需求的,并且能一定程度地保證開發(fā)效率。但隨著業(yè)務(wù)方向的多樣和產(chǎn)品需求的快速迭代要求,這時(shí)單一工程開發(fā)模式就會(huì)顯露出一些弊端:
  • 耦合比較嚴(yán)重(因?yàn)闆]有明確的約束,「組件」間引用的現(xiàn)象會(huì)比較多)

  • 容易出現(xiàn)沖突,包括代碼沖突和布局沖突等情況(尤其是使用 Xib和storybord,還有就是 Xcode Project)

  • 項(xiàng)目拓展性不高,復(fù)用和可移植性不強(qiáng)

  • 業(yè)務(wù)方的開發(fā)效率不夠高(只關(guān)心自己的組件,卻要編譯整個(gè)項(xiàng)目,與其他不相干的代碼糅合在一起)

為了解決這些問題,就采取了「組件化」策略,注:這里的組件化,也就是大家說的『模塊化』,不是在主工程中用文件夾來區(qū)分模塊,而是指將獨(dú)立模塊抽調(diào)成 CocoaPods 庫、或者其他形式的庫文件,成為一個(gè)獨(dú)立工程,每個(gè)組件即代表一個(gè) CocoaPods 私有庫。

??一、為什么要組件化?有哪些優(yōu)勢(shì)?

1.組件和組件之間沒有明確的約束;

2.組件化采用cocoapod管理,同屬于git私有庫,便于代碼復(fù)用和管理,解決人多(更好的協(xié)作)、需求多(更好的功能模塊劃分)的問題;

3.組件單獨(dú)開發(fā)、單獨(dú)測(cè)試,不用揉入主項(xiàng)目中開發(fā),測(cè)試也可以針對(duì)性的測(cè)試;

4.解決項(xiàng)目模塊間的代碼耦合問題;

5.自由選擇開發(fā)姿勢(shì)(MVC / MVVM)

6.提高業(yè)務(wù)開發(fā)效率

?二、怎么劃分組件化?

1.基礎(chǔ)組件

1.按功能分庫,不涉及產(chǎn)品業(yè)務(wù)需求,跟庫Library類似

2.通過良好的接口供上層業(yè)務(wù)組件和功能組件調(diào)用

3.不寫入產(chǎn)品定制邏輯,通過擴(kuò)展接口完成定制

2.功能組件

1.App產(chǎn)品內(nèi)定制通用組件;(各個(gè)業(yè)務(wù)模塊依賴使用,但需要保持好定制擴(kuò)展的設(shè)計(jì))

2.公共通用組件,能夠完成某個(gè)功能點(diǎn),例如輪播器組件;

3.對(duì)外暴露數(shù)據(jù)交互接口,內(nèi)部實(shí)現(xiàn)細(xì)節(jié)只有組件自己清楚,數(shù)據(jù)交互方面一般使用代碼、block和屬性來完成,不建議組件中使用通知進(jìn)行交互,不利于維護(hù)管理;

3.業(yè)務(wù)組件

1.業(yè)務(wù)功能間相對(duì)獨(dú)立,相互間沒有Model共享的依賴;

2.業(yè)務(wù)之間的頁面可以直接進(jìn)行跳轉(zhuǎn);

3.業(yè)務(wù)之間的邏輯Action調(diào)用只通過由當(dāng)前業(yè)務(wù)模塊提供,各自與后臺(tái)交互;

?三、組件化工程需要解決的問題

資源打包

1.對(duì)于 UI 界面,需要做的是資源打包,在模塊拆分中,要非常注意資源分割。因?yàn)闃I(yè)務(wù)模塊的劃分,不僅僅是是代碼抽出,也有資源抽出。

2.資源庫包括但不僅限于:.xib 文件、聲音資源、圖片資源、純文本文件以及視頻資源

3.所有的資源文件,應(yīng)當(dāng)單獨(dú)創(chuàng)立 Res 文件夾,放入其中,并在 .podspec 中表明資源文件路徑 s.resources = ["Source/*/.xib", "Source/Res/*.xcassets"]

??四、組件維護(hù)問題?

1.gitLab統(tǒng)一管理

2.組件的維護(hù)持續(xù)更新是需要一直做的,完善組件功能,優(yōu)化組件性能,提高組件適用范圍

3.組件的管理跟git的tag是一一對(duì)應(yīng),每個(gè)tag版本都要有對(duì)應(yīng)的記錄

實(shí)操部分(以網(wǎng)絡(luò)庫組件為例說明)

??一、 設(shè)計(jì)理念

關(guān)于網(wǎng)絡(luò)通信模塊的設(shè)計(jì),我個(gè)人認(rèn)為應(yīng)該是每一個(gè)HTTPS請(qǐng)求都應(yīng)該獨(dú)立互不干擾,就是你封裝的POST/GET方法都會(huì)創(chuàng)建一個(gè)臨時(shí)的對(duì)象,而長連接一般只維持一個(gè)實(shí)例對(duì)象采用單例的方式創(chuàng)建。我會(huì)為每一個(gè)HTTPS 接口請(qǐng)求創(chuàng)建一個(gè)API對(duì)象,在里面請(qǐng)求數(shù)據(jù),當(dāng)然了為了避免請(qǐng)求代碼的重復(fù)編寫可以建立一個(gè)BASE API類,子類調(diào)用父類的請(qǐng)求方法就行了,不同的只是接口與參數(shù)。

? ?二、 終端操作,組件創(chuàng)建

準(zhǔn)備工作(中心庫的創(chuàng)建)

1.首先在gitLab上創(chuàng)建一個(gè)項(xiàng)目存放私有Repo源,repo地址https://code.xhqb.io/appComponent/XHSpecs.git ,這個(gè)地址也叫中心庫,以后私有組件都會(huì)存放在這里;

2.本地添加私有源 終端執(zhí)行命令pod repo add XHSpecs https://code.xhqb.io/appComponent/XHSpecs.git(這個(gè)步驟已經(jīng)完成,后續(xù)無需再執(zhí)行)

3.以上操作完成 進(jìn)入~/.cocoapods/repos目錄下至少會(huì)有2個(gè)文件夾XHSpecs和master, master文件下面存放的是公有源文件,XHSpecs目錄下存放我們私有源文件

4.基本準(zhǔn)備工作完成 ?#### 創(chuàng)建組件項(xiàng)目(以 XHNetwork 為案例)

1.0 新建項(xiàng)目XHNetwork,并在XHNetwork.xcodeproj同級(jí)目錄中添加Classes文件夾,用來存放pod需要導(dǎo)入的文件。

2.0 終端cd至XHNetwork目錄下執(zhí)行命令pod spec create XHNetwork。

3.0 執(zhí)行命令vim XHNetwork.podspec編輯podspec文件,具體如何編輯可參考第三部分spec文件寫法說明。

4.0 編輯完成XHNetwork.podspec文件之后,執(zhí)行pod lib lint --allow-warnings命令,進(jìn)行本地驗(yàn)證,驗(yàn)證通過執(zhí)行以下步驟。

5.0 執(zhí)行g(shù)it操作:

5.1 git add .

5.2 git commit -m 'log'

5.3 git remote (如果沒有分支origin,執(zhí)行5.3.1命令)

5.3.1?git remote add origin https://code.xhqb.io/appComponent/XHNetwork.git

5.4 git push origin master

5.5 git tag -a 'version' -m 'log' tag一定要和podspec中的version一致

5.6 git push --tags --tags為了把剛才添加的tag提交上去

6.0 執(zhí)行命令 pod spec lint --allow-warnings 此步驟同步驟4操作一致,步驟4為本地驗(yàn)證,步驟6為spec文件驗(yàn)證,會(huì)注冊(cè)驗(yàn)證結(jié)果

6.1 如果此私有組件依賴于其他私有組件,那么執(zhí)行命令改為 pod spec lint --allow-warnings --source=https://code.xhqb.io/appComponent/XHSpecs.git,命令后面跟上私有源地址

7.0 執(zhí)行命令pod repo push XHSpecs XHNetwork.podspec --verbose --allow-warnings 注:XHSpecs即私有源中心倉庫,此步驟為將驗(yàn)證成功的podspec索引文件上傳到中心庫

7.1 如果步驟6命令有跟私有源地址,那么此命令也應(yīng)該加上私有源地址

8.0 除了步驟6和步驟7這種驗(yàn)證上傳方式,另外提供trunk驗(yàn)證方式;

8.1 pod trunk register 郵箱地址 ‘用戶名’ —verbose //郵箱注冊(cè)trunk

8.2 進(jìn)入郵箱,點(diǎn)擊trunk鏈接驗(yàn)證

8.3 驗(yàn)證成功之后,執(zhí)行 pod trunk push XHNetwork.podspec ?####?

?三、spec文件寫法說明 ?

?Pod::Spec.new do |s|?

  • ?name: 組件名稱 s.name = "XHNetwork"?

  • ?version : 組件版本,和項(xiàng)目tag一致,install命令會(huì)根據(jù)這個(gè)版本號(hào)去下載指定tag版本的代碼 s.version = "0.0.7"?

  • summary : 摘要,長度一般比description短 s.summary = "XHNetwork"

  • description : 組件描述,文本長度必須比summary文本長度長 s.description = "A short description of XHNetwork lib" ?

  • ?homepage : 組件主頁地址 s.homepage = "https://code.xhqb.io/appComponent/XHNetwork" ?

  • license : 授權(quán)協(xié)議,默認(rèn)填寫為MIT` s.license = "MIT" # s.license = { :type => "MIT", :file => "FILELICENSE" } ?

  • author : 作者、郵箱 s.author = { "趙正華" => "zhaozhenghua@xhqb.com" }?

  • ?source : 項(xiàng)目git地址,tag值與s.verison版本一致 s.source = { :git => "https://code.xhqb.io/appComponent/XHNetwork.git", :tag => "#{s.version}" } ?

  • 源文件 Classes文件夾必須放在根目錄下才能被找到 s.sourcefiles = "Classes/.{h,m}" #spec.source_files = 'Classes//.{h,m}', 'MoreClasses/*/.{h,m}' ?

  • 公有頭文件 #s.publicheader_files = "Classes/*/.h"

匹配規(guī)則如下:

1.*匹配所有文件

2.c*匹配以名字C開頭的文件

3.*c匹配以名字c結(jié)尾的文件

4.c匹配所有名字包含c的文件

5.**文件夾以及遞歸子文件夾

6.?任意一個(gè)字符(注意是一個(gè)字符)

7.[set] 匹配多個(gè)字符,支持取反

8.{p,q} 匹配名字包括p 或者 q的文件?

  • 圖片及音頻資源文件的加載方式 #spec.resource = 'Resources/HockeySDK.bundle' #spec.resources = ['Images/.png', 'Sounds/'] ?

  • 是否是ARC,默認(rèn)true,如果不是,會(huì)自動(dòng)添加-fno-objc-arc compiler flag s.requiresarc = true ?支持的平臺(tái),如果不寫默認(rèn)支持所有平臺(tái),以下表示只支持ios平臺(tái),系統(tǒng)版本8.0以上 s.platform = :ios, "8.0" ?

  • 依賴的系統(tǒng)的框架 s.frameworks = 'QuartzCore', 'CoreData' ?

  • 如果在高版本的OS中調(diào)用新增的功能,并且在低版本的OS中依然能夠運(yùn)行,那么就要用到weakframeworks.如果引用的某些類或 者接口在低版本中并不支持,對(duì)于不支持的接口,可以在運(yùn)行的時(shí)候判斷,這樣程序不會(huì)出錯(cuò),如果不weak引用,程序在低版本下啟動(dòng)的時(shí)候就會(huì)崩潰掉 s.weakframework = 'MessageUI' ?

  • 配置信息,根據(jù)個(gè)人需要填寫 # s.xcconfig = { "HEADERSEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } ?

  • 依賴的第三方, 沒有指定第三方依賴庫,默認(rèn)去下載最新的庫版本 s.dependency 'XHAFNetworking' ?

? ?四、私有組件配置用法

結(jié)尾

上面就是在小花錢包項(xiàng)目中進(jìn)行 模塊化/組件化 的搭架操作流程,希望這篇文章能對(duì)有同樣需求的人有所幫助。如果各位在看了這篇文章之后還有什么疑問或者是發(fā)現(xiàn)有什么問題都可以在文后面留言。?共同進(jìn)步,Best wishes!

總結(jié)

以上是生活随笔為你收集整理的git公有转私有_【IT新手之路】客户端组件化之私有库搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。