說到組件化開發(fā),網(wǎng)上可以看到很多資料锥腻,如蘑菇街嗦董、滴滴、淘寶旷太、攜程展懈、豆瓣 、京東的組件化架構(gòu)供璧。但里面介紹比較多的是在現(xiàn)有app如何拆分存崖,組件間如何通信。沒有說組件該如何去搭建睡毒,像網(wǎng)絡(luò)請求来惧,json解析這些每個組件都需要用到的共用工具該如何處理。
找了好多資料演顾,大部分都說使用cocoapods創(chuàng)建私有庫供搀,但是我的模塊都是業(yè)務(wù)模塊,也就是我的有些組件的共用性并不高澳浦痢葛虐!我只是想讓每個業(yè)務(wù)線的代碼解耦,方便裝卸就可以棉钧。像支付寶這樣屿脐,可以插件化的。
如果某個業(yè)務(wù)線停止了,我可以隨時把代碼從項(xiàng)目中拿掉的诵。我還可以根據(jù)需求用現(xiàn)有的組件快速搭建出一個新的app万栅。每個模塊的邏輯都是相對獨(dú)立,可能對應(yīng)的服務(wù)都是不同團(tuán)隊(duì)提供西疤,每個組件可以由不同的團(tuán)隊(duì)開發(fā)烦粒。cocoapods這個私有庫雖然也可以實(shí)現(xiàn),但是我覺的cocoapods大部分的用法都是在一些通用組件上代赁,想我這樣把一個大業(yè)務(wù)線規(guī)為一個組件的好像不是很合適扰她。
cocoapods都做了些什么?pod進(jìn)來的庫是什么加載到主工程呢管跺?
每個pod項(xiàng)目都會有一個.xcworkspace文件這個其實(shí)是蘋果自帶的功能义黎,用來管理組合多個項(xiàng)目。還有一個Pods項(xiàng)目豁跑,這個項(xiàng)目里面就是放著一個個我們pod進(jìn)來的第三方庫和私有“組件”廉涕。這個Pods項(xiàng)目里面的代碼和資源是什么引用到主項(xiàng)目里面的?
沒錯艇拍,一個個組件都被編譯成靜態(tài)庫了狐蜕,只要在主項(xiàng)目里面引用就可以。我們再找下到底是在哪里引用的卸夕?在主項(xiàng)目的Build Phases里面可以看到多了個Embed Pods Frameworks和Copy Pods Resources實(shí)行的就是2個.sh文件层释,這個2個腳本是干嘛的?ssell語言我不懂快集,但是我猜一個是合并靜態(tài)庫贡羔,一個是合并資源文件。為什么這么說个初,因?yàn)槲铱吹街黜?xiàng)目只引用了Pods.framework,那其它的庫呢乖寒?合并到了Pods.framework里面了。
Pods只有一個工程什么可以編譯出那么多個靜態(tài)庫院溺?
我想這應(yīng)該就是你在添加一個組件的時候腳本就會幫你添加一個TARGETS楣嘁,看下項(xiàng)目:
果然是這樣的。這些pods 插件都幫你做了珍逸,所以你都不需要自己去操作逐虚。如果不用pods的話這些就都需要你自己手動去做了,其實(shí)也是比較麻煩的事情谆膳,所以我覺的cocoapods和模塊組件化可以搭配使用叭爱。我demo里面還不算完整,并沒有把cocoapods加進(jìn)去漱病。網(wǎng)絡(luò)上組件框架有些有提到cocoapods涤伐,有些并沒用cocoapods馒胆,也許是項(xiàng)目組件化的比較早,cocoapods還不成熟還是別的原因凝果,這個就不深究了。但是基本可以確定他們每個組件的格式都是靜態(tài)庫睦尽。早期我也是想每個組件是個獨(dú)立的app器净,然后通過某種技術(shù)合并成一個app。但是最后找到的資料都是打成靜態(tài)庫(如果有別的方案希望可以分享下)
下面介紹下我的demo吧当凡!
竟然要把我的業(yè)務(wù)模塊打包成靜態(tài)庫山害,那每個模塊用到一個通用的庫該什么處理?如網(wǎng)絡(luò)請求沿量,json解析等浪慌,這些基本每個模塊都是需要的,難道都要重復(fù)編譯到每個組件里面朴则?不不不权纤,且不說會不會沖突,就是安裝包也該大了不少吧乌妒?那如何共用這些通用組件呢汹想?還有我既然是同一個app那我的界面風(fēng)格應(yīng)該也是差不多的,所以可能每個模塊都需要繼承同一個基類撤蚊。所以我的做法就是把這些每個組建都必須用的都抽出來打成一個通用的組件古掏,給每個業(yè)務(wù)組件依賴。至于資源文件的處理我覺的可以參考cocoapods的原理侦啸。
就寫到這里吧槽唾!更多的坑等著我們?nèi)ゲ龋∫黄鸺佑?/p>