近期項(xiàng)目中可能會(huì)用到framework的封裝,所以抽時(shí)間學(xué)習(xí)了一下。網(wǎng)上有許多關(guān)于這方面的文章,這里介紹下我自己的封裝方式以及需要注意的地方。還有就是從服務(wù)端下載framework加載到項(xiàng)目中實(shí)現(xiàn)熱更新的目的。
創(chuàng)建framework的步驟:
- 選擇Cocoa Touch Framework 創(chuàng)建
- 配置各種Xcode 設(shè)置
- 添加要封裝的代碼
- 編譯framework 合并二進(jìn)制文件
- 添加到主工程 Debug
選擇Cocoa Touch Framework 創(chuàng)建
屏幕快照 2017-08-16 上午10.53.39.png
配置各種Xcode 設(shè)置
1.設(shè)置framework 的最低支持版本 General
-> Deployment info
屏幕快照 2017-08-16 上午10.55.52.png
注意:如果項(xiàng)目設(shè)置的最低版本支持是7.0 則還需要 在Build Settings->Linking->Mach-O Type->Static Library。8.0以上則不必設(shè)置。
- Bitcode支持設(shè)置 讓其支持bit code。在TAGETS的Build setting中搜索Other C Flags,添加命令“-fembed-bitcode”。同樣的設(shè)置在PROJECT中。如果不進(jìn)行以上操作,別人在集成你的framework時(shí)可以編譯,亦可以真機(jī)測(cè)試。唯獨(dú)在打包時(shí)會(huì)發(fā)出警告并打包失敗。警告為framework不支持bitcode!
屏幕快照 2017-08-16 上午11.08.36.png
3.設(shè)置 需要暴露的頭文件 無(wú)論SDK還是Framework都需要暴露公共的頭文件以供使用者讀取和。在TARGETS->Build Phases->Headers里面,有三種類(lèi)別。Public(公共的),這里存放公開(kāi)的頭文件。Private(私有的)這里存放私有的Header,雖然說(shuō)是私有的,但是還是公開(kāi)的頭文件,編譯之后仍然可以framework包里面找到。所以有些Header是不想給別人看到的,必須要放在Project中。
屏幕快照 2017-08-16 上午11.27.18.png
4.設(shè)置armv7s
支持 Build Settings -> Architecture - > Architectures 添加armv7s
并選中。然后設(shè)置Build Active Architecture only
-> NO
編譯framework 合并二進(jìn)制文件
選擇模擬器與真機(jī)分別編譯你的框架
屏幕快照 2017-08-16 上午11.42.48.png
屏幕快照 2017-08-16 上午11.42.37.png
然后在工程目錄中選擇framework
Show in finder
屏幕快照 2017-08-16 上午11.44.47.png
看到兩個(gè)文件夾 分別是真機(jī)與模擬器在
Debug
模式下生成的二進(jìn)制文件
屏幕快照 2017-08-16 上午11.45.01.png
然后需要合并這兩個(gè)文件夾下的 跟你framework同名的二進(jìn)制文件 就是這個(gè)
屏幕快照 2017-08-16 上午11.51.27.png
方法:終端 輸入:lipo -create 模擬器下二進(jìn)制文件路徑 真機(jī)下二進(jìn)制文件路徑 -output 文件夾路徑
在文件夾路徑下會(huì)生成一個(gè)***.lipo 的文件 然后 重命名為你framework的名稱(chēng) 最后拖入真機(jī)或者模擬器生存的文件下 替換原來(lái)的二進(jìn)制文件即可。此時(shí)的framework 就是你需要的。
屏幕快照 2017-08-15 下午2.57.18.png.png
命令
lipo -info 二進(jìn)制文件路徑
:查看它支持的架構(gòu),需要支持這幾個(gè)才可以:armv7
armv7s
i386
arm64
X86_64
添加到主工程 Debug
最后你要做的就是 把替換掉二進(jìn)制文件之后的framework 拷貝出來(lái) 添加到工程中即可。
我封裝好的Framework 參見(jiàn)我的開(kāi)源項(xiàng)目:Cxm的Github
封裝好后為后面的熱更新做準(zhǔn)備 參見(jiàn)我的下一篇文章
參考文章: