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;
+ }
}
}];