From 9af158820da3d4170c33f317fe64651a8df26e4c Mon Sep 17 00:00:00 2001 From: shaoqing Date: Wed, 19 Aug 2020 09:32:43 +0800 Subject: [PATCH] pod git init --- Podfile | 11 + Podfile.lock | 25 + Pods/Headers/Private/MGJRouter/MGJRouter.h | 1 + .../Private/ModuleC/ModuleCViewController.h | 1 + .../Private/ModuleD/ModuleDViewController.h | 1 + Pods/Headers/Public/MGJRouter/MGJRouter.h | 1 + .../Public/ModuleC/ModuleCViewController.h | 1 + .../Public/ModuleD/ModuleDViewController.h | 1 + Pods/MGJRouter/LICENSE | 22 + Pods/MGJRouter/MGJRouter/MGJRouter.h | 116 +++ Pods/MGJRouter/MGJRouter/MGJRouter.m | 324 +++++++ Pods/MGJRouter/README.md | 139 +++ Pods/Manifest.lock | 25 + .../ModuleC/Classes/ModuleCViewController.h | 17 + .../ModuleC/Classes/ModuleCViewController.m | 33 + .../ModuleD/Classes/ModuleDViewController.h | 17 + .../ModuleD/Classes/ModuleDViewController.m | 33 + Pods/Pods.xcodeproj/project.pbxproj | 795 ++++++++++++++++++ .../xcschemes/MGJRouter.xcscheme | 60 ++ .../xcschemes/ModuleC.xcscheme | 60 ++ .../xcschemes/ModuleD.xcscheme | 60 ++ .../xcschemes/Pods-Router.xcscheme | 60 ++ .../xcschemes/xcschememanagement.plist | 39 + .../MGJRouter/MGJRouter-dummy.m | 5 + .../MGJRouter/MGJRouter-prefix.pch | 12 + .../MGJRouter/MGJRouter.xcconfig | 9 + .../ModuleC/ModuleC-dummy.m | 5 + .../ModuleC/ModuleC-prefix.pch | 12 + .../ModuleC/ModuleC.xcconfig | 9 + .../ModuleD/ModuleD-dummy.m | 5 + .../ModuleD/ModuleD-prefix.pch | 12 + .../ModuleD/ModuleD.xcconfig | 9 + .../Pods-Router-acknowledgements.markdown | 29 + .../Pods-Router-acknowledgements.plist | 61 ++ .../Pods-Router/Pods-Router-dummy.m | 5 + .../Pods-Router/Pods-Router.debug.xcconfig | 8 + .../Pods-Router/Pods-Router.release.xcconfig | 8 + Router.podspec | 15 + Router.xcodeproj/project.pbxproj | 72 +- .../xcschemes/xcschememanagement.plist | 2 +- Router.xcworkspace/contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + Router/Classes/GlobalModuleRouter.h | 13 + Router/Classes/GlobalModuleRouter.m | 43 + 44 files changed, 2191 insertions(+), 3 deletions(-) create mode 100644 Podfile create mode 100644 Podfile.lock create mode 120000 Pods/Headers/Private/MGJRouter/MGJRouter.h create mode 120000 Pods/Headers/Private/ModuleC/ModuleCViewController.h create mode 120000 Pods/Headers/Private/ModuleD/ModuleDViewController.h create mode 120000 Pods/Headers/Public/MGJRouter/MGJRouter.h create mode 120000 Pods/Headers/Public/ModuleC/ModuleCViewController.h create mode 120000 Pods/Headers/Public/ModuleD/ModuleDViewController.h create mode 100644 Pods/MGJRouter/LICENSE create mode 100644 Pods/MGJRouter/MGJRouter/MGJRouter.h create mode 100644 Pods/MGJRouter/MGJRouter/MGJRouter.m create mode 100644 Pods/MGJRouter/README.md create mode 100644 Pods/Manifest.lock create mode 100644 Pods/ModuleC/ModuleC/Classes/ModuleCViewController.h create mode 100644 Pods/ModuleC/ModuleC/Classes/ModuleCViewController.m create mode 100644 Pods/ModuleD/ModuleD/Classes/ModuleDViewController.h create mode 100644 Pods/ModuleD/ModuleD/Classes/ModuleDViewController.m create mode 100644 Pods/Pods.xcodeproj/project.pbxproj create mode 100644 Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/MGJRouter.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/ModuleC.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/ModuleD.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/Pods-Router.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Pods/Target Support Files/MGJRouter/MGJRouter-dummy.m create mode 100644 Pods/Target Support Files/MGJRouter/MGJRouter-prefix.pch create mode 100644 Pods/Target Support Files/MGJRouter/MGJRouter.xcconfig create mode 100644 Pods/Target Support Files/ModuleC/ModuleC-dummy.m create mode 100644 Pods/Target Support Files/ModuleC/ModuleC-prefix.pch create mode 100644 Pods/Target Support Files/ModuleC/ModuleC.xcconfig create mode 100644 Pods/Target Support Files/ModuleD/ModuleD-dummy.m create mode 100644 Pods/Target Support Files/ModuleD/ModuleD-prefix.pch create mode 100644 Pods/Target Support Files/ModuleD/ModuleD.xcconfig create mode 100644 Pods/Target Support Files/Pods-Router/Pods-Router-acknowledgements.markdown create mode 100644 Pods/Target Support Files/Pods-Router/Pods-Router-acknowledgements.plist create mode 100644 Pods/Target Support Files/Pods-Router/Pods-Router-dummy.m create mode 100644 Pods/Target Support Files/Pods-Router/Pods-Router.debug.xcconfig create mode 100644 Pods/Target Support Files/Pods-Router/Pods-Router.release.xcconfig create mode 100644 Router.podspec create mode 100644 Router.xcworkspace/contents.xcworkspacedata create mode 100644 Router.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Router/Classes/GlobalModuleRouter.h create mode 100644 Router/Classes/GlobalModuleRouter.m diff --git a/Podfile b/Podfile new file mode 100644 index 0000000..48e44b6 --- /dev/null +++ b/Podfile @@ -0,0 +1,11 @@ +source 'https://github.com/aloow/shaoqingRepo.git' +source 'https://github.com/CocoaPods/Specs.git' + +target 'Router' do + # Uncomment the next line if you're using Swift or would like to use dynamic frameworks + # use_frameworks! + pod 'MGJRouter' + pod 'ModuleC' + pod 'ModuleD' + +end diff --git a/Podfile.lock b/Podfile.lock new file mode 100644 index 0000000..9438a8e --- /dev/null +++ b/Podfile.lock @@ -0,0 +1,25 @@ +PODS: + - MGJRouter (0.10.0) + - ModuleC (1.0.0) + - ModuleD (1.0.0) + +DEPENDENCIES: + - MGJRouter + - ModuleC + - ModuleD + +SPEC REPOS: + https://github.com/aloow/shaoqingRepo.git: + - ModuleC + - ModuleD + https://github.com/cocoapods/specs.git: + - MGJRouter + +SPEC CHECKSUMS: + MGJRouter: 15d94541eb2cc81eff7d577337288feb7ae9575f + ModuleC: 1b17ea125303226fcdb1359b65d62b9e1f9e532c + ModuleD: 993a6378b02c6f834c1080161bb4bea685b8703d + +PODFILE CHECKSUM: 457331df1741f1aa1794773a2328ff029af2056b + +COCOAPODS: 1.6.0 diff --git a/Pods/Headers/Private/MGJRouter/MGJRouter.h b/Pods/Headers/Private/MGJRouter/MGJRouter.h new file mode 120000 index 0000000..d49430b --- /dev/null +++ b/Pods/Headers/Private/MGJRouter/MGJRouter.h @@ -0,0 +1 @@ +../../../MGJRouter/MGJRouter/MGJRouter.h \ No newline at end of file diff --git a/Pods/Headers/Private/ModuleC/ModuleCViewController.h b/Pods/Headers/Private/ModuleC/ModuleCViewController.h new file mode 120000 index 0000000..cadd8b7 --- /dev/null +++ b/Pods/Headers/Private/ModuleC/ModuleCViewController.h @@ -0,0 +1 @@ +../../../ModuleC/ModuleC/Classes/ModuleCViewController.h \ No newline at end of file diff --git a/Pods/Headers/Private/ModuleD/ModuleDViewController.h b/Pods/Headers/Private/ModuleD/ModuleDViewController.h new file mode 120000 index 0000000..f5c6327 --- /dev/null +++ b/Pods/Headers/Private/ModuleD/ModuleDViewController.h @@ -0,0 +1 @@ +../../../ModuleD/ModuleD/Classes/ModuleDViewController.h \ No newline at end of file diff --git a/Pods/Headers/Public/MGJRouter/MGJRouter.h b/Pods/Headers/Public/MGJRouter/MGJRouter.h new file mode 120000 index 0000000..d49430b --- /dev/null +++ b/Pods/Headers/Public/MGJRouter/MGJRouter.h @@ -0,0 +1 @@ +../../../MGJRouter/MGJRouter/MGJRouter.h \ No newline at end of file diff --git a/Pods/Headers/Public/ModuleC/ModuleCViewController.h b/Pods/Headers/Public/ModuleC/ModuleCViewController.h new file mode 120000 index 0000000..cadd8b7 --- /dev/null +++ b/Pods/Headers/Public/ModuleC/ModuleCViewController.h @@ -0,0 +1 @@ +../../../ModuleC/ModuleC/Classes/ModuleCViewController.h \ No newline at end of file diff --git a/Pods/Headers/Public/ModuleD/ModuleDViewController.h b/Pods/Headers/Public/ModuleD/ModuleDViewController.h new file mode 120000 index 0000000..f5c6327 --- /dev/null +++ b/Pods/Headers/Public/ModuleD/ModuleDViewController.h @@ -0,0 +1 @@ +../../../ModuleD/ModuleD/Classes/ModuleDViewController.h \ No newline at end of file diff --git a/Pods/MGJRouter/LICENSE b/Pods/MGJRouter/LICENSE new file mode 100644 index 0000000..a711a77 --- /dev/null +++ b/Pods/MGJRouter/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 mogujie + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/Pods/MGJRouter/MGJRouter/MGJRouter.h b/Pods/MGJRouter/MGJRouter/MGJRouter.h new file mode 100644 index 0000000..142ff6a --- /dev/null +++ b/Pods/MGJRouter/MGJRouter/MGJRouter.h @@ -0,0 +1,116 @@ +// +// MGJRouter.h +// MGJFoundation +// +// Created by limboy on 12/9/14. +// Copyright (c) 2014 juangua. All rights reserved. +// + +#import + +extern NSString *const MGJRouterParameterURL; +extern NSString *const MGJRouterParameterCompletion; +extern NSString *const MGJRouterParameterUserInfo; + +/** + * routerParameters 里内置的几个参数会用到上面定义的 string + */ +typedef void (^MGJRouterHandler)(NSDictionary *routerParameters); + +/** + * 需要返回一个 object,配合 objectForURL: 使用 + */ +typedef id (^MGJRouterObjectHandler)(NSDictionary *routerParameters); + +@interface MGJRouter : NSObject + +/** + * 注册 URLPattern 对应的 Handler,在 handler 中可以初始化 VC,然后对 VC 做各种操作 + * + * @param URLPattern 带上 scheme,如 mgj://beauty/:id + * @param handler 该 block 会传一个字典,包含了注册的 URL 中对应的变量。 + * 假如注册的 URL 为 mgj://beauty/:id 那么,就会传一个 @{@"id": 4} 这样的字典过来 + */ ++ (void)registerURLPattern:(NSString *)URLPattern toHandler:(MGJRouterHandler)handler; + +/** + * 注册 URLPattern 对应的 ObjectHandler,需要返回一个 object 给调用方 + * + * @param URLPattern 带上 scheme,如 mgj://beauty/:id + * @param handler 该 block 会传一个字典,包含了注册的 URL 中对应的变量。 + * 假如注册的 URL 为 mgj://beauty/:id 那么,就会传一个 @{@"id": 4} 这样的字典过来 + * 自带的 key 为 @"url" 和 @"completion" (如果有的话) + */ ++ (void)registerURLPattern:(NSString *)URLPattern toObjectHandler:(MGJRouterObjectHandler)handler; + +/** + * 取消注册某个 URL Pattern + * + * @param URLPattern URLPattern + */ ++ (void)deregisterURLPattern:(NSString *)URLPattern; + +/** + * 打开此 URL + * 会在已注册的 URL -> Handler 中寻找,如果找到,则执行 Handler + * + * @param URL 带 Scheme,如 mgj://beauty/3 + */ ++ (void)openURL:(NSString *)URL; + +/** + * 打开此 URL,同时当操作完成时,执行额外的代码 + * + * @param URL 带 Scheme 的 URL,如 mgj://beauty/4 + * @param completion URL 处理完成后的 callback,完成的判定跟具体的业务相关 + */ ++ (void)openURL:(NSString *)URL completion:(void (^)(id result))completion; + +/** + * 打开此 URL,带上附加信息,同时当操作完成时,执行额外的代码 + * + * @param URL 带 Scheme 的 URL,如 mgj://beauty/4 + * @param userInfo 附加参数 + * @param completion URL 处理完成后的 callback,完成的判定跟具体的业务相关 + */ ++ (void)openURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo completion:(void (^)(id result))completion; + +/** + * 查找谁对某个 URL 感兴趣,如果有的话,返回一个 object + * + * @param URL 带 Scheme,如 mgj://beauty/3 + */ ++ (id)objectForURL:(NSString *)URL; + +/** + * 查找谁对某个 URL 感兴趣,如果有的话,返回一个 object + * + * @param URL 带 Scheme,如 mgj://beauty/3 + * @param userInfo 附加参数 + */ ++ (id)objectForURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo; + +/** + * 是否可以打开URL + * + * @param URL 带 Scheme,如 mgj://beauty/3 + * + * @return 返回BOOL值 + */ ++ (BOOL)canOpenURL:(NSString *)URL; ++ (BOOL)canOpenURL:(NSString *)URL matchExactly:(BOOL)exactly; + +/** + * 调用此方法来拼接 urlpattern 和 parameters + * + * #define MGJ_ROUTE_BEAUTY @"beauty/:id" + * [MGJRouter generateURLWithPattern:MGJ_ROUTE_BEAUTY, @[@13]]; + * + * + * @param pattern url pattern 比如 @"beauty/:id" + * @param parameters 一个数组,数量要跟 pattern 里的变量一致 + * + * @return 返回生成的URL String + */ ++ (NSString *)generateURLWithPattern:(NSString *)pattern parameters:(NSArray *)parameters; +@end diff --git a/Pods/MGJRouter/MGJRouter/MGJRouter.m b/Pods/MGJRouter/MGJRouter/MGJRouter.m new file mode 100644 index 0000000..1ba9f27 --- /dev/null +++ b/Pods/MGJRouter/MGJRouter/MGJRouter.m @@ -0,0 +1,324 @@ +// +// MGJRouter.m +// MGJFoundation +// +// Created by limboy on 12/9/14. +// Copyright (c) 2014 juangua. All rights reserved. +// + +#import "MGJRouter.h" +#import + +static NSString * const MGJ_ROUTER_WILDCARD_CHARACTER = @"~"; +static NSString *specialCharacters = @"/?&."; + +NSString *const MGJRouterParameterURL = @"MGJRouterParameterURL"; +NSString *const MGJRouterParameterCompletion = @"MGJRouterParameterCompletion"; +NSString *const MGJRouterParameterUserInfo = @"MGJRouterParameterUserInfo"; + + +@interface MGJRouter () +/** + * 保存了所有已注册的 URL + * 结构类似 @{@"beauty": @{@":id": {@"_", [block copy]}}} + */ +@property (nonatomic) NSMutableDictionary *routes; +@end + +@implementation MGJRouter + ++ (instancetype)sharedInstance +{ + static MGJRouter *instance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[self alloc] init]; + }); + return instance; +} + ++ (void)registerURLPattern:(NSString *)URLPattern toHandler:(MGJRouterHandler)handler +{ + [[self sharedInstance] addURLPattern:URLPattern andHandler:handler]; +} + ++ (void)deregisterURLPattern:(NSString *)URLPattern +{ + [[self sharedInstance] removeURLPattern:URLPattern]; +} + ++ (void)openURL:(NSString *)URL +{ + [self openURL:URL completion:nil]; +} + ++ (void)openURL:(NSString *)URL completion:(void (^)(id result))completion +{ + [self openURL:URL withUserInfo:nil completion:completion]; +} + ++ (void)openURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo completion:(void (^)(id result))completion +{ + URL = [URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSMutableDictionary *parameters = [[self sharedInstance] extractParametersFromURL:URL matchExactly:NO]; + + [parameters enumerateKeysAndObjectsUsingBlock:^(id key, NSString *obj, BOOL *stop) { + if ([obj isKindOfClass:[NSString class]]) { + parameters[key] = [obj stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + } + }]; + + if (parameters) { + MGJRouterHandler handler = parameters[@"block"]; + if (completion) { + parameters[MGJRouterParameterCompletion] = completion; + } + if (userInfo) { + parameters[MGJRouterParameterUserInfo] = userInfo; + } + if (handler) { + [parameters removeObjectForKey:@"block"]; + handler(parameters); + } + } +} + ++ (BOOL)canOpenURL:(NSString *)URL +{ + return [[self sharedInstance] extractParametersFromURL:URL matchExactly:NO] ? YES : NO; +} + ++ (BOOL)canOpenURL:(NSString *)URL matchExactly:(BOOL)exactly { + return [[self sharedInstance] extractParametersFromURL:URL matchExactly:YES] ? YES : NO; +} + ++ (NSString *)generateURLWithPattern:(NSString *)pattern parameters:(NSArray *)parameters +{ + NSInteger startIndexOfColon = 0; + + NSMutableArray *placeholders = [NSMutableArray array]; + + for (int i = 0; i < pattern.length; i++) { + NSString *character = [NSString stringWithFormat:@"%c", [pattern characterAtIndex:i]]; + if ([character isEqualToString:@":"]) { + startIndexOfColon = i; + } + if ([specialCharacters rangeOfString:character].location != NSNotFound && i > (startIndexOfColon + 1) && startIndexOfColon) { + NSRange range = NSMakeRange(startIndexOfColon, i - startIndexOfColon); + NSString *placeholder = [pattern substringWithRange:range]; + if (![self checkIfContainsSpecialCharacter:placeholder]) { + [placeholders addObject:placeholder]; + startIndexOfColon = 0; + } + } + if (i == pattern.length - 1 && startIndexOfColon) { + NSRange range = NSMakeRange(startIndexOfColon, i - startIndexOfColon + 1); + NSString *placeholder = [pattern substringWithRange:range]; + if (![self checkIfContainsSpecialCharacter:placeholder]) { + [placeholders addObject:placeholder]; + } + } + } + + __block NSString *parsedResult = pattern; + + [placeholders enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) { + idx = parameters.count > idx ? idx : parameters.count - 1; + parsedResult = [parsedResult stringByReplacingOccurrencesOfString:obj withString:parameters[idx]]; + }]; + + return parsedResult; +} + ++ (id)objectForURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo +{ + MGJRouter *router = [MGJRouter sharedInstance]; + + URL = [URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSMutableDictionary *parameters = [router extractParametersFromURL:URL matchExactly:NO]; + MGJRouterObjectHandler handler = parameters[@"block"]; + + if (handler) { + if (userInfo) { + parameters[MGJRouterParameterUserInfo] = userInfo; + } + [parameters removeObjectForKey:@"block"]; + return handler(parameters); + } + return nil; +} + ++ (id)objectForURL:(NSString *)URL +{ + return [self objectForURL:URL withUserInfo:nil]; +} + ++ (void)registerURLPattern:(NSString *)URLPattern toObjectHandler:(MGJRouterObjectHandler)handler +{ + [[self sharedInstance] addURLPattern:URLPattern andObjectHandler:handler]; +} + +- (void)addURLPattern:(NSString *)URLPattern andHandler:(MGJRouterHandler)handler +{ + NSMutableDictionary *subRoutes = [self addURLPattern:URLPattern]; + if (handler && subRoutes) { + subRoutes[@"_"] = [handler copy]; + } +} + +- (void)addURLPattern:(NSString *)URLPattern andObjectHandler:(MGJRouterObjectHandler)handler +{ + NSMutableDictionary *subRoutes = [self addURLPattern:URLPattern]; + if (handler && subRoutes) { + subRoutes[@"_"] = [handler copy]; + } +} + +- (NSMutableDictionary *)addURLPattern:(NSString *)URLPattern +{ + NSArray *pathComponents = [self pathComponentsFromURL:URLPattern]; + + NSMutableDictionary* subRoutes = self.routes; + + for (NSString* pathComponent in pathComponents) { + if (![subRoutes objectForKey:pathComponent]) { + subRoutes[pathComponent] = [[NSMutableDictionary alloc] init]; + } + subRoutes = subRoutes[pathComponent]; + } + return subRoutes; +} + +#pragma mark - Utils + +- (NSMutableDictionary *)extractParametersFromURL:(NSString *)url matchExactly:(BOOL)exactly +{ + NSMutableDictionary* parameters = [NSMutableDictionary dictionary]; + + parameters[MGJRouterParameterURL] = url; + + NSMutableDictionary* subRoutes = self.routes; + NSArray* pathComponents = [self pathComponentsFromURL:url]; + + BOOL found = NO; + // borrowed from HHRouter(https://github.com/Huohua/HHRouter) + for (NSString* pathComponent in pathComponents) { + + // 对 key 进行排序,这样可以把 ~ 放到最后 + NSArray *subRoutesKeys =[subRoutes.allKeys sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { + return [obj1 compare:obj2]; + }]; + + for (NSString* key in subRoutesKeys) { + if ([key isEqualToString:pathComponent] || [key isEqualToString:MGJ_ROUTER_WILDCARD_CHARACTER]) { + found = YES; + subRoutes = subRoutes[key]; + break; + } else if ([key hasPrefix:@":"]) { + found = YES; + subRoutes = subRoutes[key]; + NSString *newKey = [key substringFromIndex:1]; + NSString *newPathComponent = pathComponent; + // 再做一下特殊处理,比如 :id.html -> :id + if ([self.class checkIfContainsSpecialCharacter:key]) { + NSCharacterSet *specialCharacterSet = [NSCharacterSet characterSetWithCharactersInString:specialCharacters]; + NSRange range = [key rangeOfCharacterFromSet:specialCharacterSet]; + if (range.location != NSNotFound) { + // 把 pathComponent 后面的部分也去掉 + newKey = [newKey substringToIndex:range.location - 1]; + NSString *suffixToStrip = [key substringFromIndex:range.location]; + newPathComponent = [newPathComponent stringByReplacingOccurrencesOfString:suffixToStrip withString:@""]; + } + } + parameters[newKey] = newPathComponent; + break; + } else if (exactly) { + found = NO; + } + } + + // 如果没有找到该 pathComponent 对应的 handler,则以上一层的 handler 作为 fallback + if (!found && !subRoutes[@"_"]) { + return nil; + } + } + + // Extract Params From Query. + NSArray *queryItems = [[NSURLComponents alloc] initWithURL:[[NSURL alloc] initWithString:url] resolvingAgainstBaseURL:false].queryItems; + + for (NSURLQueryItem *item in queryItems) { + parameters[item.name] = item.value; + } + + if (subRoutes[@"_"]) { + parameters[@"block"] = [subRoutes[@"_"] copy]; + } + + return parameters; +} + +- (void)removeURLPattern:(NSString *)URLPattern +{ + NSMutableArray *pathComponents = [NSMutableArray arrayWithArray:[self pathComponentsFromURL:URLPattern]]; + + // 只删除该 pattern 的最后一级 + if (pathComponents.count >= 1) { + // 假如 URLPattern 为 a/b/c, components 就是 @"a.b.c" 正好可以作为 KVC 的 key + NSString *components = [pathComponents componentsJoinedByString:@"."]; + NSMutableDictionary *route = [self.routes valueForKeyPath:components]; + + if (route.count >= 1) { + NSString *lastComponent = [pathComponents lastObject]; + [pathComponents removeLastObject]; + + // 有可能是根 key,这样就是 self.routes 了 + route = self.routes; + if (pathComponents.count) { + NSString *componentsWithoutLast = [pathComponents componentsJoinedByString:@"."]; + route = [self.routes valueForKeyPath:componentsWithoutLast]; + } + [route removeObjectForKey:lastComponent]; + } + } +} + +- (NSArray*)pathComponentsFromURL:(NSString*)URL +{ + + NSMutableArray *pathComponents = [NSMutableArray array]; + if ([URL rangeOfString:@"://"].location != NSNotFound) { + NSArray *pathSegments = [URL componentsSeparatedByString:@"://"]; + // 如果 URL 包含协议,那么把协议作为第一个元素放进去 + [pathComponents addObject:pathSegments[0]]; + + // 如果只有协议,那么放一个占位符 + URL = pathSegments.lastObject; + if (!URL.length) { + [pathComponents addObject:MGJ_ROUTER_WILDCARD_CHARACTER]; + } + } + + for (NSString *pathComponent in [[NSURL URLWithString:URL] pathComponents]) { + if ([pathComponent isEqualToString:@"/"]) continue; + if ([[pathComponent substringToIndex:1] isEqualToString:@"?"]) break; + [pathComponents addObject:pathComponent]; + } + return [pathComponents copy]; +} + +- (NSMutableDictionary *)routes +{ + if (!_routes) { + _routes = [[NSMutableDictionary alloc] init]; + } + return _routes; +} + +#pragma mark - Utils + ++ (BOOL)checkIfContainsSpecialCharacter:(NSString *)checkedString { + NSCharacterSet *specialCharactersSet = [NSCharacterSet characterSetWithCharactersInString:specialCharacters]; + return [checkedString rangeOfCharacterFromSet:specialCharactersSet].location != NSNotFound; +} + +@end diff --git a/Pods/MGJRouter/README.md b/Pods/MGJRouter/README.md new file mode 100644 index 0000000..1c96352 --- /dev/null +++ b/Pods/MGJRouter/README.md @@ -0,0 +1,139 @@ +# MGJRouter +一个高效/灵活的 iOS URL Router + +### 2015-08-22 更新 + +#### 添加了同步获取 Object 的方法 + +有些场景我们可能需要根据 URL 获取某个 Object,所以就添加了这个方法 + +```objc +UIView *searchTopBar = [MGJRouter objectForURL:@"search_top_bar"]; +``` + +## 为什么要再造一个轮子? +已经有几款不错的 Router 了,如 [JLRoutes](https://github.com/joeldev/JLRoutes), [HHRouter](https://github.com/Huohua/HHRouter), 但细看了下之后发现,还是不太满足需求。 + +JLRoutes 的问题主要在于查找 URL 的实现不够高效,通过遍历而不是匹配。还有就是功能偏多。 + +HHRouter 的 URL 查找是基于匹配,所以会更高效,MGJRouter 也是采用的这种方法,但它跟 ViewController 绑定地过于紧密,一定程度上降低了灵活性。 + +于是就有了 MGJRouter。 + +## 安装 + +``` +pod 'MGJRouter', '~>0.9.0' +``` + +## 使用姿势 + +### 最基本的使用 + +```objc +[MGJRouter registerURLPattern:@"mgj://foo/bar" toHandler:^(NSDictionary *routerParameters) { + NSLog(@"routerParameterUserInfo:%@", routerParameters[MGJRouterParameterUserInfo]); +}]; + +[MGJRouter openURL:@"mgj://foo/bar"]; +``` + +当匹配到 URL 后,`routerParameters` 会自带几个 key + +```objc +extern NSString *const MGJRouterParameterURL; +extern NSString *const MGJRouterParameterCompletion; +extern NSString *const MGJRouterParameterUserInfo; +``` + +### 处理中文也没有问题 + +```objc +[MGJRouter registerURLPattern:@"mgj://category/家居" toHandler:^(NSDictionary *routerParameters) { + NSLog(@"routerParameters:%@", routerParameters); +}]; + +[MGJRouter openURL:@"mgj://category/家居"]; +``` + +### Open 时,可以传一些 userinfo 过去 + +```objc +[MGJRouter registerURLPattern:@"mgj://category/travel" toHandler:^(NSDictionary *routerParameters) { + NSLog(@"routerParameters[MGJRouterParameterUserInfo]:%@", routerParameters[MGJRouterParameterUserInfo]); + // @{@"user_id": @1900} +}]; + +[MGJRouter openURL:@"mgj://category/travel" withUserInfo:@{@"user_id": @1900} completion:nil]; +``` + +### 如果有可变参数(包括 URL Query Parameter)会被自动解析 + +```objc +[MGJRouter registerURLPattern:@"mgj://search/:query" toHandler:^(NSDictionary *routerParameters) { + NSLog(@"routerParameters[query]:%@", routerParameters[@"query"]); // bicycle + NSLog(@"routerParameters[color]:%@", routerParameters[@"color"]); // red +}]; + +[MGJRouter openURL:@"mgj://search/bicycle?color=red"]; +``` + +### 定义一个全局的 URL Pattern 作为 Fallback + +```objc +[MGJRouter registerURLPattern:@"mgj://" toHandler:^(NSDictionary *routerParameters) { + NSLog(@"没有人处理该 URL,就只能 fallback 到这里了"); +}]; + +[MGJRouter openURL:@"mgj://search/travel/china?has_travelled=0"]; +``` + +### 当 Open 结束时,执行 Completion Block + +```objc +[MGJRouter registerURLPattern:@"mgj://detail" toHandler:^(NSDictionary *routerParameters) { + NSLog(@"匹配到了 url, 一会会执行 Completion Block"); + + // 模拟 push 一个 VC + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + void (^completion)() = routerParameters[MGJRouterParameterCompletion]; + if (completion) { + completion(); + } + }); +}]; + +[MGJRouter openURL:@"mgj://detail" withUserInfo:nil completion:^{ + [self appendLog:@"Open 结束,我是 Completion Block"]; +}]; +``` + +### 生成 URL + +URL 的处理一不小心,就容易散落在项目的各个角落,不容易管理。比如注册时的 pattern 是 `mgj://beauty/:id`,然后 open 时就是 `mgj://beauty/123`,这样到时候 url 有改动,处理起来就会很麻烦,不好统一管理。 + +所以 MGJRouter 提供了一个类方法来处理这个问题。 + +```objc ++ (NSString *)generateURLWithPattern:(NSString *)pattern parameters:(NSArray *)parameters; +``` + +使用方式 + +```objc +#define TEMPLATE_URL @"mgj://search/:keyword" + +[MGJRouter registerURLPattern:TEMPLATE_URL toHandler:^(NSDictionary *routerParameters) { + NSLog(@"routerParameters[keyword]:%@", routerParameters[@"keyword"]); // Hangzhou +}]; + +[MGJRouter openURL:[MGJRouter generateURLWithPattern:TEMPLATE_URL parameters:@[@"Hangzhou"]]]; +} +``` + +这样就可以在一个地方定义所有的 URL Pattern,使用时,用这个方法生成 URL 就行了。 + + +## 协议 + +MGJRouter 被许可在 MIT 协议下使用。查阅 LICENSE 文件来获得更多信息。 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock new file mode 100644 index 0000000..9438a8e --- /dev/null +++ b/Pods/Manifest.lock @@ -0,0 +1,25 @@ +PODS: + - MGJRouter (0.10.0) + - ModuleC (1.0.0) + - ModuleD (1.0.0) + +DEPENDENCIES: + - MGJRouter + - ModuleC + - ModuleD + +SPEC REPOS: + https://github.com/aloow/shaoqingRepo.git: + - ModuleC + - ModuleD + https://github.com/cocoapods/specs.git: + - MGJRouter + +SPEC CHECKSUMS: + MGJRouter: 15d94541eb2cc81eff7d577337288feb7ae9575f + ModuleC: 1b17ea125303226fcdb1359b65d62b9e1f9e532c + ModuleD: 993a6378b02c6f834c1080161bb4bea685b8703d + +PODFILE CHECKSUM: 457331df1741f1aa1794773a2328ff029af2056b + +COCOAPODS: 1.6.0 diff --git a/Pods/ModuleC/ModuleC/Classes/ModuleCViewController.h b/Pods/ModuleC/ModuleC/Classes/ModuleCViewController.h new file mode 100644 index 0000000..f252fdf --- /dev/null +++ b/Pods/ModuleC/ModuleC/Classes/ModuleCViewController.h @@ -0,0 +1,17 @@ +// +// ModuleCViewController.h +// ModuleC +// +// Created by iMac on 2020/8/18. +// Copyright © 2020 iMac. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ModuleCViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/ModuleC/ModuleC/Classes/ModuleCViewController.m b/Pods/ModuleC/ModuleC/Classes/ModuleCViewController.m new file mode 100644 index 0000000..7a7f8fa --- /dev/null +++ b/Pods/ModuleC/ModuleC/Classes/ModuleCViewController.m @@ -0,0 +1,33 @@ +// +// ModuleCViewController.m +// ModuleC +// +// Created by iMac on 2020/8/18. +// Copyright © 2020 iMac. All rights reserved. +// + +#import "ModuleCViewController.h" + +@interface ModuleCViewController () + +@end + +@implementation ModuleCViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.title = @"ModuleCViewController"; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/Pods/ModuleD/ModuleD/Classes/ModuleDViewController.h b/Pods/ModuleD/ModuleD/Classes/ModuleDViewController.h new file mode 100644 index 0000000..ab205d1 --- /dev/null +++ b/Pods/ModuleD/ModuleD/Classes/ModuleDViewController.h @@ -0,0 +1,17 @@ +// +// ModuleDViewController.h +// ModuleD +// +// Created by iMac on 2020/8/18. +// Copyright © 2020 iMac. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ModuleDViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/ModuleD/ModuleD/Classes/ModuleDViewController.m b/Pods/ModuleD/ModuleD/Classes/ModuleDViewController.m new file mode 100644 index 0000000..4e63bef --- /dev/null +++ b/Pods/ModuleD/ModuleD/Classes/ModuleDViewController.m @@ -0,0 +1,33 @@ +// +// ModuleDViewController.m +// ModuleD +// +// Created by iMac on 2020/8/18. +// Copyright © 2020 iMac. All rights reserved. +// + +#import "ModuleDViewController.h" + +@interface ModuleDViewController () + +@end + +@implementation ModuleDViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.title = @"ModuleD的ViewController"; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..081e2d5 --- /dev/null +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,795 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 08087DAF8A77B41027606A0323657F36 /* MGJRouter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1923807C03F59B6D0C3EBA9239271322 /* MGJRouter.m */; }; + 0CEAF79A86A3372FE54F0C27D248A9A6 /* ModuleCViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 965305642C784E0A623EA2AA5C00574C /* ModuleCViewController.m */; }; + 28237A341DC25444F48125E53474E933 /* ModuleDViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11549C24F8E849674C1E9F594EAD0E6A /* ModuleDViewController.m */; }; + 2C7DC1FC79EFB59C6B12195664E40A15 /* ModuleDViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E6A1F17D836BEFFF38A1B35A45D08FD /* ModuleDViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 36688A00BDD5B399D203F726BC9E3EA3 /* MGJRouter.h in Headers */ = {isa = PBXBuildFile; fileRef = A685D87C690075B7B42C9488C2F89CDA /* MGJRouter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3672D85E77CE37AAF90D3F1F8FD5D61F /* ModuleC-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 95B1669B7527D1C48CE18A98C86D2C52 /* ModuleC-dummy.m */; }; + 5D518A91175E3691AEEBC69FCFB7EDFC /* ModuleD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB62C89DC4307979CD4431808F558C7 /* ModuleD-dummy.m */; }; + 6A7BA0467344D47799D710FFB85EEF87 /* ModuleCViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 198B67BB62A773B9D0231EBC203A71B9 /* ModuleCViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6DB5615CCBFF74741F33E271997E91CE /* MGJRouter-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EE6947BCED9BF6D2965349CA6877792 /* MGJRouter-dummy.m */; }; + E171684F4FC02E34D2ADF45777067FED /* Pods-Router-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FCADDC2B7D7BB5E05C43BFDEBC031F7C /* Pods-Router-dummy.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 7DD215DC7A08DA1C205CDFE7C71B6FB5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7A875B1CCADBD3A72352D04DBD4C2AC6; + remoteInfo = ModuleD; + }; + 904E79C0154C9F2542795B902E0CDF1E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 521676D8399F473450B28237D9919D6C; + remoteInfo = MGJRouter; + }; + FCF62804F77D2B98014986C635E1A4D1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E5CA945FE8B6DB08144AC6101D8FBEF5; + remoteInfo = ModuleC; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0517CBD62E93D5EE5C8D272A3C7BFDE3 /* Pods-Router-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Router-acknowledgements.markdown"; sourceTree = ""; }; + 0757BA5BDE69B42084521FCC4853B833 /* ModuleD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ModuleD.xcconfig; sourceTree = ""; }; + 0E6A1F17D836BEFFF38A1B35A45D08FD /* ModuleDViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ModuleDViewController.h; path = ModuleD/Classes/ModuleDViewController.h; sourceTree = ""; }; + 11549C24F8E849674C1E9F594EAD0E6A /* ModuleDViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ModuleDViewController.m; path = ModuleD/Classes/ModuleDViewController.m; sourceTree = ""; }; + 1923807C03F59B6D0C3EBA9239271322 /* MGJRouter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MGJRouter.m; path = MGJRouter/MGJRouter.m; sourceTree = ""; }; + 198B67BB62A773B9D0231EBC203A71B9 /* ModuleCViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ModuleCViewController.h; path = ModuleC/Classes/ModuleCViewController.h; sourceTree = ""; }; + 1C0886CD66BE6C21ACBA0A00970E7CF9 /* ModuleD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ModuleD-prefix.pch"; sourceTree = ""; }; + 1EE6947BCED9BF6D2965349CA6877792 /* MGJRouter-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MGJRouter-dummy.m"; sourceTree = ""; }; + 2179EB70D30B77CA2C1DFFD5DADDC7C9 /* Pods-Router.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Router.release.xcconfig"; sourceTree = ""; }; + 271AC2076116723DEBCF0BD34F429EF5 /* ModuleC-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ModuleC-prefix.pch"; sourceTree = ""; }; + 2A289A8B36463B39DA816F51281E9ECE /* MGJRouter-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MGJRouter-prefix.pch"; sourceTree = ""; }; + 57CEB20A928E23D4F506E031EB2C161C /* MGJRouter.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MGJRouter.xcconfig; sourceTree = ""; }; + 6A7C32917A5F0264372B92B38D2461D1 /* libMGJRouter.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMGJRouter.a; path = libMGJRouter.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 6D416038E99968959C33B8D0D9AC0F15 /* Pods-Router-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Router-acknowledgements.plist"; sourceTree = ""; }; + 7347B5E5D9A94A5FA0D4306FC5835A23 /* libModuleC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libModuleC.a; path = libModuleC.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 95B1669B7527D1C48CE18A98C86D2C52 /* ModuleC-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ModuleC-dummy.m"; sourceTree = ""; }; + 965305642C784E0A623EA2AA5C00574C /* ModuleCViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ModuleCViewController.m; path = ModuleC/Classes/ModuleCViewController.m; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + A0C93E8752B420EB8F24C30BF5964966 /* Pods-Router.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Router.debug.xcconfig"; sourceTree = ""; }; + A685D87C690075B7B42C9488C2F89CDA /* MGJRouter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MGJRouter.h; path = MGJRouter/MGJRouter.h; sourceTree = ""; }; + BCB62C89DC4307979CD4431808F558C7 /* ModuleD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ModuleD-dummy.m"; sourceTree = ""; }; + CC0E0B896B99191BCCCFF12094B6CB48 /* libModuleD.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libModuleD.a; path = libModuleD.a; sourceTree = BUILT_PRODUCTS_DIR; }; + E1F32E9E7EC311831C25AA6CE7AF12CF /* ModuleC.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ModuleC.xcconfig; sourceTree = ""; }; + E459C19DA2FA5F5B13A876998663CD21 /* libPods-Router.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-Router.a"; path = "libPods-Router.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + FCADDC2B7D7BB5E05C43BFDEBC031F7C /* Pods-Router-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Router-dummy.m"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 179D7E194F7CE57C9866071F8A429EA9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3891841C46E57438D63C7CE77AEB457F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 644BBE70E156ACD99611522EAF927C54 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CDF8F666EE5DD6B0D9A12F49B3197869 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 180BA09138FB65FE062187567ABDC3B3 /* Pods-Router */ = { + isa = PBXGroup; + children = ( + 0517CBD62E93D5EE5C8D272A3C7BFDE3 /* Pods-Router-acknowledgements.markdown */, + 6D416038E99968959C33B8D0D9AC0F15 /* Pods-Router-acknowledgements.plist */, + FCADDC2B7D7BB5E05C43BFDEBC031F7C /* Pods-Router-dummy.m */, + A0C93E8752B420EB8F24C30BF5964966 /* Pods-Router.debug.xcconfig */, + 2179EB70D30B77CA2C1DFFD5DADDC7C9 /* Pods-Router.release.xcconfig */, + ); + name = "Pods-Router"; + path = "Target Support Files/Pods-Router"; + sourceTree = ""; + }; + 2608E4A3306B640F13F5784E1D665C00 /* Pods */ = { + isa = PBXGroup; + children = ( + BB0563899C070755CE5FBDF9AA4B21DC /* MGJRouter */, + E0029A3D2C1B3A864089D1C458387850 /* ModuleC */, + FFD6E6F214197B95935846FA6D792ED3 /* ModuleD */, + ); + name = Pods; + sourceTree = ""; + }; + 515142B6843317860DFAB8B67BEA0D09 /* Products */ = { + isa = PBXGroup; + children = ( + 6A7C32917A5F0264372B92B38D2461D1 /* libMGJRouter.a */, + 7347B5E5D9A94A5FA0D4306FC5835A23 /* libModuleC.a */, + CC0E0B896B99191BCCCFF12094B6CB48 /* libModuleD.a */, + E459C19DA2FA5F5B13A876998663CD21 /* libPods-Router.a */, + ); + name = Products; + sourceTree = ""; + }; + 526FB0B1C48BD8F5741957AB6A4B9F8E /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 180BA09138FB65FE062187567ABDC3B3 /* Pods-Router */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 574B6F966A36E8BED3F87D379E9F36F6 /* Support Files */ = { + isa = PBXGroup; + children = ( + E1F32E9E7EC311831C25AA6CE7AF12CF /* ModuleC.xcconfig */, + 95B1669B7527D1C48CE18A98C86D2C52 /* ModuleC-dummy.m */, + 271AC2076116723DEBCF0BD34F429EF5 /* ModuleC-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/ModuleC"; + sourceTree = ""; + }; + 942167E045324475D2FC0E041DC79AC6 /* Support Files */ = { + isa = PBXGroup; + children = ( + 57CEB20A928E23D4F506E031EB2C161C /* MGJRouter.xcconfig */, + 1EE6947BCED9BF6D2965349CA6877792 /* MGJRouter-dummy.m */, + 2A289A8B36463B39DA816F51281E9ECE /* MGJRouter-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/MGJRouter"; + sourceTree = ""; + }; + B98DCD62DA1756031C24EE2B33169092 /* Support Files */ = { + isa = PBXGroup; + children = ( + 0757BA5BDE69B42084521FCC4853B833 /* ModuleD.xcconfig */, + BCB62C89DC4307979CD4431808F558C7 /* ModuleD-dummy.m */, + 1C0886CD66BE6C21ACBA0A00970E7CF9 /* ModuleD-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/ModuleD"; + sourceTree = ""; + }; + BB0563899C070755CE5FBDF9AA4B21DC /* MGJRouter */ = { + isa = PBXGroup; + children = ( + A685D87C690075B7B42C9488C2F89CDA /* MGJRouter.h */, + 1923807C03F59B6D0C3EBA9239271322 /* MGJRouter.m */, + 942167E045324475D2FC0E041DC79AC6 /* Support Files */, + ); + name = MGJRouter; + path = MGJRouter; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, + 2608E4A3306B640F13F5784E1D665C00 /* Pods */, + 515142B6843317860DFAB8B67BEA0D09 /* Products */, + 526FB0B1C48BD8F5741957AB6A4B9F8E /* Targets Support Files */, + ); + sourceTree = ""; + }; + D89477F20FB1DE18A04690586D7808C4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; + E0029A3D2C1B3A864089D1C458387850 /* ModuleC */ = { + isa = PBXGroup; + children = ( + 198B67BB62A773B9D0231EBC203A71B9 /* ModuleCViewController.h */, + 965305642C784E0A623EA2AA5C00574C /* ModuleCViewController.m */, + 574B6F966A36E8BED3F87D379E9F36F6 /* Support Files */, + ); + name = ModuleC; + path = ModuleC; + sourceTree = ""; + }; + FFD6E6F214197B95935846FA6D792ED3 /* ModuleD */ = { + isa = PBXGroup; + children = ( + 0E6A1F17D836BEFFF38A1B35A45D08FD /* ModuleDViewController.h */, + 11549C24F8E849674C1E9F594EAD0E6A /* ModuleDViewController.m */, + B98DCD62DA1756031C24EE2B33169092 /* Support Files */, + ); + name = ModuleD; + path = ModuleD; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 046C8393A52EF46DBB8182A2540DB393 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2C7DC1FC79EFB59C6B12195664E40A15 /* ModuleDViewController.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 24FABAF331F3BE3E6D032898B9F68DB0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 36688A00BDD5B399D203F726BC9E3EA3 /* MGJRouter.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DFA2105DCABCFDDE858FFE7F3A74BC91 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A7BA0467344D47799D710FFB85EEF87 /* ModuleCViewController.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F19AF5B05921B07B3851168682955705 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 521676D8399F473450B28237D9919D6C /* MGJRouter */ = { + isa = PBXNativeTarget; + buildConfigurationList = A798443217EE5B4F79F6F2EB6A9BECA0 /* Build configuration list for PBXNativeTarget "MGJRouter" */; + buildPhases = ( + 24FABAF331F3BE3E6D032898B9F68DB0 /* Headers */, + 541E31305947722D23328D4582C7A873 /* Sources */, + 644BBE70E156ACD99611522EAF927C54 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MGJRouter; + productName = MGJRouter; + productReference = 6A7C32917A5F0264372B92B38D2461D1 /* libMGJRouter.a */; + productType = "com.apple.product-type.library.static"; + }; + 7A875B1CCADBD3A72352D04DBD4C2AC6 /* ModuleD */ = { + isa = PBXNativeTarget; + buildConfigurationList = 34B77A67CD1C5D34577F06F77B059ACF /* Build configuration list for PBXNativeTarget "ModuleD" */; + buildPhases = ( + 046C8393A52EF46DBB8182A2540DB393 /* Headers */, + C5112C155B04734F58D7E76C4E970C42 /* Sources */, + 179D7E194F7CE57C9866071F8A429EA9 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ModuleD; + productName = ModuleD; + productReference = CC0E0B896B99191BCCCFF12094B6CB48 /* libModuleD.a */; + productType = "com.apple.product-type.library.static"; + }; + 8990E3D831E3CA2C861B0A7B9941E145 /* Pods-Router */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1B91AFDF6D87FC4E9B71C2FC993D6B57 /* Build configuration list for PBXNativeTarget "Pods-Router" */; + buildPhases = ( + F19AF5B05921B07B3851168682955705 /* Headers */, + 4ABC5001EDD2B411C5646AE327575364 /* Sources */, + CDF8F666EE5DD6B0D9A12F49B3197869 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + B2E73CD7F4F7D075D779E2E77C5F9C1E /* PBXTargetDependency */, + 57CF763E7B62766778472313D3661D5C /* PBXTargetDependency */, + 5B3B40F3EB998AE03EA41EF8BDB6A611 /* PBXTargetDependency */, + ); + name = "Pods-Router"; + productName = "Pods-Router"; + productReference = E459C19DA2FA5F5B13A876998663CD21 /* libPods-Router.a */; + productType = "com.apple.product-type.library.static"; + }; + E5CA945FE8B6DB08144AC6101D8FBEF5 /* ModuleC */ = { + isa = PBXNativeTarget; + buildConfigurationList = CE6D90306B1279F2F13ED8305CA78ACA /* Build configuration list for PBXNativeTarget "ModuleC" */; + buildPhases = ( + DFA2105DCABCFDDE858FFE7F3A74BC91 /* Headers */, + F82F594AE86416DBD3007F7A27943AE1 /* Sources */, + 3891841C46E57438D63C7CE77AEB457F /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ModuleC; + productName = ModuleC; + productReference = 7347B5E5D9A94A5FA0D4306FC5835A23 /* libModuleC.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = 515142B6843317860DFAB8B67BEA0D09 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 521676D8399F473450B28237D9919D6C /* MGJRouter */, + E5CA945FE8B6DB08144AC6101D8FBEF5 /* ModuleC */, + 7A875B1CCADBD3A72352D04DBD4C2AC6 /* ModuleD */, + 8990E3D831E3CA2C861B0A7B9941E145 /* Pods-Router */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 4ABC5001EDD2B411C5646AE327575364 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E171684F4FC02E34D2ADF45777067FED /* Pods-Router-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 541E31305947722D23328D4582C7A873 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6DB5615CCBFF74741F33E271997E91CE /* MGJRouter-dummy.m in Sources */, + 08087DAF8A77B41027606A0323657F36 /* MGJRouter.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C5112C155B04734F58D7E76C4E970C42 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5D518A91175E3691AEEBC69FCFB7EDFC /* ModuleD-dummy.m in Sources */, + 28237A341DC25444F48125E53474E933 /* ModuleDViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F82F594AE86416DBD3007F7A27943AE1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3672D85E77CE37AAF90D3F1F8FD5D61F /* ModuleC-dummy.m in Sources */, + 0CEAF79A86A3372FE54F0C27D248A9A6 /* ModuleCViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 57CF763E7B62766778472313D3661D5C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ModuleC; + target = E5CA945FE8B6DB08144AC6101D8FBEF5 /* ModuleC */; + targetProxy = FCF62804F77D2B98014986C635E1A4D1 /* PBXContainerItemProxy */; + }; + 5B3B40F3EB998AE03EA41EF8BDB6A611 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ModuleD; + target = 7A875B1CCADBD3A72352D04DBD4C2AC6 /* ModuleD */; + targetProxy = 7DD215DC7A08DA1C205CDFE7C71B6FB5 /* PBXContainerItemProxy */; + }; + B2E73CD7F4F7D075D779E2E77C5F9C1E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MGJRouter; + target = 521676D8399F473450B28237D9919D6C /* MGJRouter */; + targetProxy = 904E79C0154C9F2542795B902E0CDF1E /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1422B121EAEAEA11307496903FA623C6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + 2FAFD27480FBBA59FFFBE90CBCEC2733 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E1F32E9E7EC311831C25AA6CE7AF12CF /* ModuleC.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/ModuleC/ModuleC-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = ModuleC; + PRODUCT_NAME = ModuleC; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 800A519CEC62DBE64BA3B98CB897E0BD /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0757BA5BDE69B42084521FCC4853B833 /* ModuleD.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/ModuleD/ModuleD-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = ModuleD; + PRODUCT_NAME = ModuleD; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 8A52521CB41629EC6F385D88C19C3C37 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57CEB20A928E23D4F506E031EB2C161C /* MGJRouter.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/MGJRouter/MGJRouter-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = MGJRouter; + PRODUCT_NAME = MGJRouter; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 913C54B00909E1DB011A306060B1F26E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A0C93E8752B420EB8F24C30BF5964966 /* Pods-Router.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MACH_O_TYPE = staticlib; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + A7225AA59767BCB1AFDB1B4248426585 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2179EB70D30B77CA2C1DFFD5DADDC7C9 /* Pods-Router.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MACH_O_TYPE = staticlib; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + C3EE825F7F46F701F58D77BA9898BA94 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57CEB20A928E23D4F506E031EB2C161C /* MGJRouter.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/MGJRouter/MGJRouter-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = MGJRouter; + PRODUCT_NAME = MGJRouter; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E0EC352523F009C2626430AE7AEA6787 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E1F32E9E7EC311831C25AA6CE7AF12CF /* ModuleC.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/ModuleC/ModuleC-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = ModuleC; + PRODUCT_NAME = ModuleC; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E774EB48C1D7A1C21FFD0D92F895C199 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0757BA5BDE69B42084521FCC4853B833 /* ModuleD.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/ModuleD/ModuleD-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = ModuleD; + PRODUCT_NAME = ModuleD; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + ED7888FA6713EABBF66D26A8003AD1CA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1B91AFDF6D87FC4E9B71C2FC993D6B57 /* Build configuration list for PBXNativeTarget "Pods-Router" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 913C54B00909E1DB011A306060B1F26E /* Debug */, + A7225AA59767BCB1AFDB1B4248426585 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 34B77A67CD1C5D34577F06F77B059ACF /* Build configuration list for PBXNativeTarget "ModuleD" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E774EB48C1D7A1C21FFD0D92F895C199 /* Debug */, + 800A519CEC62DBE64BA3B98CB897E0BD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ED7888FA6713EABBF66D26A8003AD1CA /* Debug */, + 1422B121EAEAEA11307496903FA623C6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A798443217EE5B4F79F6F2EB6A9BECA0 /* Build configuration list for PBXNativeTarget "MGJRouter" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C3EE825F7F46F701F58D77BA9898BA94 /* Debug */, + 8A52521CB41629EC6F385D88C19C3C37 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CE6D90306B1279F2F13ED8305CA78ACA /* Build configuration list for PBXNativeTarget "ModuleC" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E0EC352523F009C2626430AE7AEA6787 /* Debug */, + 2FAFD27480FBBA59FFFBE90CBCEC2733 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/MGJRouter.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/MGJRouter.xcscheme new file mode 100644 index 0000000..1b83e45 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/MGJRouter.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/ModuleC.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/ModuleC.xcscheme new file mode 100644 index 0000000..b2fa74d --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/ModuleC.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/ModuleD.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/ModuleD.xcscheme new file mode 100644 index 0000000..72b4658 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/ModuleD.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/Pods-Router.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/Pods-Router.xcscheme new file mode 100644 index 0000000..34aa9fe --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/Pods-Router.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..21eaef1 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,39 @@ + + + + + SchemeUserState + + MGJRouter.xcscheme + + isShown + + orderHint + 0 + + ModuleC.xcscheme + + isShown + + orderHint + 1 + + ModuleD.xcscheme + + isShown + + orderHint + 2 + + Pods-Router.xcscheme + + isShown + + orderHint + 3 + + + SuppressBuildableAutocreation + + + diff --git a/Pods/Target Support Files/MGJRouter/MGJRouter-dummy.m b/Pods/Target Support Files/MGJRouter/MGJRouter-dummy.m new file mode 100644 index 0000000..33da6d6 --- /dev/null +++ b/Pods/Target Support Files/MGJRouter/MGJRouter-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MGJRouter : NSObject +@end +@implementation PodsDummy_MGJRouter +@end diff --git a/Pods/Target Support Files/MGJRouter/MGJRouter-prefix.pch b/Pods/Target Support Files/MGJRouter/MGJRouter-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/MGJRouter/MGJRouter-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/MGJRouter/MGJRouter.xcconfig b/Pods/Target Support Files/MGJRouter/MGJRouter.xcconfig new file mode 100644 index 0000000..975a6aa --- /dev/null +++ b/Pods/Target Support Files/MGJRouter/MGJRouter.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MGJRouter +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MGJRouter" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MGJRouter" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/MGJRouter +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/ModuleC/ModuleC-dummy.m b/Pods/Target Support Files/ModuleC/ModuleC-dummy.m new file mode 100644 index 0000000..072597f --- /dev/null +++ b/Pods/Target Support Files/ModuleC/ModuleC-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ModuleC : NSObject +@end +@implementation PodsDummy_ModuleC +@end diff --git a/Pods/Target Support Files/ModuleC/ModuleC-prefix.pch b/Pods/Target Support Files/ModuleC/ModuleC-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/ModuleC/ModuleC-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/ModuleC/ModuleC.xcconfig b/Pods/Target Support Files/ModuleC/ModuleC.xcconfig new file mode 100644 index 0000000..4773aa5 --- /dev/null +++ b/Pods/Target Support Files/ModuleC/ModuleC.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ModuleC +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ModuleC" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/ModuleC" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/ModuleC +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/ModuleD/ModuleD-dummy.m b/Pods/Target Support Files/ModuleD/ModuleD-dummy.m new file mode 100644 index 0000000..b29be82 --- /dev/null +++ b/Pods/Target Support Files/ModuleD/ModuleD-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ModuleD : NSObject +@end +@implementation PodsDummy_ModuleD +@end diff --git a/Pods/Target Support Files/ModuleD/ModuleD-prefix.pch b/Pods/Target Support Files/ModuleD/ModuleD-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/ModuleD/ModuleD-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/ModuleD/ModuleD.xcconfig b/Pods/Target Support Files/ModuleD/ModuleD.xcconfig new file mode 100644 index 0000000..5a1a62f --- /dev/null +++ b/Pods/Target Support Files/ModuleD/ModuleD.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ModuleD +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ModuleD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/ModuleD" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/ModuleD +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Pods-Router/Pods-Router-acknowledgements.markdown b/Pods/Target Support Files/Pods-Router/Pods-Router-acknowledgements.markdown new file mode 100644 index 0000000..f64e283 --- /dev/null +++ b/Pods/Target Support Files/Pods-Router/Pods-Router-acknowledgements.markdown @@ -0,0 +1,29 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## MGJRouter + +The MIT License (MIT) + +Copyright (c) 2015 mogujie + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-Router/Pods-Router-acknowledgements.plist b/Pods/Target Support Files/Pods-Router/Pods-Router-acknowledgements.plist new file mode 100644 index 0000000..01e9400 --- /dev/null +++ b/Pods/Target Support Files/Pods-Router/Pods-Router-acknowledgements.plist @@ -0,0 +1,61 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2015 mogujie + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + License + MIT + Title + MGJRouter + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-Router/Pods-Router-dummy.m b/Pods/Target Support Files/Pods-Router/Pods-Router-dummy.m new file mode 100644 index 0000000..2584118 --- /dev/null +++ b/Pods/Target Support Files/Pods-Router/Pods-Router-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Router : NSObject +@end +@implementation PodsDummy_Pods_Router +@end diff --git a/Pods/Target Support Files/Pods-Router/Pods-Router.debug.xcconfig b/Pods/Target Support Files/Pods-Router/Pods-Router.debug.xcconfig new file mode 100644 index 0000000..bcd6f4c --- /dev/null +++ b/Pods/Target Support Files/Pods-Router/Pods-Router.debug.xcconfig @@ -0,0 +1,8 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MGJRouter" "${PODS_ROOT}/Headers/Public/ModuleC" "${PODS_ROOT}/Headers/Public/ModuleD" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MGJRouter" "${PODS_CONFIGURATION_BUILD_DIR}/ModuleC" "${PODS_CONFIGURATION_BUILD_DIR}/ModuleD" +OTHER_LDFLAGS = $(inherited) -ObjC -l"MGJRouter" -l"ModuleC" -l"ModuleD" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-Router/Pods-Router.release.xcconfig b/Pods/Target Support Files/Pods-Router/Pods-Router.release.xcconfig new file mode 100644 index 0000000..bcd6f4c --- /dev/null +++ b/Pods/Target Support Files/Pods-Router/Pods-Router.release.xcconfig @@ -0,0 +1,8 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MGJRouter" "${PODS_ROOT}/Headers/Public/ModuleC" "${PODS_ROOT}/Headers/Public/ModuleD" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MGJRouter" "${PODS_CONFIGURATION_BUILD_DIR}/ModuleC" "${PODS_CONFIGURATION_BUILD_DIR}/ModuleD" +OTHER_LDFLAGS = $(inherited) -ObjC -l"MGJRouter" -l"ModuleC" -l"ModuleD" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Router.podspec b/Router.podspec new file mode 100644 index 0000000..54f9704 --- /dev/null +++ b/Router.podspec @@ -0,0 +1,15 @@ +Pod::Spec.new do |s| +s.name = 'Router' +s.version = '1.0.0' +s.summary = 'Router' +s.homepage = 'https://github.com/aloow/Router.git' +s.license = 'MIT' +s.authors = "shaoqing" +s.platform = :ios, '13.0' +s.source = {:git => 'https://github.com/aloow/Router.git', :tag => s.version} +s.source_files = 'Router/Classes/*.{h,m}' +s.requires_arc = true +s.dependency "MGJRouter" +s.dependency "ModuleC" +s.dependency "ModuleD" +end diff --git a/Router.xcodeproj/project.pbxproj b/Router.xcodeproj/project.pbxproj index f8990cd..8ff86cd 100644 --- a/Router.xcodeproj/project.pbxproj +++ b/Router.xcodeproj/project.pbxproj @@ -14,9 +14,12 @@ 88845E4024EBD7DA00FD75FE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 88845E3F24EBD7DA00FD75FE /* Assets.xcassets */; }; 88845E4324EBD7DA00FD75FE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 88845E4124EBD7DA00FD75FE /* LaunchScreen.storyboard */; }; 88845E4624EBD7DA00FD75FE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 88845E4524EBD7DA00FD75FE /* main.m */; }; + 88845E5224EBD86D00FD75FE /* GlobalModuleRouter.m in Sources */ = {isa = PBXBuildFile; fileRef = 88845E5124EBD86D00FD75FE /* GlobalModuleRouter.m */; }; + F44A547838290FF41DD5A404 /* libPods-Router.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B8ABE14874CBAEBF3448C3B4 /* libPods-Router.a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 0E804A0440EBB3C2010AB096 /* Pods-Router.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Router.release.xcconfig"; path = "Target Support Files/Pods-Router/Pods-Router.release.xcconfig"; sourceTree = ""; }; 88845E3024EBD7D900FD75FE /* Router.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Router.app; sourceTree = BUILT_PRODUCTS_DIR; }; 88845E3324EBD7D900FD75FE /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 88845E3424EBD7D900FD75FE /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -29,6 +32,10 @@ 88845E4224EBD7DA00FD75FE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 88845E4424EBD7DA00FD75FE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 88845E4524EBD7DA00FD75FE /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 88845E5024EBD86D00FD75FE /* GlobalModuleRouter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GlobalModuleRouter.h; sourceTree = ""; }; + 88845E5124EBD86D00FD75FE /* GlobalModuleRouter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GlobalModuleRouter.m; sourceTree = ""; }; + B8ABE14874CBAEBF3448C3B4 /* libPods-Router.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Router.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + D5818ACF8FFE61C36F0F46CA /* Pods-Router.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Router.debug.xcconfig"; path = "Target Support Files/Pods-Router/Pods-Router.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -36,17 +43,37 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + F44A547838290FF41DD5A404 /* libPods-Router.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2815FDC5343E55E8E1122208 /* Pods */ = { + isa = PBXGroup; + children = ( + D5818ACF8FFE61C36F0F46CA /* Pods-Router.debug.xcconfig */, + 0E804A0440EBB3C2010AB096 /* Pods-Router.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 2E9C68EFBD2F32E0BA970813 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B8ABE14874CBAEBF3448C3B4 /* libPods-Router.a */, + ); + name = Frameworks; + sourceTree = ""; + }; 88845E2724EBD7D900FD75FE = { isa = PBXGroup; children = ( 88845E3224EBD7D900FD75FE /* Router */, 88845E3124EBD7D900FD75FE /* Products */, + 2815FDC5343E55E8E1122208 /* Pods */, + 2E9C68EFBD2F32E0BA970813 /* Frameworks */, ); sourceTree = ""; }; @@ -61,6 +88,7 @@ 88845E3224EBD7D900FD75FE /* Router */ = { isa = PBXGroup; children = ( + 88845E4C24EBD83700FD75FE /* Classes */, 88845E3324EBD7D900FD75FE /* AppDelegate.h */, 88845E3424EBD7D900FD75FE /* AppDelegate.m */, 88845E3624EBD7D900FD75FE /* SceneDelegate.h */, @@ -76,6 +104,15 @@ path = Router; sourceTree = ""; }; + 88845E4C24EBD83700FD75FE /* Classes */ = { + isa = PBXGroup; + children = ( + 88845E5024EBD86D00FD75FE /* GlobalModuleRouter.h */, + 88845E5124EBD86D00FD75FE /* GlobalModuleRouter.m */, + ); + path = Classes; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -83,6 +120,7 @@ isa = PBXNativeTarget; buildConfigurationList = 88845E4924EBD7DA00FD75FE /* Build configuration list for PBXNativeTarget "Router" */; buildPhases = ( + AD2EF173402F9D5FDFE98D0F /* [CP] Check Pods Manifest.lock */, 88845E2C24EBD7D900FD75FE /* Sources */, 88845E2D24EBD7D900FD75FE /* Frameworks */, 88845E2E24EBD7D900FD75FE /* Resources */, @@ -141,12 +179,38 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + AD2EF173402F9D5FDFE98D0F /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Router-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 88845E2C24EBD7D900FD75FE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 88845E3B24EBD7D900FD75FE /* ViewController.m in Sources */, + 88845E5224EBD86D00FD75FE /* GlobalModuleRouter.m in Sources */, 88845E3524EBD7D900FD75FE /* AppDelegate.m in Sources */, 88845E4624EBD7DA00FD75FE /* main.m in Sources */, 88845E3824EBD7D900FD75FE /* SceneDelegate.m in Sources */, @@ -287,33 +351,37 @@ }; 88845E4A24EBD7DA00FD75FE /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D5818ACF8FFE61C36F0F46CA /* Pods-Router.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = Router/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = test.Router; PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 1; }; name = Debug; }; 88845E4B24EBD7DA00FD75FE /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 0E804A0440EBB3C2010AB096 /* Pods-Router.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = Router/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = test.Router; PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 1; }; name = Release; }; diff --git a/Router.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/xcschememanagement.plist b/Router.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/xcschememanagement.plist index 754a430..508043b 100644 --- a/Router.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Router.xcodeproj/xcuserdata/imac.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ Router.xcscheme_^#shared#^_ orderHint - 0 + 4 diff --git a/Router.xcworkspace/contents.xcworkspacedata b/Router.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..75c9520 --- /dev/null +++ b/Router.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Router.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Router.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Router.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Router/Classes/GlobalModuleRouter.h b/Router/Classes/GlobalModuleRouter.h new file mode 100644 index 0000000..ab0de8a --- /dev/null +++ b/Router/Classes/GlobalModuleRouter.h @@ -0,0 +1,13 @@ +// +// GlobalModuleRouter.h +// RouterDemo +// +// Created by 廖文韬 on 2018/7/16. +// Copyright © 2018年 廖文韬. All rights reserved. +// + +#import + +@interface GlobalModuleRouter : NSObject + +@end diff --git a/Router/Classes/GlobalModuleRouter.m b/Router/Classes/GlobalModuleRouter.m new file mode 100644 index 0000000..851f70e --- /dev/null +++ b/Router/Classes/GlobalModuleRouter.m @@ -0,0 +1,43 @@ +// +// GlobalModuleRouter.m +// RouterDemo +// +// Created by 廖文韬 on 2018/7/16. +// Copyright © 2018年 廖文韬. All rights reserved. +// + +#import "GlobalModuleRouter.h" +#import "MGJRouter.h" +#import +#import + +@implementation GlobalModuleRouter + +// 在load方法中自动注册,在主工程中不用写任何代码。 ++ (void)load { + + [MGJRouter registerURLPattern:@"ModuleC://Test/ModuleCViewController" toHandler:^(NSDictionary *routerParameters) { + UINavigationController *navigationVC = routerParameters[MGJRouterParameterUserInfo][@"navigationVC"]; + // block + void(^block)(NSString *) = routerParameters[MGJRouterParameterUserInfo][@"block"]; + NSString *title = routerParameters[MGJRouterParameterUserInfo][@"title"]; + ModuleCViewController *vc = [[ModuleCViewController alloc] init]; + vc.title = title; + [navigationVC pushViewController:vc animated:YES]; + }]; + + + [MGJRouter registerURLPattern:@"ModuleC://Test/ModuleDViewController" toHandler:^(NSDictionary *routerParameters) { + UINavigationController *navigationVC = routerParameters[MGJRouterParameterUserInfo][@"navigationVC"]; + // block + void(^block)(NSString *) = routerParameters[MGJRouterParameterUserInfo][@"block"]; + NSString *title = routerParameters[MGJRouterParameterUserInfo][@"title"]; + ModuleDViewController *vc = [[ModuleDViewController alloc] init]; + vc.title = title; + [navigationVC pushViewController:vc animated:YES]; + }]; + +} + + +@end