Skip to content

Commit 329f58e

Browse files
RSNarafacebook-github-bot
authored andcommitted
Attach RCTBundleManager to NativeModules
Summary: After this diff, every NativeModule that has `synthesize bundleManager = _bundleManager`, will get access to an RCTBundleManager, that it can use to read from/write to the bridge's bundle URL. Changelog: [iOS][Added] - Attach RCTBundleManager to NativeModules Reviewed By: PeteTheHeat Differential Revision: D28086319 fbshipit-source-id: 6e4cd815d300e9036957ec8c743e947d2cb3f365
1 parent 4a1bafe commit 329f58e

File tree

4 files changed

+44
-8
lines changed

4 files changed

+44
-8
lines changed

React/Base/RCTModuleData.h

+7-3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
@class RCTBridge;
1616
@class RCTModuleRegistry;
1717
@class RCTViewRegistry;
18+
@class RCTBundleManager;
1819

1920
typedef id<RCTBridgeModule> (^RCTBridgeModuleProvider)(void);
2021

@@ -23,18 +24,21 @@ typedef id<RCTBridgeModule> (^RCTBridgeModuleProvider)(void);
2324
- (instancetype)initWithModuleClass:(Class)moduleClass
2425
bridge:(RCTBridge *)bridge
2526
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
26-
viewRegistry_DEPRECATED:(RCTViewRegistry *)viewRegistry_DEPRECATED;
27+
viewRegistry_DEPRECATED:(RCTViewRegistry *)viewRegistry_DEPRECATED
28+
bundleManager:(RCTBundleManager *)bundleManager;
2729

2830
- (instancetype)initWithModuleClass:(Class)moduleClass
2931
moduleProvider:(RCTBridgeModuleProvider)moduleProvider
3032
bridge:(RCTBridge *)bridge
3133
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
32-
viewRegistry_DEPRECATED:(RCTViewRegistry *)viewRegistry_DEPRECATED NS_DESIGNATED_INITIALIZER;
34+
viewRegistry_DEPRECATED:(RCTViewRegistry *)viewRegistry_DEPRECATED
35+
bundleManager:(RCTBundleManager *)bundleManager NS_DESIGNATED_INITIALIZER;
3336

3437
- (instancetype)initWithModuleInstance:(id<RCTBridgeModule>)instance
3538
bridge:(RCTBridge *)bridge
3639
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
37-
viewRegistry_DEPRECATED:(RCTViewRegistry *)viewRegistry_DEPRECATED NS_DESIGNATED_INITIALIZER;
40+
viewRegistry_DEPRECATED:(RCTViewRegistry *)viewRegistry_DEPRECATED
41+
bundleManager:(RCTBundleManager *)bundleManager NS_DESIGNATED_INITIALIZER;
3842

3943
/**
4044
* Calls `constantsToExport` on the module and stores the result. Note that

React/Base/RCTModuleData.mm

+26-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ @implementation RCTModuleData {
5050
BOOL _setupComplete;
5151
RCTModuleRegistry *_moduleRegistry;
5252
RCTViewRegistry *_viewRegistry_DEPRECATED;
53+
RCTBundleManager *_bundleManager;
5354
}
5455

5556
@synthesize methods = _methods;
@@ -103,28 +104,32 @@ - (instancetype)initWithModuleClass:(Class)moduleClass
103104
bridge:(RCTBridge *)bridge
104105
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
105106
viewRegistry_DEPRECATED:(RCTViewRegistry *)viewRegistry_DEPRECATED
107+
bundleManager:(RCTBundleManager *)bundleManager
106108
{
107109
return [self initWithModuleClass:moduleClass
108110
moduleProvider:^id<RCTBridgeModule> {
109111
return [moduleClass new];
110112
}
111113
bridge:bridge
112114
moduleRegistry:moduleRegistry
113-
viewRegistry_DEPRECATED:viewRegistry_DEPRECATED];
115+
viewRegistry_DEPRECATED:viewRegistry_DEPRECATED
116+
bundleManager:bundleManager];
114117
}
115118

116119
- (instancetype)initWithModuleClass:(Class)moduleClass
117120
moduleProvider:(RCTBridgeModuleProvider)moduleProvider
118121
bridge:(RCTBridge *)bridge
119122
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
120123
viewRegistry_DEPRECATED:(RCTViewRegistry *)viewRegistry_DEPRECATED
124+
bundleManager:(RCTBundleManager *)bundleManager
121125
{
122126
if (self = [super init]) {
123127
_bridge = bridge;
124128
_moduleClass = moduleClass;
125129
_moduleProvider = [moduleProvider copy];
126130
_moduleRegistry = moduleRegistry;
127131
_viewRegistry_DEPRECATED = viewRegistry_DEPRECATED;
132+
_bundleManager = bundleManager;
128133
[self setUp];
129134
}
130135
return self;
@@ -134,13 +139,15 @@ - (instancetype)initWithModuleInstance:(id<RCTBridgeModule>)instance
134139
bridge:(RCTBridge *)bridge
135140
moduleRegistry:(RCTModuleRegistry *)moduleRegistry
136141
viewRegistry_DEPRECATED:(RCTViewRegistry *)viewRegistry_DEPRECATED
142+
bundleManager:(RCTBundleManager *)bundleManager
137143
{
138144
if (self = [super init]) {
139145
_bridge = bridge;
140146
_instance = instance;
141147
_moduleClass = [instance class];
142148
_moduleRegistry = moduleRegistry;
143149
_viewRegistry_DEPRECATED = viewRegistry_DEPRECATED;
150+
_bundleManager = bundleManager;
144151
[self setUp];
145152
}
146153
return self;
@@ -203,6 +210,7 @@ - (void)setUpInstanceAndBridge:(int32_t)requestId
203210
[self setBridgeForInstance];
204211
[self setModuleRegistryForInstance];
205212
[self setViewRegistryForInstance];
213+
[self setBundleManagerForInstance];
206214
}
207215

208216
[self setUpMethodQueue];
@@ -284,6 +292,23 @@ - (void)setViewRegistryForInstance
284292
}
285293
}
286294

295+
- (void)setBundleManagerForInstance
296+
{
297+
if ([_instance respondsToSelector:@selector(bundleManager)] && _instance.bundleManager != _bundleManager) {
298+
RCT_PROFILE_BEGIN_EVENT(RCTProfileTagAlways, @"[RCTModuleData setBundleManagerForInstance]", nil);
299+
@try {
300+
[(id)_instance setValue:_bundleManager forKey:@"bundleManager"];
301+
} @catch (NSException *exception) {
302+
RCTLogError(
303+
@"%@ has no setter or ivar for its module registry, which is not "
304+
"permitted. You must either @synthesize the bundleManager property, "
305+
"or provide your own setter method.",
306+
self.name);
307+
}
308+
RCT_PROFILE_END_EVENT(RCTProfileTagAlways, @"");
309+
}
310+
}
311+
287312
- (void)finishSetupForInstance
288313
{
289314
if (!_setupComplete && _instance) {

React/CxxBridge/RCTCxxBridge.mm

+9-3
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ @implementation RCTCxxBridge {
236236

237237
RCTModuleRegistry *_objCModuleRegistry;
238238
RCTViewRegistry *_viewRegistry_DEPRECATED;
239+
RCTBundleManager *_bundleManager;
239240
}
240241

241242
@synthesize bridgeDescription = _bridgeDescription;
@@ -300,6 +301,8 @@ - (instancetype)initWithParentBridge:(RCTBridge *)bridge
300301
_moduleDataByID = [NSMutableArray new];
301302
_objCModuleRegistry = [RCTModuleRegistry new];
302303
[_objCModuleRegistry setBridge:self];
304+
_bundleManager = [RCTBundleManager new];
305+
[_bundleManager setBridge:self];
303306
_viewRegistry_DEPRECATED = [RCTViewRegistry new];
304307
[_viewRegistry_DEPRECATED setBridge:self];
305308

@@ -778,7 +781,8 @@ - (void)updateModuleWithInstance:(id<RCTBridgeModule>)instance
778781
moduleData = [[RCTModuleData alloc] initWithModuleClass:moduleClass
779782
bridge:self
780783
moduleRegistry:_objCModuleRegistry
781-
viewRegistry_DEPRECATED:_viewRegistry_DEPRECATED];
784+
viewRegistry_DEPRECATED:_viewRegistry_DEPRECATED
785+
bundleManager:_bundleManager];
782786
BridgeNativeModulePerfLogger::moduleDataCreateEnd([moduleName UTF8String], moduleDataId);
783787

784788
_moduleDataByName[moduleName] = moduleData;
@@ -853,7 +857,8 @@ - (void)registerExtraModules
853857
RCTModuleData *moduleData = [[RCTModuleData alloc] initWithModuleInstance:module
854858
bridge:self
855859
moduleRegistry:_objCModuleRegistry
856-
viewRegistry_DEPRECATED:_viewRegistry_DEPRECATED];
860+
viewRegistry_DEPRECATED:_viewRegistry_DEPRECATED
861+
bundleManager:_bundleManager];
857862
BridgeNativeModulePerfLogger::moduleDataCreateEnd([moduleName UTF8String], moduleDataId);
858863

859864
_moduleDataByName[moduleName] = moduleData;
@@ -907,7 +912,8 @@ - (void)registerExtraLazyModules
907912
moduleData = [[RCTModuleData alloc] initWithModuleClass:moduleClass
908913
bridge:self
909914
moduleRegistry:_objCModuleRegistry
910-
viewRegistry_DEPRECATED:_viewRegistry_DEPRECATED];
915+
viewRegistry_DEPRECATED:_viewRegistry_DEPRECATED
916+
bundleManager:_bundleManager];
911917
BridgeNativeModulePerfLogger::moduleDataCreateEnd([moduleName UTF8String], moduleDataId);
912918

913919
_moduleDataByName[moduleName] = moduleData;

ReactCommon/react/nativemodule/core/platform/ios/RCTTurboModuleManager.mm

+2-1
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,8 @@ - (TurboModuleHolder *)_getOrCreateTurboModuleHolder:(const char *)moduleName
624624
RCTModuleData *data = [[RCTModuleData alloc] initWithModuleInstance:(id<RCTBridgeModule>)module
625625
bridge:_bridge
626626
moduleRegistry:_moduleRegistry
627-
viewRegistry_DEPRECATED:nil];
627+
viewRegistry_DEPRECATED:nil
628+
bundleManager:nil];
628629
[_bridge registerModuleForFrameUpdates:(id<RCTBridgeModule>)module withModuleData:data];
629630
}
630631

0 commit comments

Comments
 (0)