系列
一醉锄、注意點(diǎn)
? ? ? ?很多人會(huì)認(rèn)為系統(tǒng)的.framework是動(dòng)態(tài)庫(kù)祝谚,而三方制作的的.framework是靜態(tài)庫(kù)悠瞬。這是不對(duì)的,.framework是靜態(tài)庫(kù)還是動(dòng)態(tài)庫(kù)宵睦,取決于編譯成的Mach-O(編譯的二進(jìn)制文件)记罚。.framework本質(zhì)上并不是一個(gè)庫(kù),它是蘋(píng)果為了方便開(kāi)發(fā)者提供了一種庫(kù)的打包方式壳嚎。.framework會(huì)將Mach-O文件桐智、頭文件和資源包全都包含進(jìn)來(lái),不需要再手動(dòng)整理烟馅。
二说庭、.a靜態(tài)庫(kù)與.framework靜態(tài)庫(kù)的區(qū)別
? ? ? ? 在打包成.a文件的同時(shí),還需要提供頭文件(做過(guò).a靜態(tài)庫(kù)的童鞋能懂)郑趁。這點(diǎn)來(lái)說(shuō)的話(huà)刊驴,.framework就不用這么麻煩。大型的三方靜態(tài)庫(kù)寡润,例如百度地圖SDK等都是以.framework的形式打包的捆憎,.framework編譯完成后,頭文件已經(jīng)自動(dòng)放好了梭纹。
三攻礼、.framework靜態(tài)庫(kù)組成
? ? ? ? .framework靜態(tài)庫(kù)主要由Headers、binary文件栗柒、.bundle三部分構(gòu)成。Headers:包含我們?cè)谥谱?framework的時(shí)候暴露的聲明文件知举。binary文件:是整個(gè).framework的核心瞬沦,所有的實(shí)現(xiàn)代碼都被編譯成了一坨這樣的二進(jìn)制文件,需要注意的是添加的依賴(lài)庫(kù)不會(huì)被編譯進(jìn)來(lái)雇锡,項(xiàng)目中使用此.framework的時(shí)候逛钻,還需要link這些庫(kù)的依賴(lài)。.bundle:資源文件都打包放在這里锰提,在制作.framework的時(shí)候不可以把圖片直接放到項(xiàng)目中曙痘,否則制作好之后圖片在項(xiàng)目中會(huì)非常亂,需要建立一個(gè)bundle文件立肘,將圖片放進(jìn)去边坤,圖片放入bundle之后,[UIImage ImageWithName:]是讀取不到圖片的谅年,需要找到bundle包再拿圖片(bundle名.圖片名)茧痒。
四、下面開(kāi)始制作.framework靜態(tài)庫(kù)
1. File-New-Project融蹂,選擇Cocoa Touch Framework
2. 導(dǎo)入需要打包成.framework的源代碼旺订,并設(shè)置需要暴露的聲明文件(Headers)弄企,注意查看Compile Sources是否依賴(lài)了代碼實(shí)現(xiàn)文件(.m)
3. 設(shè)置編譯模式為release模式,設(shè)置build Architecture為NO等
4. 修改Mach-O格式為Static Library
5. Device分別選中真機(jī)和模擬器区拳,Command+B進(jìn)行編譯拘领,成功之后,Product下的文件會(huì)由紅色變黑色樱调。點(diǎn)到那里约素,右鍵Show In Finder”咎椋可以看到Release-iphoneos(真機(jī)下的.framework) release-iphonesimulator(模擬器下的.framework)兩個(gè)文件夾
6. 合并二進(jìn)制文件业汰,命令與制作.a文件一致,請(qǐng)查看這里
? ? ? ? 別忘了如果你的靜態(tài)庫(kù)里有分類(lèi)菩颖,項(xiàng)目中引入此靜態(tài)庫(kù)的處理方式與.a靜態(tài)庫(kù)一樣样漆。
? ? ? ? 至此我們已經(jīng)完成了.framework中靜態(tài)庫(kù)的制作。這篇只是簡(jiǎn)單介紹了.framework靜態(tài)庫(kù)的制作晦闰,以后還會(huì)慢慢完善放祟,將所有屌絲復(fù)雜的情況都介紹出來(lái)。敬請(qǐng)期待呻右,碼農(nóng)共勉跪妥!