1// Copyright 2018-present 650 Industries. All rights reserved. 2 3#import <EXDevLauncher/EXRCTAppDelegateInterceptor.h> 4 5#import <memory> 6#import <cxxreact/JSExecutor.h> 7#import <React/RCTCxxBridgeDelegate.h> 8 9#if __has_include(<RNReanimated/REAInitializer.h>) 10#import <RNReanimated/REAInitializer.h> 11#endif // __has_include(<RNReanimated/REAInitializer.h>) 12 13@interface DevClientAppDelegate () <RCTCxxBridgeDelegate> 14@end 15 16@implementation EXRCTAppDelegateInterceptor 17 18- (instancetype)initWithBridgeDelegate:(id<RCTBridgeDelegate>)bridgeDelegate interceptor:(id<RCTBridgeDelegate>)interceptor 19{ 20 if (self = [super init]) { 21 self.bridgeDelegate = bridgeDelegate; 22 self.interceptor = interceptor; 23 } 24 return self; 25} 26 27- (BOOL)conformsToProtocol:(Protocol *)protocol 28{ 29 return [self.bridgeDelegate conformsToProtocol:protocol]; 30} 31 32- (id)forwardingTargetForSelector:(SEL)selector 33{ 34 if ([self isInterceptedSelector:selector]) { 35 return self; 36 } 37 return self.bridgeDelegate; 38} 39 40- (BOOL)respondsToSelector:(SEL)selector 41{ 42 if ([self isInterceptedSelector:selector]) { 43 return YES; 44 } 45 return [self.bridgeDelegate respondsToSelector:selector]; 46} 47 48- (BOOL)isInterceptedSelector:(SEL)selector 49{ 50 if ([self.interceptor respondsToSelector:selector]) { 51 return YES; 52 } 53 return NO; 54} 55 56- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { 57 return [self.interceptor sourceURLForBridge:bridge]; 58} 59 60- (std::unique_ptr<facebook::react::JSExecutorFactory>)jsExecutorFactoryForBridge:(RCTBridge *)bridge 61{ 62#if __has_include(<RNReanimated/REAInitializer.h>) \ 63 && __has_include(<RNReanimated/UIResponder+Reanimated.h>) /* removed in [email protected] */ \ 64 && !RCT_NEW_ARCH_ENABLED 65 // required and available only for react-native-reanimated < 3.4.0 66 reanimated::REAInitializer(bridge); 67#endif 68 69 return [super jsExecutorFactoryForBridge:bridge]; 70} 71 72@end 73