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

需求前提:希望App由多個業(yè)務(wù)組件組裝起來,每個業(yè)務(wù)模塊都可單獨(dú)成為子App。
解耦,快速開發(fā)!

流程

  1. 創(chuàng)建遠(yuǎn)程私有庫
  2. 創(chuàng)建業(yè)務(wù)組件項(xiàng)目xxx,并同步到私有庫
  3. 創(chuàng)建組件與外界聯(lián)系媒介xxx_Category項(xiàng)目并同步遠(yuǎn)端倉庫
  4. 編寫代碼
  5. 主項(xiàng)目Podfile本地引用組件項(xiàng)目,并使項(xiàng)目編譯通過.
  6. 將本地引用改為遠(yuǎn)程引用,運(yùn)行項(xiàng)目并編譯成功,組件化完成.

搭建項(xiàng)目

1.創(chuàng)建遠(yuǎn)程私有庫

  • github上開了一個orgnization
  • 在orgnization中創(chuàng)建私有pod源倉庫,命名為XXXPod(用來存放后面打包的私有庫)
  • 在orgnization中創(chuàng)建業(yè)務(wù)組件項(xiàng)目xxx遠(yuǎn)程倉庫
  • 在orgnization中創(chuàng)建業(yè)務(wù)組件項(xiàng)目xxx與外界聯(lián)系媒介xxx_Category遠(yuǎn)程倉庫

如果有多個便創(chuàng)建多個倉庫,目錄如下:


·

2. 創(chuàng)建業(yè)務(wù)組件項(xiàng)目

cd 項(xiàng)目存放目錄
//創(chuàng)建組件項(xiàng)目
pod lib create xxx
  • 根據(jù)提示輸入


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


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

3.創(chuàng)建組件與外界聯(lián)系媒介xxx_Category項(xiàng)目及遠(yuǎn)端倉庫

cd 項(xiàng)目存放目錄
//創(chuàng)建組件項(xiàng)目
pod lib create xxx_Category
  • 根據(jù)提示輸入


    image.png
  • 得到如下工程


    image.png
  • 同步代碼到github上

4.編寫組件工程代碼

以跳轉(zhuǎn)到ExampleViewController為例

1.創(chuàng)建ExampleViewController并編寫需要的業(yè)務(wù)代碼
2.創(chuàng)建Target_Business1(后面會說明為何這么命名)用以跳轉(zhuǎn)到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"];//以設(shè)置title為例
    return viewController;
}

@end

將業(yè)務(wù)代碼文件及Target_Business1文件拖入class文件夾重新pod update, 運(yùn)行成功即可!在這里可以在Example demo中寫個接口跳轉(zhuǎn)到業(yè)務(wù)代碼頁面進(jìn)行調(diào)試!

5.編寫xxx_Category中的對外代碼

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

s.dependency 'CTMediator'

創(chuàng)建對外聯(lián)系接口文件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方法我們可以點(diǎn)擊進(jìn)去查看源碼,可以看到固定寫法Target_XXX,所以在之前我們創(chuàng)建了命名為Target_XXX的文件!

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

6. 將兩個組件項(xiàng)目復(fù)制到主項(xiàng)目工程目錄中,在Podfile中引用組件

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

pod update 運(yùn)行成功即可
image.png

7. 主項(xiàng)目工程中引用

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

8. 將本地引用改為遠(yuǎn)程引用

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

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

git push --tags

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

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

再執(zhí)行:

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

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


image.png

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

9. Podfile引用遠(yuǎn)程組件

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

pod 'Business1'
pod 'Business1_Category'

pod update 運(yùn)行成功即可

10. 更新庫

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

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

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

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

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

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