前提: 在開發(fā)項目中,我們經(jīng)常會用到一些第三方的sdk,不管是以.a或是.framework的形式,當(dāng)然我們也可能去做一些這種sdk供其他人來使用,我們是用到了framework的形式,簡單的說下
Step 1 ? 新建一個framework工程,一般封裝成SDK的話,后期維護是不可避免的,所以工程名字建議起的好一點
Step 2 ?編譯
我以MJExtension為例,將MJExtension拖入后在模擬器/真機的環(huán)境下編譯(運行)一下,首先看到如下圖,名字字體變黑,說明你的項目沒有問題,可以進入下一步。
Step 3 ? 配置
1、系統(tǒng)會自動生成一個.h文件,(我的就是Test.h,可以找到),用來放置一些公開的頭文件,刪除會報錯,暫時留著吧,不想用不要公開就好了
2、工程文件的配置,如圖:
3、公開頭文件,把你想要暴露給使用者的頭文件統(tǒng)統(tǒng)暴露出來,從左面拖也好,從下面拽上來也好,都可。結(jié)果如下圖:
4、pch文件的配置,plist文件的配置,按照你項目配即可
Step 4 ?打包、合并
1、打包
在真機和模擬器的環(huán)境下分別編譯,注意,應(yīng)該是Release版本,因為畢竟是要給其他使用著。
都運行好之后,在你的項目中framework處Show in Finder,找到你的framework,如下圖,先不要關(guān)掉,開始合并
2、合并
1、檢查架構(gòu)支持情況,以模擬器編譯的framwork為例
打開終端 輸入
lipo -info xxxxx
查看支持的架構(gòu),xxxxxx下面這個東東的文件路徑,如圖,拖進去
回車,結(jié)果如下圖:
2、合并
lipo -create xxxxxx zzzzzzz -output xxxxxx
xxxxxx 指真機路徑(output后面的也是) ? zzzzz 指的是模擬器路徑?,拖入的都是上面那個
回車
合并好后,再把合成后的framework(在真機路徑下) 使用命令lipo -info xxxxx?重新檢查一遍架構(gòu),這個時候應(yīng)該是支持?armv7 i386 x86_64 arm64 的
至此,打包的工作已經(jīng)完成!祝賀!!!
bundle文件的生成
1、Xcode創(chuàng)建
2、直接創(chuàng)建一個文件夾,把后綴名改為.bundle,點擊添加即可
讀取圖片或文件的方法就要換掉了,以圖片為例:
1、使用于文件類型
? ? NSString *bundle = [[NSBundle mainBundle] pathForResource:@"Resources" ofType:@"bundle"];
? ? ?NSString *strC = [[NSBundle bundleWithPath:bundle] pathForResource:imgName ofType:@"png"];
? ? ?strC = [[NSBundle bundleWithPath:bundle] pathForResource:[imgName stringByAppendingString:@"@2x"];
? ? ?UIImage *img = [UIImage imageWithContentsOfFile:strC];
2、適用于圖片
[UIImage imageNamed:imgName inBundle:[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"Resources" ofType:@"bundle"]] compatibleWithTraitCollection:nil]
解決第三方庫文件沖突的問題
在我們打包sdk的時候,可能會用到一些第三方,如SDWebImage、AFN這些東西,如果項目中沒有添加_all_load字段,那么恭喜你,不用改,但如果有或者報類名重復(fù)的錯誤,那么你就要改名字了
解決方法:
1、刪除_all_load字段,不推薦,因為會使靜態(tài)庫中的Category中的方法失效
2、利用終端刪除framework中的沖突文件(需要各位自己去網(wǎng)上找,因為第三方被我們修改了很多,所以沒有采用這種方法)
3、在fromework源項目中建立PCH文件,把類名改掉,就像
#define MJProperty ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?XXXMJProperty
#define MJFoundation ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?XXXXRLVMJFoundation
很多,要改好多,你最好在項目中添加一個Target,用來做Demo,以便進行!
后續(xù)修改、更新......