所謂的SDK 就是封裝一個包滓走,讓別人去用垦江,但是看不到你的代碼,在iOS8之前搅方,蘋果禁止用戶封裝成動態(tài)包的形式比吭,基本上都是使用靜態(tài)庫 *.a文件.
iOS8之后,蘋果開放了動態(tài)庫姨涡,現(xiàn)在基本上所有的SDK都是使用framework的形式來封裝
一衩藤、圖片問題
項目需求,需要對控制器以及頁面進(jìn)行封裝涛漂,頁面中包含了所使用到的圖片慷彤,這里就出現(xiàn)了問題。如果把圖片直接放到framework中怖喻,是訪問不到圖片的,需要把圖片打包成 bundle文件 然后使用bundle的名字以及圖片的名字來訪問岁诉。
下面說一下詳細(xì)操作步驟
- 新建一個文件夾锚沸,起個名字,如 SDKSources,然后將所需要的圖片放進(jìn)該文件夾內(nèi)涕癣,重新命名文件夾 哗蜈,給文件夾加個后綴變成bundle文件,即SDKSources.bundle
- 然后將該文件放到項目中,注意不是SDK的項目坠韩,是要使用SDK的項目中(可以把該文件放到和編譯好的庫一個文件夾內(nèi)距潘,導(dǎo)入framework時兩個一起拖進(jìn)項目即可)
- 使用該圖片的方法,比如bundle里面有一個圖片名叫test.png 只搁,我們想要在framework中加載這個圖片音比,可以如下方法使用即可
[UIImage imageNamed:@”SDKSources.bundle/test”]
二、動態(tài)庫和靜態(tài)庫問題
運(yùn)行時碰到報錯:
dyld: Library not loaded: @rpath/GRLiveSDK.framework/GRLiveSDK
Referenced from: /Users/yunzhi/Library/Developer/CoreSimulator/Devices/0B38F7FE-8165-4ACE-AD90-6513309775B8/data/Containers/Bundle/Application/E2A87932-6116-4FC4-9230-9B6A27DCEB26/testMyFrameWork.app/testMyFrameWork
Reason: image not found
解決方案 有兩種
- 修改SDK的項目中氢惋,找到Target –>Build Settings-->Mach-O Type 然后將值改成Static Library 即可
- 修改調(diào)用SDK的項目洞翩,找到Target–>General–>Embedded Binaries 然后將SDK 的framework添加進(jìn)去 運(yùn)行即可
三、分類的編譯處理
在framework中調(diào)用第三方庫焰望,如SDWebImage ,MJRefresh骚亿,是直接寫的分類方法,如果我們直接使用的話熊赖,會報錯来屠,比如使用SDWebImage 設(shè)置網(wǎng)絡(luò)圖片,會報找不到方法的錯誤。
解決方案:在Target-->Build Settings -->Other Linker Flags 設(shè)置值為 - all_load 以及 –Objc 即可
在SDK的開發(fā)過程中俱笛,盡量使用系統(tǒng)自帶的類捆姜,不要使用第三方的庫
四、頭文件問題
將要暴露給用戶的頭文件寫進(jìn)SDK的頭文件中
如#improt<GRLiveSDK/GRLiveMainController.h>等
用戶使用的時候只需要導(dǎo)入我們SDK的頭文件即可嫂粟。