mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Support launchOptions in bridgeless mode (#43757)
Summary: Support launchOptions in bridgeless mode bypass-github-export-checks ## Changelog: [IOS] [FIXED] - Support launchOptions in bridgeless mode Pull Request resolved: https://github.com/facebook/react-native/pull/43757 Test Plan: ``` useEffect(() => { const processInitialURL = async () => { const url = await Linking.getInitialURL(); if (url !== null) { console.log(`Initial url is: ${url}`); } }; processInitialURL(); }, []); ``` Reviewed By: javache Differential Revision: D55790758 Pulled By: cipolleschi fbshipit-source-id: 0f6aa6bdcebfc5bc42d632bea9193f122c1eb84f
This commit is contained in:
committed by
Facebook GitHub Bot
parent
5ea511736b
commit
90296be1d4
@@ -123,7 +123,7 @@ static NSDictionary *updateInitialProps(NSDictionary *initialProps, BOOL isFabri
|
||||
RCTEnableTurboModuleInterop(YES);
|
||||
RCTEnableTurboModuleInteropBridgeProxy(YES);
|
||||
|
||||
[self createReactHostIfNeeded];
|
||||
[self createReactHostIfNeeded:launchOptions];
|
||||
|
||||
RCTFabricSurface *surface = [_reactHost createSurfaceWithModuleName:moduleName initialProperties:initProps];
|
||||
|
||||
@@ -207,7 +207,7 @@ static NSDictionary *updateInitialProps(NSDictionary *initialProps, BOOL isFabri
|
||||
|
||||
#pragma mark - New Arch Utilities
|
||||
|
||||
- (void)createReactHostIfNeeded
|
||||
- (void)createReactHostIfNeeded:(NSDictionary *)launchOptions
|
||||
{
|
||||
if (_reactHost) {
|
||||
return;
|
||||
@@ -219,7 +219,8 @@ static NSDictionary *updateInitialProps(NSDictionary *initialProps, BOOL isFabri
|
||||
turboModuleManagerDelegate:_turboModuleManagerDelegate
|
||||
jsEngineProvider:^std::shared_ptr<facebook::react::JSRuntimeFactory>() {
|
||||
return [weakSelf createJSRuntimeFactory];
|
||||
}];
|
||||
}
|
||||
launchOptions:launchOptions];
|
||||
[_reactHost setBundleURLProvider:^NSURL *() {
|
||||
return [weakSelf bundleURL];
|
||||
}];
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
#import "RCTBridgeModule.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class RCTBundleManager;
|
||||
@class RCTCallableJSModules;
|
||||
@class RCTModuleRegistry;
|
||||
@@ -22,7 +24,8 @@
|
||||
callableJSModules:(RCTCallableJSModules *)callableJSModules
|
||||
dispatchToJSThread:(void (^)(dispatch_block_t))dispatchToJSThread
|
||||
registerSegmentWithId:(void (^)(NSNumber *, NSString *))registerSegmentWithId
|
||||
runtime:(void *)runtime NS_DESIGNATED_INITIALIZER;
|
||||
runtime:(void *)runtime
|
||||
launchOptions:(nullable NSDictionary *)launchOptions NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel;
|
||||
- (void)forwardInvocation:(NSInvocation *)invocation;
|
||||
@@ -37,3 +40,5 @@
|
||||
- (id)moduleForName:(NSString *)moduleName lazilyLoadIfNecessary:(BOOL)lazilyLoad;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -35,6 +35,7 @@ using namespace facebook;
|
||||
RCTModuleRegistry *_moduleRegistry;
|
||||
RCTBundleManager *_bundleManager;
|
||||
RCTCallableJSModules *_callableJSModules;
|
||||
NSDictionary *_launchOptions;
|
||||
void (^_dispatchToJSThread)(dispatch_block_t);
|
||||
void (^_registerSegmentWithId)(NSNumber *, NSString *);
|
||||
void *_runtime;
|
||||
@@ -47,6 +48,7 @@ using namespace facebook;
|
||||
dispatchToJSThread:(void (^)(dispatch_block_t))dispatchToJSThread
|
||||
registerSegmentWithId:(void (^)(NSNumber *, NSString *))registerSegmentWithId
|
||||
runtime:(void *)runtime
|
||||
launchOptions:(nullable NSDictionary *)launchOptions
|
||||
{
|
||||
self = [super self];
|
||||
if (self) {
|
||||
@@ -57,6 +59,7 @@ using namespace facebook;
|
||||
_dispatchToJSThread = dispatchToJSThread;
|
||||
_registerSegmentWithId = registerSegmentWithId;
|
||||
_runtime = runtime;
|
||||
_launchOptions = [launchOptions copy];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -191,8 +194,7 @@ using namespace facebook;
|
||||
|
||||
- (NSDictionary *)launchOptions
|
||||
{
|
||||
[self logError:@"This method is not supported. Returning nil." cmd:_cmd];
|
||||
return nil;
|
||||
return _launchOptions;
|
||||
}
|
||||
|
||||
- (BOOL)loading
|
||||
|
||||
+1
-1
@@ -674,7 +674,7 @@ static Class getFallbackClassFromName(const char *name)
|
||||
*/
|
||||
if (_bridge) {
|
||||
[(id)module setValue:_bridge forKey:@"bridge"];
|
||||
} else if (_bridgeProxy && [self _isLegacyModuleClass:[module class]]) {
|
||||
} else if (_bridgeProxy) {
|
||||
[(id)module setValue:_bridgeProxy forKey:@"bridge"];
|
||||
}
|
||||
} @catch (NSException *exception) {
|
||||
|
||||
@@ -58,7 +58,8 @@ static ShimRCTInstance *shimmedRCTInstance;
|
||||
turboModuleManagerDelegate:OCMProtocolMock(@protocol(RCTTurboModuleManagerDelegate))
|
||||
jsEngineProvider:^std::shared_ptr<facebook::react::JSRuntimeFactory>() {
|
||||
return std::make_shared<facebook::react::RCTHermesInstance>();
|
||||
}];
|
||||
}
|
||||
launchOptions:nil];
|
||||
}
|
||||
|
||||
- (void)tearDown
|
||||
|
||||
@@ -48,7 +48,8 @@ typedef std::shared_ptr<facebook::react::JSRuntimeFactory> (^RCTHostJSEngineProv
|
||||
- (instancetype)initWithBundleURL:(NSURL *)bundleURL
|
||||
hostDelegate:(id<RCTHostDelegate>)hostDelegate
|
||||
turboModuleManagerDelegate:(id<RCTTurboModuleManagerDelegate>)turboModuleManagerDelegate
|
||||
jsEngineProvider:(RCTHostJSEngineProvider)jsEngineProvider NS_DESIGNATED_INITIALIZER;
|
||||
jsEngineProvider:(RCTHostJSEngineProvider)jsEngineProvider
|
||||
launchOptions:(nullable NSDictionary *)launchOptions NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
@property (nonatomic, weak, nullable) id<RCTHostRuntimeDelegate> runtimeDelegate;
|
||||
|
||||
|
||||
@@ -58,6 +58,8 @@ class RCTHostHostTargetDelegate : public facebook::react::jsinspector_modern::Ho
|
||||
RCTHostBundleURLProvider _bundleURLProvider;
|
||||
RCTHostJSEngineProvider _jsEngineProvider;
|
||||
|
||||
NSDictionary *_launchOptions;
|
||||
|
||||
// All the surfaces that need to be started after main bundle execution
|
||||
NSMutableArray<RCTFabricSurface *> *_surfaceStartBuffer;
|
||||
std::mutex _surfaceStartBufferMutex;
|
||||
@@ -85,6 +87,7 @@ class RCTHostHostTargetDelegate : public facebook::react::jsinspector_modern::Ho
|
||||
hostDelegate:(id<RCTHostDelegate>)hostDelegate
|
||||
turboModuleManagerDelegate:(id<RCTTurboModuleManagerDelegate>)turboModuleManagerDelegate
|
||||
jsEngineProvider:(RCTHostJSEngineProvider)jsEngineProvider
|
||||
launchOptions:(nullable NSDictionary *)launchOptions
|
||||
{
|
||||
if (self = [super init]) {
|
||||
_hostDelegate = hostDelegate;
|
||||
@@ -93,6 +96,7 @@ class RCTHostHostTargetDelegate : public facebook::react::jsinspector_modern::Ho
|
||||
_bundleManager = [RCTBundleManager new];
|
||||
_moduleRegistry = [RCTModuleRegistry new];
|
||||
_jsEngineProvider = [jsEngineProvider copy];
|
||||
_launchOptions = [launchOptions copy];
|
||||
|
||||
__weak RCTHost *weakSelf = self;
|
||||
|
||||
@@ -204,7 +208,8 @@ class RCTHostHostTargetDelegate : public facebook::react::jsinspector_modern::Ho
|
||||
turboModuleManagerDelegate:_turboModuleManagerDelegate
|
||||
onInitialBundleLoad:_onInitialBundleLoad
|
||||
moduleRegistry:_moduleRegistry
|
||||
parentInspectorTarget:_inspectorTarget.get()];
|
||||
parentInspectorTarget:_inspectorTarget.get()
|
||||
launchOptions:_launchOptions];
|
||||
[_hostDelegate hostDidStart:self];
|
||||
}
|
||||
|
||||
@@ -284,7 +289,8 @@ class RCTHostHostTargetDelegate : public facebook::react::jsinspector_modern::Ho
|
||||
turboModuleManagerDelegate:_turboModuleManagerDelegate
|
||||
onInitialBundleLoad:_onInitialBundleLoad
|
||||
moduleRegistry:_moduleRegistry
|
||||
parentInspectorTarget:_inspectorTarget.get()];
|
||||
parentInspectorTarget:_inspectorTarget.get()
|
||||
launchOptions:_launchOptions];
|
||||
[_hostDelegate hostDidStart:self];
|
||||
|
||||
for (RCTFabricSurface *surface in [self _getAttachedSurfaces]) {
|
||||
|
||||
+2
-1
@@ -62,7 +62,8 @@ typedef void (^_Null_unspecified RCTInstanceInitialBundleLoadCompletionBlock)();
|
||||
turboModuleManagerDelegate:(id<RCTTurboModuleManagerDelegate>)turboModuleManagerDelegate
|
||||
onInitialBundleLoad:(RCTInstanceInitialBundleLoadCompletionBlock)onInitialBundleLoad
|
||||
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
|
||||
parentInspectorTarget:(facebook::react::jsinspector_modern::HostTarget *)parentInspectorTarget;
|
||||
parentInspectorTarget:(facebook::react::jsinspector_modern::HostTarget *)parentInspectorTarget
|
||||
launchOptions:(nullable NSDictionary *)launchOptions;
|
||||
|
||||
- (void)callFunctionOnJSModule:(NSString *)moduleName method:(NSString *)method args:(NSArray *)args;
|
||||
|
||||
|
||||
+5
-1
@@ -84,6 +84,7 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
||||
std::mutex _invalidationMutex;
|
||||
std::atomic<bool> _valid;
|
||||
RCTJSThreadManager *_jsThreadManager;
|
||||
NSDictionary *_launchOptions;
|
||||
|
||||
// APIs supporting interop with native modules and view managers
|
||||
RCTBridgeModuleDecorator *_bridgeModuleDecorator;
|
||||
@@ -100,6 +101,7 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
||||
onInitialBundleLoad:(RCTInstanceInitialBundleLoadCompletionBlock)onInitialBundleLoad
|
||||
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
|
||||
parentInspectorTarget:(jsinspector_modern::HostTarget *)parentInspectorTarget
|
||||
launchOptions:(nullable NSDictionary *)launchOptions
|
||||
{
|
||||
if (self = [super init]) {
|
||||
_performanceLogger = [RCTPerformanceLogger new];
|
||||
@@ -125,6 +127,7 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
||||
[weakSelf callFunctionOnJSModule:moduleName method:methodName args:args];
|
||||
}];
|
||||
}
|
||||
_launchOptions = launchOptions;
|
||||
|
||||
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
|
||||
|
||||
@@ -277,7 +280,8 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
||||
[strongSelf registerSegmentWithId:segmentId path:path];
|
||||
}
|
||||
}
|
||||
runtime:_reactInstance->getJavaScriptContext()];
|
||||
runtime:_reactInstance->getJavaScriptContext()
|
||||
launchOptions:_launchOptions];
|
||||
bridgeProxy.jsCallInvoker = jsCallInvoker;
|
||||
[RCTBridge setCurrentBridge:(RCTBridge *)bridgeProxy];
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
@property int initCount;
|
||||
@property int invalidateCount;
|
||||
|
||||
@property NSDictionary *launchOptions;
|
||||
@property NSString *jsModuleName;
|
||||
@property NSString *method;
|
||||
@property NSArray *args;
|
||||
|
||||
@@ -24,7 +24,7 @@ static __weak ShimRCTInstance *weakShim = nil;
|
||||
[ShimRCTInstance class],
|
||||
@selector(initWithDelegate:
|
||||
jsRuntimeFactory:bundleManager:turboModuleManagerDelegate:onInitialBundleLoad:moduleRegistry
|
||||
:parentInspectorTarget:));
|
||||
:parentInspectorTarget:launchOptions:));
|
||||
RCTSwizzleInstanceSelector([RCTInstance class], [ShimRCTInstance class], @selector(invalidate));
|
||||
RCTSwizzleInstanceSelector(
|
||||
[RCTInstance class], [ShimRCTInstance class], @selector(callFunctionOnJSModule:method:args:));
|
||||
@@ -40,7 +40,7 @@ static __weak ShimRCTInstance *weakShim = nil;
|
||||
[ShimRCTInstance class],
|
||||
@selector(initWithDelegate:
|
||||
jsRuntimeFactory:bundleManager:turboModuleManagerDelegate:onInitialBundleLoad:moduleRegistry
|
||||
:parentInspectorTarget:));
|
||||
:parentInspectorTarget:launchOptions:));
|
||||
RCTSwizzleInstanceSelector([RCTInstance class], [ShimRCTInstance class], @selector(invalidate));
|
||||
RCTSwizzleInstanceSelector(
|
||||
[RCTInstance class], [ShimRCTInstance class], @selector(callFunctionOnJSModule:method:args:));
|
||||
@@ -55,6 +55,7 @@ static __weak ShimRCTInstance *weakShim = nil;
|
||||
onInitialBundleLoad:(RCTInstanceInitialBundleLoadCompletionBlock)onInitialBundleLoad
|
||||
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
|
||||
parentInspectorTarget:(facebook::react::jsinspector_modern::HostTarget *)parentInspectorTarget
|
||||
launchOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
weakShim.initCount++;
|
||||
return self;
|
||||
|
||||
Reference in New Issue
Block a user