From 72e75506d5371c5165b90e7ccae9a7959b9db530 Mon Sep 17 00:00:00 2001 From: zevwings Date: Thu, 21 Mar 2019 16:50:44 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D#133<=E8=B0=83=E7=94=A8BH?= =?UTF-8?q?Router.canOpenUrl=E8=BF=87=E6=BB=A4pathComponentKey=E4=B8=BA/?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E8=BD=AC=E6=8D=A2=E4=B8=BAClass=E9=94=99?= =?UTF-8?q?=E8=AF=AF>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeeHive/BHRouter.m | 133 ++++++++++++++++++++++++--------------------- 1 file changed, 70 insertions(+), 63 deletions(-) diff --git a/BeeHive/BHRouter.m b/BeeHive/BHRouter.m index 611b811..bdd46c4 100644 --- a/BeeHive/BHRouter.m +++ b/BeeHive/BHRouter.m @@ -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; + } } }]; From 61c3812c07c7ea7741a9b99a0df364f7dae823b3 Mon Sep 17 00:00:00 2001 From: zevwings Date: Thu, 21 Mar 2019 17:20:51 +0800 Subject: [PATCH 2/3] update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 83a26cc3c4c404085f9f0a8ab75bad145e46e696 Mon Sep 17 00:00:00 2001 From: zevwings Date: Thu, 21 Mar 2019 22:59:40 +0800 Subject: [PATCH 3/3] =?UTF-8?q?`BHRouter.openURL`=E8=B0=83=E7=94=A8`Servic?= =?UTF-8?q?e`=E6=97=B6=EF=BC=8C=E5=A6=82=E6=9E=9C`Selector`=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=80=BC=E4=B8=BA`NSObject`=E6=97=B6crash=E3=80=82=20?= =?UTF-8?q?`ARC`=E6=A8=A1=E5=BC=8F=E4=B8=8B`getReturnValue`=E4=BB=85?= =?UTF-8?q?=E4=BB=85=E6=98=AF=E4=BB=8E`invocation`=E7=9A=84=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=80=BC=E6=8B=B7=E8=B4=9D=E5=88=B0=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E5=86=85=E5=AD=98=E5=9C=B0=E5=9D=80=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E8=BF=94=E5=9B=9E=E5=80=BC=E6=98=AF=E4=B8=80=E4=B8=AA?= =?UTF-8?q?`NSObject`=E5=AF=B9=E8=B1=A1=E7=9A=84=E8=AF=9D=EF=BC=8C?= =?UTF-8?q?=E6=98=AF=E6=B2=A1=E6=9C=89=E5=A4=84=E7=90=86=E8=B5=B7=E5=86=85?= =?UTF-8?q?=E5=AD=98=E7=AE=A1=E7=90=86=E7=9A=84=E3=80=82=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=96=B9=E6=A1=88=EF=BC=9Ahttps://stackoverflow.com/q?= =?UTF-8?q?uestions/22018272/nsinvocation-returns-value-but-makes-app-cras?= =?UTF-8?q?h-with-exc-bad-access?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcshareddata/IDEWorkspaceChecks.plist | 8 ++++++++ BeeHive/BHRouter.m | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 BeeHive.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist 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 bdd46c4..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; };