注意:整個搭建均建立在cocoapod基礎上,假設各位看客已對cocoapods有所了解,再閱讀以下內(nèi)容,本文通過網(wǎng)絡上各個大神的文章加上自己實際操作后,并將具體步驟記下分享給大家,有寫的不好的地方還請賜教。
第一部分:基于遠程GitHub倉庫的搭建
Pod 組件創(chuàng)建步驟
一.創(chuàng)建遠程索引庫,用于存放各個組件的podspec
? ? 1.git官網(wǎng)創(chuàng)建索引倉庫?
下圖如果條件允許也可選擇收費的私有庫(private)


2.將創(chuàng)建的索引庫添加到本地終端命令如下
pod repo add CCSpecs https://github.com/GoldenChanChan/CCSpecs.git
執(zhí)行以上命令后可以在本地查看

二、創(chuàng)建組件倉庫,用于存放單個組件的工程代碼
1.在git官網(wǎng)創(chuàng)建組件倉庫

2.本地創(chuàng)建組件工程
命令行執(zhí)行
pod lib create CCAPIsKit?
執(zhí)行完后會自動打開新創(chuàng)建的組件工程,如下圖將組件相關(guān)代碼拖入class文件夾中

3..接著cd到CCAPIsKit\Example下進行pod install(把剛才拖入到classes里的文件夾pod進來)
4. 編譯組件看是否報錯,編譯通過后需要修改podspecs索引文件,一般需要修改下面幾個問題。
? ( 注:配置podspecs文件是為了在提交到GitHub后做版本控制信息)
? ? ?a. 修改版本號
? ? ?b. 修改項目的簡單概述和詳細描述
? ? ?c.修改homepage和source地址
? ? ?d. 添加依賴庫
? ? ?e.如果依賴庫中包含私有pod,則還需要修改podfile中的source選項,因為podfile默認加載pod官方地址中的庫
修改后的狀態(tài)如下圖所示:


5.提交本地代碼至遠程組件倉庫(cd到組件工程根目錄下,執(zhí)行命令行操作)
git add .
git commit -m“xxx"
git remote add origin遠程代碼倉庫地址(如果已存在,可省略這一步)
git push origin master (git push -u origin master -f?
可強制push,這樣會使遠程修改丟失,一般是不可取的,尤其是多人協(xié)作開發(fā)的時候
)
git tag 版本號 (注:這里的版本號必須和podspec里寫的版本號一致)
git push --tags
6.通過pod spec lint --verbose --allow-warnings命令驗證podspec索引文件
如果組件工程中podspec文件中的s.dependency含有其他域的私有庫依賴時,以上命令會報錯,則添加sources命令,如下事例:
pod spec lint --sources='https://github.com/GoldenChanChan/CCSpecs.git,https://github.com/CocoaPods/Specs' --verbose --allow-warnings
7. 驗證通過后,提交索引文件到遠程索引庫。(更新版本后一定要添加到git倉庫中)
命令行執(zhí)行:pod repo push <本地索引庫> <索引文件名> --verbose --allow-warnings?
e.g: pod repo push CCSpecs? CCAPIsKit.podspec --verbose --allow-warnings
注:私有庫中引用其他庫時使用<>引用,雙引號引用雖然可以在事例項目中正常運行,但在打包成第三方framework工程文件時會編譯報錯,大多是找不到文件路徑
8.私有庫資源文件存放在Assets中

把圖片資源拖入Assets文件夾,需要修改.podspec文件,打開資源的加載路徑,然后執(zhí)行pod install。然后會發(fā)現(xiàn)多了一個Resource的資源文件夾。



運行發(fā)現(xiàn)圖片任然未顯示,這是因為項目中是通過[UIImage imageNamed:@“圖片名"]方式加載本地圖片,這種方式默認是從當前bundle中.car去加載圖片,和XIB的問題一樣也會找不到圖片,找不到是因為當前不存在.car或car中不存在該圖片。(.car是ipa文件安裝后生成的資源文件擴展名)
我們發(fā)現(xiàn)圖片實際是在FFSpecialKit組件下FFSpecialKit.bundle里面,因此需要改變圖片的加載方式.
說明:s.resource_bundles方式會生成bundle文件,所以必須指明圖片的全名和圖片所在bundle的包名.

9.接下來設置字體,將字體相關(guān)文件也拖入到Assets文件夾下,然后修改一下podspec文件。最后執(zhí)行pod install把字體資源pod進來。
修改xxKit.podspec文件如下:
s.resource_bundles = {
? ? ‘xxKit' =>[‘xxKit/Assets/*']
? }
執(zhí)行完pod install之后,字體資源就pod進來了。
加載字體代碼如下:
_categoryLabel =[[UILabel alloc]init];
NSBundle *currentBundle =[NSBundle bundleForClass:[self class]];
NSString *path =[currentBundle pathForResource:@"CODE BOLD.OTF" ofType:nil inDirectory:@“xxKit.bundle”];
[_categoryLabel text:nil textColor:kHexColor_c7a762 fontSize:FONT_SIZE_14 fontName:path];
10.s.resource方式生成.car文件
如果將s.resource_bundles改為s.resource配置,且asset文件夾中存放.xcassets圖片文件夾,則最終framework中不會生成bundle,而是生成.car;
同樣的s.resource配置,如果asset中存放bundle格式的文件,則最終framework中只會有該bundle文件夾,而沒有.car
舉例:s.resource = 'xxKit/Assets/*'
此時如果在framework中加載圖片可以直接寫[UIImage imageNamed:imagename];
如果在framework中加載主工程目錄中的圖片則寫成[UIImage imageNamed:name inBundle:mainBundle compatibleWithTraitCollection:nil];
以上是加載assets中的文件的方法,而加載xib時,由于最終編譯成的framework后xib會轉(zhuǎn)化為nib文件存在framework根目錄下,所以加載方式有所不同,如下:
Class clazz = NSClassFromString(xib對應的類名稱);
NSBundle *currentBundle =[NSBundle bundleForClass:clazz];
? UIViewController *vc =[[clazz alloc]initWithNibName:string bundle:currentBundle];
補充:配置s.resource_bundles 或 s.resource,最終生成的文件方式可能會在不同pods版本中表現(xiàn)的不一樣,要注意在本地ipa安裝包中多觀察一下最終編譯文件的類型是什么樣的;目前測試的是s.resource_bundles配置基本夠用,可包含xcassets文件格式、Model.xcdatamodel文件格式、bundle文件格式、字體文件tiff等等,唯一不同的是xcassets文件會被轉(zhuǎn)化為.car格式的圖片文件;而?s.resource,目測應該是不進行任何轉(zhuǎn)化的資源文件配置項
第二部分:基于本地組件的搭建
一、假設本地已創(chuàng)建包含pods的workspace工程,cd到根目錄下并創(chuàng)建Components等自定義名稱的文件夾,cd到Components文件夾下并在終端執(zhí)行類似如下命令:
命令行執(zhí)行
pod lib create xxKit?
會在當前目錄中創(chuàng)建自定義的組件工程
二、workspace中引用該組件的方式為
在podfile中添加如下引用
pod 'xxKit', :path => 'Components/xxKit'
三、本地組件中引用其他本地組件的辦法
在組件中的podspecs文件中添加如下圖所示代碼

四、以上三點是不同于第一部分基于GitHub搭建方式的地方,其他如資源文件配置和使用方式等都一樣