當(dāng)一個(gè)工程隨著時(shí)間的推移,開發(fā)人員的增加胆屿,工程變得碩大且不好維護(hù)箭养,提交代碼沖突重重慕嚷,是時(shí)候考慮項(xiàng)目的組件化了。若從一開始就走組件化之路絕逼是一個(gè)好辦法毕泌。
組件化的目的是為了達(dá)到解耦喝检,多工程聯(lián)編更是達(dá)到了物理解耦,最理想的是各種模塊可以隨意的應(yīng)用到其他的工程撼泛。每天蹲坑的時(shí)候也會在思索如何去走這條道路挠说。蘑菇街以及反革命主義者的文章給我啟發(fā)很大,綜合兩者不失為一種好辦法愿题。但本文章主要是介紹如何多工程聯(lián)編损俭,這幾天抽空寫了個(gè)Demo(寫的比較隨意蛙奖,大家忽略細(xì)節(jié)),廢話不多說直接上步驟杆兵。
首先上下工程效果圖:
建立一個(gè)新工程:
工程少不了pods吧雁仲,不然第三方的東西管理腫么辦,我們偷偷的跑到根目錄下去添加一下琐脏。為了方便我下載了一個(gè)pods的客戶端攒砖,哈哈,只是不能好好的用命令行裝逼了:
打開WorkPlace將Enable Bitcode設(shè)為No:
接下來就是各個(gè)組件Framework的建立了:
把他添加到WorkPlace里面來:
接下來的幾個(gè)設(shè)置很關(guān)鍵了:
BuildPhases中添加CopyFile日裙,在里面把編譯出來的模塊Framework吹艇,Bundle拷貝到App的ModuleFrames目錄下,以便其他引用他的工程可以方便加入:
在CommonModule里面添加一點(diǎn)公用的東西:
把對外的頭文件拖到public里面:
單獨(dú)編譯一下CommonModule工程,主工程就可以導(dǎo)入CommonModule使用啦:
主工程將他引入:
主工程編譯:
要是Framework里面有資源文件怎么辦,主工程怎么去調(diào)用政钟,組件工程之前能不能相互調(diào)用?
接下來我們多建立幾個(gè)組件工程并且添加部分資源:
添加ModuleOne工程要使用的資源以Storyboard為例:
Build Resource資源:
添加ModuleOne的Framework一個(gè)組件建立完成养交,按照此方法可以建立多個(gè)組件:
開發(fā)協(xié)作問題,自己負(fù)責(zé)的業(yè)務(wù)模塊可以單獨(dú)編譯瓢宦,并不影響其他業(yè)務(wù)模塊碎连。如果需要全部編譯,一個(gè)一個(gè)去編譯會顯得有點(diǎn)SB驮履。我們可以建立一個(gè)Target Build所有的模塊也可以自己調(diào)整Framework的編譯順序鱼辙,太棒了:
這樣就可以實(shí)現(xiàn)全部工程的編譯了,需要注意玫镐,模擬器跟真機(jī)切換時(shí)候需要分別編譯倒戏,打包發(fā)布不能用模擬器編譯。
子工程需要添加第三方庫時(shí):
把第三方Framework文件通過copy files拷貝到ModuleFrameworks里和自己Framework文件放在一起恐似。
如果新增了第三方庫和Bundle杜跷,需在copy files中添加拷貝文件。
模塊內(nèi)新增了圖片等資源文件矫夷,需在Bundle的Resourse Target中將新文件添加到Copy Bundle Resource中才會被打到Bundle包里葛闷。
附上工程目錄圖:
PS:
特別鳴謝(金鴻,俊華)
大家有好的建議或者幫助歡迎留言(模塊工程間的共用資源問題歡迎大家討論留言)
Demo地址:https://pan.baidu.com/s/1hsKFMNa
如需轉(zhuǎn)載標(biāo)明出處
各位看官覺得有用的話就請Yes-Cui喝瓶水吧双藕,打賞一個(gè)