創(chuàng)建依賴模塊工程
上一篇寫了關(guān)于項(xiàng)目子工程化的基本配置操作毒涧。這一篇將創(chuàng)建依賴模塊工程的一些操作背蟆。
demo git地址
廢話就不多說了矢赁,直接上流程豌研。
一妹田、創(chuàng)建WDProjects_dev.xcworkspace
1、創(chuàng)建一個文件夾WDProjects鹃共,存放所有工程
2鬼佣、在該文件夾下面創(chuàng)建一個WDProjects_dev.xcworkspace文件
創(chuàng)建完成后,保存在剛才的文件下霜浴。
二晶衷、創(chuàng)建子工程
這里的子工程我是以 framework的形式創(chuàng)建的,分別創(chuàng)建了WDUser阴孟、WDShare兩個子工程晌纫。同樣放在剛才的文件夾路徑下面。
為什么選用framework
.a是一個純二進(jìn)制文件永丝,而.framework中除了有二進(jìn)制文件之外還有頭文件和資源文件锹漱。
.a文件不能直接使用,至少要有.h文件配合慕嚷,.framework文件可以直接使用哥牍。
.a + .h + sourceFile = .framework毕泌。
framework可以是動態(tài)庫,也可以是靜態(tài)庫嗅辣。
所述撼泛,如果是.a的話,資源和頭文件與庫就會很零散澡谭,被弄亂了都不知道愿题;而framework可以很好的把一個所需的文件庫集合在一起。同時(shí)framework既能做動態(tài)庫也能做靜態(tài)庫译暂,在庫類型的切換上有天然的優(yōu)勢抠忘。故而選framework更為友好撩炊。
靜態(tài)庫在程序編譯時(shí)會被鏈接到目標(biāo)代碼中外永,程序運(yùn)行時(shí)將不再需要該靜態(tài)庫,所以靜態(tài)庫是相對于編譯期的拧咳;動態(tài)庫在程序編譯時(shí)并不會被鏈接到目標(biāo)代碼中伯顶,只是在程序運(yùn)行時(shí)才被載入,所以動態(tài)庫是相當(dāng)于運(yùn)行期的骆膝。
靜態(tài)庫在鏈接時(shí)會被完整的復(fù)制到可執(zhí)行文件中祭衩,被多次使用就有多份拷貝;動態(tài)庫在鏈接時(shí)不復(fù)制阅签,程序運(yùn)行時(shí)由系統(tǒng)動態(tài)加載到內(nèi)存掐暮,系統(tǒng)只加載一次,主APP和App Extension之間共享動態(tài)庫政钟,節(jié)省內(nèi)存路克。
靜態(tài)庫沒有自己的獨(dú)立空間,用的是主APP的空間(剛才也說到养交,靜態(tài)庫是在編譯的時(shí)候復(fù)制過去的)精算,所以會有符號重復(fù)的問題,比如庫用了AFN碎连,主工程也用了AFN灰羽,在編譯的時(shí)候就會報(bào)符號重復(fù)的問題;而動態(tài)庫是動態(tài)加載的鱼辙,有自己的獨(dú)立空間廉嚼,所以能內(nèi)置bundle,也不會出現(xiàn)符號重復(fù)的問題
注意:
動態(tài)庫上架不能帶模擬器版本倒戏,所以上架的時(shí)候不要合并模擬器版本怠噪。
iOS8開始支持動態(tài)庫了,所以動態(tài)庫是能上架的峭梳,請放心使用動態(tài)庫吧舰绘。
如果動態(tài)庫編譯報(bào)錯蹂喻,在SDK的General - Linked Framework and Librarles里點(diǎn)擊“+”號,搜索libSystem并添加進(jìn)去捂寿。
三口四、添加組合
1、打開剛才的WDProjects_dev.xcworkspace 文件秦陋,添加工程到workspace
依次添加你想要的工程到WDProjects_dev
2蔓彩、重新打開WDProjects_dev.xcworkspace,會看到基本工程已添加完畢驳概。但是到這里還沒有完成赤嚼,我們的WDProjects為主工程,WDShare顺又、WDUser為子工程更卒,那么假如我們主工程里面要使用子工程里面的類,目前還是不能使用的稚照。
四蹂空、添加依賴關(guān)系
我們讓 主工程WDProjects依賴WDShare、WDUser子工程果录。在主工程里面分別調(diào)用WDShare上枕、WDUser里面的API。
WDShare 依賴WDUser子工程弱恒,在WDShare公里里面調(diào)用 WDUser里面的AIP辨萍。
明確上面的要求后,開始添加依賴關(guān)系返弹。
1锈玉、首先在WDProjects targets里面添加WDShare、WDUser動態(tài)庫琉苇,為主工程編譯使用嘲玫。
2、添加完動態(tài)庫后并扇,直接在主工程里面引用
import "WDUserLog.h"
import "WDShareData.h"
會報(bào)錯去团,這是因?yàn)闆]有設(shè)置路徑的問題。
3穷蛹、設(shè)置通配路徑
在主工程 project——>build settings ——>header search paths 設(shè)置路徑$(SRCROOT)/.. 選recursive
4土陪、開始使用
現(xiàn)在可以在主工程里面引用
import "WDUserLog.h"
import "WDShareData.h"
愉快的使用子工程的api了。
5肴熏、WDShare 依賴WDUser子工程鬼雀,在WDShare公里里面調(diào)用 WDUser里面的AIP,操作方式同上蛙吏,不用多說了源哩。
結(jié)語:下一篇工程化使用pod集成鞋吉。