ios 基于CTMediator的組件化搭建歷程

需求前提:希望App由多個業務組件組裝起來,每個業務模塊都可單獨成為子App。
解耦,快速開發!

流程

  1. 創建遠程私有庫
  2. 創建業務組件項目xxx,并同步到私有庫
  3. 創建組件與外界聯系媒介xxx_Category項目并同步遠端倉庫
  4. 編寫代碼
  5. 主項目Podfile本地引用組件項目,并使項目編譯通過.
  6. 將本地引用改為遠程引用,運行項目并編譯成功,組件化完成.

搭建項目

1.創建遠程私有庫

  • github上開了一個orgnization
  • 在orgnization中創建私有pod源倉庫,命名為XXXPod(用來存放后面打包的私有庫)
  • 在orgnization中創建業務組件項目xxx遠程倉庫
  • 在orgnization中創建業務組件項目xxx與外界聯系媒介xxx_Category遠程倉庫

如果有多個便創建多個倉庫,目錄如下:


·

2. 創建業務組件項目

cd 項目存放目錄
//創建組件項目
pod lib create xxx
  • 根據提示輸入


    image.png
  • 得到如下工程:
    Class:存放組件對外接口
    Assets:存放資源


    image.png
  • 同步代碼到github上(這里就不做多說了)

3.創建組件與外界聯系媒介xxx_Category項目及遠端倉庫

cd 項目存放目錄
//創建組件項目
pod lib create xxx_Category
  • 根據提示輸入


    image.png
  • 得到如下工程


    image.png
  • 同步代碼到github上

4.編寫組件工程代碼

以跳轉到ExampleViewController為例

1.創建ExampleViewController并編寫需要的業務代碼
2.創建Target_Business1(后面會說明為何這么命名)用以跳轉到ExampleViewController
@interface Target_Business1 : NSObject

- (UIViewController *)Action_viewController:(NSDictionary *)params;

@end




#import "Target_Business1.h"
#import "ExampleViewController.h"

@implementation Target_Business1

- (UIViewController *)Action_viewController:(NSDictionary *)params
{
    ExampleViewController *viewController = [[ExampleViewController alloc] init];
    viewController.title = params[@"title"];//以設置title為例
    return viewController;
}

@end

將業務代碼文件及Target_Business1文件拖入class文件夾重新pod update, 運行成功即可!在這里可以在Example demo中寫個接口跳轉到業務代碼頁面進行調試!

5.編寫xxx_Category中的對外代碼

注意xxx_Category需要依賴CTMediator,在 XXX_Category.podspec文件中添加依賴:

s.dependency 'CTMediator'

創建對外聯系接口文件CTMediator+XXX

#import <CTMediator/CTMediator.h>

NS_ASSUME_NONNULL_BEGIN

@interface CTMediator (BUSINESS1_CATEGORY)

- (UIViewController *)toBusiness1WithParam:(NSDictionary *)param;

@end

NS_ASSUME_NONNULL_END


@implementation CTMediator (BUSINESS1_CATEGORY)

- (UIViewController *)toBusiness1WithParam:(NSDictionary *)param{
    return [self performTarget:@"Business1" action:@"viewController" params:param shouldCacheTarget:NO];
}

@end

這里用到的performTarget方法我們可以點擊進去查看源碼,可以看到固定寫法Target_XXX,所以在之前我們創建了命名為Target_XXX的文件!

運行成功后將CTMediator+XXX拖入Classes文件夾,重新pod update,運行!

6. 將兩個組件項目復制到主項目工程目錄中,在Podfile中引用組件

  pod 'Business1',:path => 'Business1'
  pod 'Business1_Category',:path => 'Business1_Category'

pod update 運行成功即可
image.png

7. 主項目工程中引用

#import <CTMediator+BUSINESS1_CATEGORY.h>
UIViewController *viewController = [[CTMediator sharedInstance] toBusiness1WithParam:@{@"title":@"業務1"}];
        [self.navigationController pushViewController:viewController animated:YES];

8. 將本地引用改為遠程引用

  1. 進入私有庫工程找到XXX.podspec,并根據具體需要修改,如:
    image.png
  2. 將組件代碼都push到遠程庫
  3. 上傳到我們的私有pod源倉庫(也就是第一步我們創建的私有pod源倉庫)
cd 到私有庫文件

git tag 0.1.0(注意,這里的tag必須和.podSpec文件的版本一致)

git push --tags

pod repo add 源倉庫名稱 源倉庫遠程地址(第一步創建的私有pod源倉庫地址)
如:pod repo add ConfigPrivatePod https://github.com/Baffin-TM/ConfigPrivatePod.git

這樣我們可以在.cocoapods中看到:
image.png

再執行:

pod repo push ConfigPrivatePod Business1.podspec --allow-warnings

可以看到github源倉庫ConfigPrivatePod以及本地.cocoapods中的ConfigPrivatePod將會將會多出一個文件:


image.png

image.png
  1. 同上,將Business1_Category上傳到遠程私有庫
git tag 0.1.0  
git push --tags
#無需在pod repo add 源倉庫名稱 源倉庫遠程地址
pod repo push ConfigPrivatePod Business1_Category.podspec --allow-warnings

9. Podfile引用遠程組件

#一定要加遠程索引庫地址
source 'https://github.com/Baffin-TM/ConfigPrivatePod.git'
source 'https://github.com/CocoaPods/Specs.git'

pod 'Business1'
pod 'Business1_Category'

pod update 運行成功即可

10. 更新庫

1.組件中podspec文件把版本提高一個

2.提交代碼到遠端庫,打上tag,tag和podspec文件里面版本一樣

3.pod repo push 源倉庫名稱 XXX.podspec --allow-warnings

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容