diff --git a/.travis.yml b/.travis.yml index d48c3c1..b6374ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ language: objective-c xcode_project: BeeHive.xcodeproj xcode_scheme: BeeHive -xcode_sdk: iphonesimulator +xcode_destination: platform=iOS Simulator,OS=9.3,name=iPhone 5s diff --git a/BeeHive.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/BeeHive.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/BeeHive.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/BeeHive/BHRouter.m b/BeeHive/BHRouter.m index 611b811..c04c42c 100644 --- a/BeeHive/BHRouter.m +++ b/BeeHive/BHRouter.m @@ -69,7 +69,7 @@ + (id)bh_getReturnFromInv:(NSInvocation *)inv withSig:(NSMethodSignature *)sig { }; case '@': { // id - id ret = nil; + __unsafe_unretained id ret = nil; [inv getReturnValue:&ret]; return ret; }; @@ -247,69 +247,76 @@ + (BOOL)canOpenURL:(NSURL *)URL __block BOOL flag = YES; [pathComponents enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - NSArray * subPaths = [obj componentsSeparatedByString:BHRURLSubPathSplitPattern]; - if (!subPaths.count) { - flag = NO; - *stop = NO; - return; - } - NSString *pathComponentKey = subPaths.firstObject; - if (router.pathComponentByKey[pathComponentKey]) { - return; - } - Class mClass = NSClassFromString(pathComponentKey); - if (!mClass) { - flag = NO; - *stop = NO; - return; - } - switch (usage) { - case BHRUsageCallService: { - if (subPaths.count < 3) { - flag = NO; - *stop = NO; - return; - } - NSString *protocolStr = subPaths[1]; - NSString *selectorStr = subPaths[2]; - Protocol *protocol = NSProtocolFromString(protocolStr); - SEL selector = NSSelectorFromString(selectorStr); - if (!protocol || - !selector || - ![mClass conformsToProtocol:@protocol(BHServiceProtocol)] || - ![mClass conformsToProtocol:protocol] || - ![mClass instancesRespondToSelector:selector]) { - flag = NO; - *stop = NO; - return; - } - } break; - case BHRUsageJumpViewControler: { - if (![mClass isSubclassOfClass:[UIViewController class]]) { - flag = NO; - *stop = NO; - return; - } - } break; - case BHRUsageRegister: { - if (![mClass conformsToProtocol:@protocol(BHServiceProtocol)]) { - return; - } - if (subPaths.count < 2) { - flag = NO; - *stop = NO; - return; - } - NSString *protocolStr = subPaths[1]; - Protocol *protocol = NSProtocolFromString(protocolStr); - if (!protocol || ![mClass conformsToProtocol:protocol]) { - flag = NO; - *stop = NO; - } - } break; - - default: - break; + + if (![obj isEqualToString:@"/"]) { + + NSArray * subPaths = [obj componentsSeparatedByString:BHRURLSubPathSplitPattern]; + if (!subPaths.count) { + flag = NO; + *stop = NO; + return; + } + + NSString *pathComponentKey = subPaths.firstObject; + if (router.pathComponentByKey[pathComponentKey]) { + return; + } + + Class mClass = NSClassFromString(pathComponentKey); + if (!mClass) { + flag = NO; + *stop = NO; + return; + } + + switch (usage) { + case BHRUsageCallService: { + if (subPaths.count < 3) { + flag = NO; + *stop = NO; + return; + } + NSString *protocolStr = subPaths[1]; + NSString *selectorStr = subPaths[2]; + Protocol *protocol = NSProtocolFromString(protocolStr); + SEL selector = NSSelectorFromString(selectorStr); + if (!protocol || + !selector || + ![mClass conformsToProtocol:@protocol(BHServiceProtocol)] || + ![mClass conformsToProtocol:protocol] || + ![mClass instancesRespondToSelector:selector]) { + flag = NO; + *stop = NO; + return; + } + } break; + case BHRUsageJumpViewControler: { + if (![mClass isSubclassOfClass:[UIViewController class]]) { + flag = NO; + *stop = NO; + return; + } + } break; + case BHRUsageRegister: { + if (![mClass conformsToProtocol:@protocol(BHServiceProtocol)]) { + return; + } + if (subPaths.count < 2) { + flag = NO; + *stop = NO; + return; + } + NSString *protocolStr = subPaths[1]; + Protocol *protocol = NSProtocolFromString(protocolStr); + if (!protocol || ![mClass conformsToProtocol:protocol]) { + flag = NO; + *stop = NO; + } + } break; + + default: + break; + } } }];