Skip to content

Commit f336b3a

Browse files
committed
fix: remove RCTCheckForUnregisteredModules (microsoft#2855)
## Summary: <!-- Explain the **motivation** for making this change. What existing problem does the pull request solve? --> Method RCTEnsureModuleClassesInitialized may crash on app boot. The method was a helper counting classes that were not registered for loading when `RCT_MODULE_NO_SELF_LOAD=1`. ## Test Plan: CI and manual RN Tester pass.
1 parent 357ac58 commit f336b3a

1 file changed

Lines changed: 0 additions & 65 deletions

File tree

packages/react-native/React/Base/RCTBridge.mm

Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -120,63 +120,6 @@ static void RCTEnsureModuleClassesInitialized(void)
120120
dispatch_queue_create("com.facebook.react.ModuleClassesSyncQueue", DISPATCH_QUEUE_CONCURRENT);
121121
});
122122
}
123-
124-
/**
125-
* Checks for unregistered modules that conform to RCTBridgeModule protocol.
126-
* This detects misconfiguration where external modules are compiled with
127-
* RCT_MODULE_NO_SELF_LOAD=1 but aren't in the moduleClassNames list.
128-
*/
129-
static void RCTCheckForUnregisteredModules(NSArray<Class> *registeredClasses)
130-
{
131-
static dispatch_once_t onceToken;
132-
dispatch_once(&onceToken, ^{
133-
NSMutableSet<Class> *registeredSet = [NSMutableSet setWithArray:registeredClasses];
134-
135-
// Get all loaded classes
136-
int numClasses = objc_getClassList(NULL, 0);
137-
if (numClasses <= 0) {
138-
return;
139-
}
140-
141-
Class *classes = (Class *)malloc(sizeof(Class) * numClasses);
142-
numClasses = objc_getClassList(classes, numClasses);
143-
144-
NSMutableArray<NSString *> *unregisteredModules = [NSMutableArray new];
145-
146-
// Check each class that conforms to RCTBridgeModule
147-
for (int i = 0; i < numClasses; i++) {
148-
Class cls = classes[i];
149-
150-
// Skip if already registered
151-
if ([registeredSet containsObject:cls]) {
152-
continue;
153-
}
154-
155-
// Check if class conforms to RCTBridgeModule protocol
156-
if (class_conformsToProtocol(cls, @protocol(RCTBridgeModule))) {
157-
// Skip if it's a core module that will be added
158-
NSString *className = NSStringFromClass(cls);
159-
if ([moduleClassNames containsObject:className]) {
160-
continue;
161-
}
162-
163-
[unregisteredModules addObject:className];
164-
}
165-
}
166-
167-
free(classes);
168-
169-
// Log warning if unregistered modules found
170-
if ([unregisteredModules count] > 0) {
171-
RCTLogWarn(@"⚠️ Detected unregistered RCTBridgeModule classes: %@\n"
172-
@"These modules may have been compiled with RCT_MODULE_NO_SELF_LOAD=1 "
173-
@"but are not in the core moduleClassNames list.\n"
174-
@"To fix: Either compile all modules with RCT_MODULE_NO_SELF_LOAD=0, "
175-
@"or add external modules to moduleClassNames in RCTBridge.mm",
176-
[unregisteredModules componentsJoinedByString:@", "]);
177-
}
178-
});
179-
}
180123
// macOS]
181124

182125
NSArray<Class> *RCTGetModuleClasses(void)
@@ -201,9 +144,6 @@ static void RCTCheckForUnregisteredModules(NSArray<Class> *registeredClasses)
201144

202145
NSArray<Class> *finalResult = [result copy];
203146

204-
// Check for misconfigured external modules
205-
RCTCheckForUnregisteredModules(finalResult);
206-
207147
return finalResult;
208148
#else
209149
// macOS]
@@ -212,11 +152,6 @@ static void RCTCheckForUnregisteredModules(NSArray<Class> *registeredClasses)
212152
result = [RCTModuleClasses copy];
213153
});
214154

215-
// [macOS
216-
// Check for misconfigured external modules
217-
RCTCheckForUnregisteredModules(result);
218-
// macOS]
219-
220155
return result;
221156
// [macOS
222157
#endif //RCT_MODULE_NO_SELF_LOAD

0 commit comments

Comments
 (0)