? ? ? ? 一般我們創(chuàng)建多個(gè)子工程多適用于:代碼抽層,業(yè)務(wù)邏輯和數(shù)據(jù)處理高度抽離练般、模塊化矗漾,例如可以將model層和network層抽離,一個(gè)項(xiàng)目只建立一個(gè)公共工程薄料,每次新建項(xiàng)目敞贡,只需要依賴這個(gè)工程就行了,代碼模塊化之后我們可以對(duì)每一個(gè)模塊持續(xù)優(yōu)化集成都办,便于實(shí)現(xiàn)一些更復(fù)雜的需求和結(jié)構(gòu)設(shè)計(jì)(分解項(xiàng)目嫡锌,達(dá)到低耦合)虑稼;
a.?創(chuàng)建正常的主項(xiàng)目(AddSubProjectDemo)以及子工程(subProject)琳钉;這里注意一下子工程創(chuàng)建的時(shí)候是Cocoa Static Library;
b. 添加子工程及其依賴蛛倦;
打開(kāi)主工程添加子工程歌懒,選擇Drag或Add File to "AddSubProjectDemo",結(jié)束后如圖:
c.?在工程target -> Build Phases -> Link Binary With Libraries中添加libsubProject.a
d.在工程target -> Build Settings -> Search Paths -> Header Search Paths中加入子文件目錄;
關(guān)于Header Search Paths這里說(shuō)明一下:
1.$(inherited)
target在設(shè)置自己路徑的時(shí)候如果加了這個(gè)溯壶,那么就是繼承project里設(shè)置的路徑及皂。如果不需要繼承就不加甫男,要不然亂加有可能整混導(dǎo)致路徑錯(cuò)誤。
2.帶引號(hào)的路徑和不帶引號(hào)的路徑
帶引號(hào)主要是預(yù)防路徑里有空格導(dǎo)致本來(lái)一個(gè)路徑變成了兩個(gè)路徑验烧,因?yàn)榭崭穹珠_(kāi)就被解析位兩個(gè)路徑板驳,所以最好路徑帶上引號(hào)。
3.$(SRCROOT) / $(PROJECT_DIR)基本沒(méi)啥區(qū)別碍拆,都是指向*.xcodeproj所在的路徑
4.recursive遍歷該目錄若治,non-recursive默認(rèn)路徑設(shè)置;不遍歷該目錄.? ?
e.工程環(huán)境配置好后感混,本例在子工程的subProject.h 和.m加個(gè)測(cè)試方法端幼,然后在主工程中調(diào)用實(shí)現(xiàn);
一般使用subProject的時(shí)候弧满,都是和workspace一起使用的婆跑,多個(gè)子工程統(tǒng)一由一個(gè)workspace管理, 復(fù)雜項(xiàng)目的拆解可以考慮subProject+workspace+cocoapod 方式組合完成庭呜;(demo參考g ithub上的subproject)