以下分3種做法講解(每個模塊對應(yīng)一個私有g(shù)it倉庫)
- 1.通過cocoapods拉取模塊代碼
- 2.使用git拉取代碼,通過cocoapods將代碼引入到工程
- 3.使用git拉取代碼,引入多project
1.通過cocoapods拉取模塊代碼,如下圖所示

此種方式所引發(fā)的問題就是
1.比如如果我想修改AAAA模塊的代碼,我只能打開AAAA私有pod的project,然后進(jìn)行修改,不能在主app(主app即是正在開發(fā)的LSAppiPhone)內(nèi)進(jìn)行修改,當(dāng)修改完提交到倉庫里還得修改版本號,然后回到主app,通過pod update來獲取修改后的新代碼,得來回切換多個project,如果牽扯的模塊多,那問題更嚴(yán)重了(當(dāng)然有的人說可以在主app修改,修改完拷貝到私有pod的project項目里,這樣是可以但是容易引發(fā)一些問題,拷貝遺漏,而且大量拷貝使用起來也比較麻煩)
2.在調(diào)試的時候比較麻煩,不能結(jié)合主app
2.自己拉取代碼到本地,然后將文件引入


此時可以在主app里進(jìn)行修改home模塊的代碼,然后提交home的git倉庫
會引發(fā)的問題
1.如果只是修改已存在的文件還好,修改完提交,其他同事拉取home的git倉庫即可,但是一旦牽扯到新增文件,其他同事拉取home的git倉庫,只能在finder里看到新增的文件,在主app里看不到新增的文件,因為沒有進(jìn)行重新引用新的文件
1.新增文件,Pods.xcproject也會發(fā)生變化,可以將主app的git倉庫也進(jìn)行提交,此時其他人拉取主app倉庫和home倉庫,就可以獲取到工程引用的新文件配置了
2.不提交主app倉庫,只提交home倉庫,其他人拉取home倉庫,通過注釋pod 'home', :path => '../home'然后終端執(zhí)行pod install,在取消注釋在pod install即可手動將新增的文件引用到主app(如果不注釋,執(zhí)行pod update也是不好使,因為pod update是檢測是否有新版本,沒有新版本則啥也不做,當(dāng)然你可以每次提交都改下podspec里的版本號,但是這樣并不現(xiàn)實,也沒有這么做的)
如果非要使用第2種方式開發(fā),那么新人到公司拉取主工程,主工程并不包含子模塊代碼,需要有個配置文件(存放每個模塊對應(yīng)的git地址),然后寫一個腳本遍歷文件,git拉取子模塊代碼,然后執(zhí)行pod install將子模塊代碼引用到工程
3.采用多project方式開發(fā)
將home.xcodeproj拖拽到主app里,如圖

然后還得做如下設(shè)置,將主app與home關(guān)聯(lián)起來



此時就可以在主app引用home里的頭文件了,此時在用相同辦法引入mine模塊

此時要在mine模塊引用home模塊的類
還需要做以下事情,創(chuàng)建xcconfig文件,project不需要設(shè)置xcconfig,target設(shè)置xcconfig文件即可,如下截圖所示


內(nèi)容如下,可以從主app的config,拷貝以下內(nèi)容過來,就可以引用home的類了,當(dāng)然正常開發(fā)是所有模塊都創(chuàng)建配置文件,操作相同的步驟,就可以互相引用了

或者按下圖所示從主project里的xcconfig拷貝過來,保證所有的project里的內(nèi)容都是一樣的,且Header_search_paths最全包含所有project里的內(nèi)容

正常開發(fā)配置是使用腳本將內(nèi)容統(tǒng)一修改成和主project xcconfig內(nèi)容一樣,僅有一處不同需要特殊處理,具體看下面
子project使用Pods里的代碼
- 如果添加的子project想要使用pods里的代碼,需要修改對應(yīng)的xcconfig以下內(nèi)容,即使不使用,最好也配置一下,以防后續(xù)編譯報錯懵,
-
修完完一處之后將內(nèi)容拷貝下來,然后將所有的子project的xcconfig(debug,release)內(nèi)容都統(tǒng)一修改, 粘貼過來
image.png
其實就是修改PODS_ROOT定義的目錄,因為PODS_ROOT如果直接用從主project拷貝過來的內(nèi)容的話,${SRCROOT}/Pods的定義是指向當(dāng)前project目錄,而不是主project的目錄,而xcconfig里header_search_paths的配置用到PODS_ROOT,所以配置不對的話,就訪問不了主project Pods里的內(nèi)容

第3種開發(fā)方式優(yōu)點(diǎn)
1.一個窗口開發(fā)多個模塊
2.修改哪個模塊就提交哪個模塊,其他人拉取此模塊即可(因為提交的時候連xcodeproj也提交了,所以其他人拉下來會看到新增的文件)
tips
HEADER_SEARCH_PATHS 規(guī)則:
- 先從target尋找配置
- 如果target中配置了
$(inherited),且存在xcconfig,而且xcconfig中設(shè)置了HEADER_SEARCH_PATHS,則$(inherited)代表繼承于xcconfig中的配置,xcconfig中配置的$(inherited)代表繼承于project,所以配置xcconfig,要確保target中配置了$(inherited)才能找到xcconfig中設(shè)置的值 - 如果xcconfig中沒有設(shè)置HEADER_SEARCH_PATHS或者沒有xcconfig文件,則target中配置的
$(inherited)代表繼承于project - project 如果配置了xcconfig文件,那么project中
$(inherited)代表繼承于配置的xcconfig文件中的配置 - project配置的xcconfig文件中
$(inherited)代表繼承于默認(rèn)值,當(dāng)project沒有配置xcconfig文件,project配置的$(inherited)`也代表繼承于默認(rèn)值
總結(jié)
當(dāng)然幾種方式可以靈活運(yùn)用,可以先使用第一種方式拉取代碼,拉取下來的是framework加快編譯,可以切換成源碼形式,此時那個模塊使用第3種方式,對于圖片資源可以有個獨(dú)立的git倉庫管理所有模塊倉庫圖片,因為不需要有產(chǎn)物(framework),使用第2種形式,改完提交,別人拉取即可。

因為圖片資源都是在xcassets里,所以別人拉取代碼的時候會看到里面新增的圖片,這點(diǎn)和代碼不同
注意點(diǎn) 下圖xcconfig文件里的內(nèi)容,在執(zhí)行pod install后,會被pod移除掉,因為那里只會存放通過pod引入的文件,所以我們目前是自己有個腳本封裝了pod install,是先執(zhí)行pod install,在將該有的內(nèi)容填充進(jìn)去

