diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 8c76f937ae04..d0ff08d48ce0 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -328,10 +328,24 @@ exports[`execute test-app "ReactCodegen/RCTThirdPartyComponentsProvider.mm" shou static dispatch_once_t nativeComponentsToken; dispatch_once(&nativeComponentsToken, ^{ - thirdPartyComponents = @{ - @\\"TestAppComponent\\": NSClassFromString(@\\"RCTTestAppComponent\\"), // test-app - @\\"TestLibraryComponent\\": NSClassFromString(@\\"RCTTestLibraryComponent\\"), // test-library + NSDictionary * componentMapping = @{ + @\\"TestAppComponent\\": @\\"RCTTestAppComponent\\", // test-app + @\\"TestLibraryComponent\\": @\\"RCTTestLibraryComponent\\", // test-library }; + + NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:componentMapping.count]; + + for (NSString *key in componentMapping) { + // Nil for a library this target does not link (an app extension, macOS). + Class klass = NSClassFromString(componentMapping[key]); + if (!klass) { + continue; + } + + [dict setObject:klass forKey:key]; + } + + thirdPartyComponents = dict; }); return thirdPartyComponents; @@ -817,9 +831,23 @@ exports[`execute test-app-legacy "ReactCodegen/RCTThirdPartyComponentsProvider.m static dispatch_once_t nativeComponentsToken; dispatch_once(&nativeComponentsToken, ^{ - thirdPartyComponents = @{ - @\\"TestAppDeprecatedComponent\\": NSClassFromString(@\\"RCTTestAppDeprecatedComponentClass\\"), // test-app-legacy + NSDictionary * componentMapping = @{ + @\\"TestAppDeprecatedComponent\\": @\\"RCTTestAppDeprecatedComponentClass\\", // test-app-legacy }; + + NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:componentMapping.count]; + + for (NSString *key in componentMapping) { + // Nil for a library this target does not link (an app extension, macOS). + Class klass = NSClassFromString(componentMapping[key]); + if (!klass) { + continue; + } + + [dict setObject:klass forKey:key]; + } + + thirdPartyComponents = dict; }); return thirdPartyComponents; diff --git a/packages/react-native/scripts/codegen/generate-artifacts-executor/generateRCTThirdPartyComponents.js b/packages/react-native/scripts/codegen/generate-artifacts-executor/generateRCTThirdPartyComponents.js index d54bd708c7b7..3b926b17a0a9 100644 --- a/packages/react-native/scripts/codegen/generate-artifacts-executor/generateRCTThirdPartyComponents.js +++ b/packages/react-native/scripts/codegen/generate-artifacts-executor/generateRCTThirdPartyComponents.js @@ -138,7 +138,7 @@ function generateRCTThirdPartyComponents( .flatMap(library => { const components = componentsInLibraries[library]; return components.map(({componentName, className}) => { - return `\t\t@"${componentName}": NSClassFromString(@"${className}"), // ${library}`; + return `\t\t@"${componentName}": @"${className}", // ${library}`; }); }) .join('\n'); diff --git a/packages/react-native/scripts/codegen/templates/RCTThirdPartyComponentsProviderMM.template b/packages/react-native/scripts/codegen/templates/RCTThirdPartyComponentsProviderMM.template index 4ce510709e33..6c50d6d9c98c 100644 --- a/packages/react-native/scripts/codegen/templates/RCTThirdPartyComponentsProviderMM.template +++ b/packages/react-native/scripts/codegen/templates/RCTThirdPartyComponentsProviderMM.template @@ -19,9 +19,23 @@ static dispatch_once_t nativeComponentsToken; dispatch_once(&nativeComponentsToken, ^{ - thirdPartyComponents = @{ + NSDictionary * componentMapping = @{ {thirdPartyComponentsMapping} }; + + NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:componentMapping.count]; + + for (NSString *key in componentMapping) { + // Nil for a library this target does not link (an app extension, macOS). + Class klass = NSClassFromString(componentMapping[key]); + if (!klass) { + continue; + } + + [dict setObject:klass forKey:key]; + } + + thirdPartyComponents = dict; }); return thirdPartyComponents;