打包Framework (含第三方庫沖突)、boundle

前提: 在開發(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ù)修改、更新......



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容