iOS組件化:1.項目搭建(OC語言)

注意:整個搭建均建立在cocoapod基礎上,假設各位看客已對cocoapods有所了解,再閱讀以下內(nèi)容,本文通過網(wǎng)絡上各個大神的文章加上自己實際操作后,并將具體步驟記下分享給大家,有寫的不好的地方還請賜教。

第一部分:基于遠程GitHub倉庫的搭建

Pod 組件創(chuàng)建步驟

一.創(chuàng)建遠程索引庫,用于存放各個組件的podspec

? ? 1.git官網(wǎng)創(chuàng)建索引倉庫?

下圖如果條件允許也可選擇收費的私有庫(private)


GitHub中創(chuàng)建索引倉庫
已建好的倉庫

2.將創(chuàng)建的索引庫添加到本地終端命令如下

pod repo add CCSpecs https://github.com/GoldenChanChan/CCSpecs.git

執(zhí)行以上命令后可以在本地查看


遠程索引倉庫映射到本地后

二、創(chuàng)建組件倉庫,用于存放單個組件的工程代碼

1.在git官網(wǎng)創(chuàng)建組件倉庫


創(chuàng)建GitHub組件倉庫

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)如下圖所示:


本地組件的podspec文件配置


引用組件時需要在source處添加組件所在的索引庫地址

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的資源文件夾。


直接在assets中添加圖片的配置方式


直接添加bundle文件的配置方式
添加進asset文件夾下并pod install后的目錄

運行發(fā)現(xiàn)圖片任然未顯示,這是因為項目中是通過[UIImage imageNamed:@“圖片名"]方式加載本地圖片,這種方式默認是從當前bundle中.car去加載圖片,和XIB的問題一樣也會找不到圖片,找不到是因為當前不存在.car或car中不存在該圖片。(.car是ipa文件安裝后生成的資源文件擴展名)

我們發(fā)現(xiàn)圖片實際是在FFSpecialKit組件下FFSpecialKit.bundle里面,因此需要改變圖片的加載方式.

說明:s.resource_bundles方式會生成bundle文件,所以必須指明圖片的全名和圖片所在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搭建方式的地方,其他如資源文件配置和使用方式等都一樣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容