Latest 0.1.0
Homepage https://github.com/hujewelz/Ant
License MIT
Platforms ios 8.0
Authors

CI Status
Version
License
Platform

概述

Ant 是用于 iOS 应用组件化实现方案。使用了协议注册的方式来实现组件解耦。
作者在 本文 中对组件化解耦方案做了简单的分析。

组件生命周期管理

Ant 为组件提供了完整的生命周期方法,用于与宿主项目进行必要的通信。目前只包含 UIApplicationDelegate 中的所有方法。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[Ant shareInstance] application:application didFinishLaunchingWithOptions:launchOptions];
return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
    [[Ant shareInstance] applicationWillResignActive:application];
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[Ant shareInstance] applicationDidEnterBackground:application];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [[Ant shareInstance] applicationWillEnterForeground:application];
}

所有注册的组件(模块)会在 AppDelegate 相应的生命周期方法调用时自动调用。

模块注册

模块注册有动态注册和静态注册两种。

静态注册

可以使用以下接口来静态注册模块:

/// Register a module with Module class.
+ (void)registerModule:(nonnull Class)moduleClass;

/// Register a module with Module name.
+ (void)registerModuleWithName:(nonnull NSString *)moduleName;

/// Register all modules with plist file.
/// @param plist the full path of the plist file.
+ (void)registerModulesFromPlistFile:(nullable NSString *)plist;

你可以在 Info.plist 中添加 Modules:

Info.plist

可以在调用 registerModulesFromPlistFile 并传入 nil ,Ant 会默认加载 Info.plist 中的 Modules:

[Ant registerModulesFromPlistFile: nil];
动态注册

可以在任何位置使用 ANT_MODULE_EXPORT(name) 宏定义来注册模块。

ANT_MODULE_EXPORT(Module1App)

@interface Module1App() <ATModuleProtocol> {
    NSInteger state;
}

@end

组件通信

Ant 使用协议注册的方式(Protocol-Class)来实现组件通信。
Protocol-Class 方案就是通过 protocol 定义服务接口,服务提供方通过实现该接口来提供接口定义的服务。具体实现就是把 protocol 和 class 做一个映射,同时在内存中保存一张映射表,使用的时候,就通过 protocol 找到对应的 class 来获取需要的服务。

示例图:

protocol-class使用示例图

示例代码:

// TestService.h (定义服务)
@protocol TestService <NSObject>
/// 测试
- (void)service1;

@end

// 组件 A (服务提供方)
ANT_REGISTER_SERVICE(TestServiceImpl, TestService)
@interface TestServiceImpl() <TestService> @end

@implementation TestServiceImpl

- (void)service1 {
    NSLog(@"Service test from Impl");
}

@end

// 组件 B (服务使用方)
id <TestService> obj = [Ant serviceImplFromProtocol:@protocol(TestService)];
[obj service1];

服务的注册和组件的注册一样,有动态注册和静态注册两种。
动态注册使用 ANT_REGISTER_SERVICE(impl, protocol) 宏定义来注册实现类和遵守的协议。

ANT_REGISTER_SERVICE(TestServiceImpl, TestService)
@interface TestServiceImpl() <TestService> @end

也可以使用 registerService:forProtocol: 方法来手动注册。

安装

Ant 可以使用 CocoaPods 进行安装。

pod 'Ant'

作者

huluobo, [email protected]

License

Ant is available under the MIT license. See the LICENSE file for more info.

Latest podspec

{
    "name": "Ant",
    "version": "0.1.0",
    "summary": "Ant is a modular programming tool for iOS developer.",
    "description": "Ant is a modular programming tool for iOS developer.nDeveloper can use Ant to make iOS programming easier when deal with module.",
    "homepage": "https://github.com/hujewelz/Ant",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "huluobo": "[email protected]"
    },
    "source": {
        "git": "https://github.com/hujewelz/Ant.git",
        "tag": "0.1.0"
    },
    "platforms": {
        "ios": "8.0"
    },
    "source_files": "Ant/Classes/**/*",
    "public_header_files": "Ant/Classes/Public/**/*.h"
}

Pin It on Pinterest

Share This