测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可 | 自定义 |
Released最新发布 | 2014年12月 |
由Jonah Neugass维护。
依赖 | |
JLRoutes | >= 0 |
FastCoding | >= 0 |
GDRouting是一个框架,用于使用私有的CocoaPod仓库将大型应用程序模块化成子应用程序。开源仓库JLRoutes用于创建x-callback-urls,以通过菜单系统或通过在每个子应用程序中公开的字符串键来连接所有子应用程序。
此仓库基于HubSpot的Anthony Roldan在博客文章使用CocoaPods将大型iOS应用程序模块化中提出的概念。
GDMenuItem持有属性,决定在菜单表格视图中显示的内容,这些属性包括标题和iconImageName。它还具有displayOrder属性,以便您可以在子应用程序中对菜单项进行排序,以及sectionTitle属性,如果您想在菜单项之前显示分区标题。
GDMenuItem *menuItem = [[GDMenuItem alloc] initWithTitle:MenuItemTitle andDisplayOrder:0]; menuItem.sectionTitle = SectionTitle;
GDRoute存储关于urlString和当选中时将被调用的路由块的详细信息
GDRoute *route = [GDRoute routeWithURLString:[NSString stringWithFormat:@"/%@", ViewControllerIdentifier] andAction: ^BOOL (id routingDelegate, NSString *urlString, NSDictionary *parameters) { [routingDelegate pushRoutedViewController:[UIStoryboard instantiateViewControllerWithIdentifier:ViewControllerIdentifier andStoryboardName:StoryboardName] animated:YES parameters:nil]; return YES; }];
所有子应用程序都应该至少有一个类实现此协议。它用于获取子应用程序中使用的菜单项和路由。
以下是ManateeApp实现的示例
@implementation ManateeApp static NSString *const StoryboardName = @"Main"; static NSString *const ViewControllerIdentifier = @"ManateeViewController"; static NSString *const MenuItemTitle = @"MANATEES"; + (UINavigationController *)baseNavigationController { return [[UINavigationController alloc] initWithRootViewController:[UIStoryboard instantiateViewControllerWithIdentifier:ViewControllerIdentifier andStoryboardName:StoryboardName]]; } + (NSArray *)menuItems { GDMenuItem *menuItem = [[GDMenuItem alloc] initWithTitle:MenuItemTitle andIconImageName:nil]; return @[menuItem]; } + (NSDictionary *)routesToRegister { GDRoute *route = [GDRoute routeWithURLString:[NSString stringWithFormat:@"/%@", ViewControllerIdentifier] andAction: ^BOOL (id routingDelegate, NSString *urlString, NSDictionary *parameters) { [routingDelegate popRoutedViewControllerToRootViewController:YES parameters:nil]; return YES; }]; NSDictionary *routeDictionary = @{ViewControllerIdentifier : route}; return routeDictionary; }
GDUsableApp是表示子应用程序的对象,它已配置用于在您的应用程序中使用。它有两个属性:displayOrder用于确定菜单项在菜单中的显示顺序,以及appName,它与您想要导入的子应用程序类名称相匹配。
用法
GDUsableApp *manateeApp = [[GDUsableApp alloc] init]; manateeApp.displayOrder = 0; manateeApp.appName = @"ManateeApp";
GDAppConfiguration是一个可存档对象,用于存储有关应用程序的配置信息。
GDAppConfiguration *appConfiguration = [[GDAppConfiguration alloc] init]; appConfiguration.usableAppArray = @[manateeApp]; [appConfiguration archiveObject];
GDAppManager提供通过GDUsableApps数组获取应用程序中配置的所有GDMenuItems和GDRoutes的功能。它也用于设置所有路由。
GDAppManager *appManager = [[GDAppManager alloc] initWithUsableAppArray:appConfiguration.usableAppArray]; [appManager registerRoutesForAppsWithRoutingDelegate:self];