From a554e59ba090f46642baf36a8464f240e6dd9a18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw=20Chmiela?= Date: Thu, 20 Aug 2020 19:05:55 +0200 Subject: [PATCH 1/2] Make RCTCxxBridgeDelegate not care about return value of jsExecutorFactoryForBridge --- React/CxxBridge/RCTCxxBridge.mm | 2 +- React/CxxBridge/RCTCxxBridgeDelegate.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/React/CxxBridge/RCTCxxBridge.mm b/React/CxxBridge/RCTCxxBridge.mm index d8938d7033a24e..a9bea58741a7a0 100644 --- a/React/CxxBridge/RCTCxxBridge.mm +++ b/React/CxxBridge/RCTCxxBridge.mm @@ -336,7 +336,7 @@ - (void)start if (!self.executorClass) { if ([self.delegate conformsToProtocol:@protocol(RCTCxxBridgeDelegate)]) { id cxxDelegate = (id)self.delegate; - executorFactory = [cxxDelegate jsExecutorFactoryForBridge:self]; + executorFactory = std::make_shared(*reinterpret_cast([cxxDelegate jsExecutorFactoryForBridge:self])); } if (!executorFactory) { executorFactory = std::make_shared(nullptr); diff --git a/React/CxxBridge/RCTCxxBridgeDelegate.h b/React/CxxBridge/RCTCxxBridgeDelegate.h index c574eee4fe5cdf..8e19f3f4208302 100644 --- a/React/CxxBridge/RCTCxxBridgeDelegate.h +++ b/React/CxxBridge/RCTCxxBridgeDelegate.h @@ -28,6 +28,6 @@ class JSExecutorFactory; * If not implemented, or returns an empty pointer, JSIExecutorFactory * will be used with a JSCRuntime. */ -- (std::unique_ptr)jsExecutorFactoryForBridge:(RCTBridge *)bridge; +- (void *)jsExecutorFactoryForBridge:(RCTBridge *)bridge; @end From 7d99f7a7fee19945614fc707d257321de8f6adde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw=20Chmiela?= Date: Thu, 20 Aug 2020 19:06:13 +0200 Subject: [PATCH 2/2] Make RCTCxxBridge not care about the actual protocol implemented, only the method used --- React/CxxBridge/RCTCxxBridge.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/React/CxxBridge/RCTCxxBridge.mm b/React/CxxBridge/RCTCxxBridge.mm index a9bea58741a7a0..e0ab9f68446fdd 100644 --- a/React/CxxBridge/RCTCxxBridge.mm +++ b/React/CxxBridge/RCTCxxBridge.mm @@ -334,7 +334,7 @@ - (void)start // Prepare executor factory (shared_ptr for copy into block) std::shared_ptr executorFactory; if (!self.executorClass) { - if ([self.delegate conformsToProtocol:@protocol(RCTCxxBridgeDelegate)]) { + if ([self.delegate respondsToSelector:@selector(jsExecutorFactoryForBridge:)]) { id cxxDelegate = (id)self.delegate; executorFactory = std::make_shared(*reinterpret_cast([cxxDelegate jsExecutorFactoryForBridge:self])); }