How to migrate to Xcode 12.5
I fixed this by changing a parameter cast in the React module RCTCxxBridge.mm like so:
- (NSArray<RCTModuleData *> *)_initializeModules:(NSArray<id<RCTBridgeModule>> *)modules withDispatchGroup:(dispatch_group_t)dispatchGroup lazilyDiscovered:(BOOL)lazilyDiscovered
To:
- (NSArray<RCTModuleData *> *)_initializeModules:(NSArray<Class> *)modules withDispatchGroup:(dispatch_group_t)dispatchGroup lazilyDiscovered:(BOOL)lazilyDiscovered
I am running 0.59 and not using CocoaPods, but the basic fix is that casts of the form:
NSArray<id<RCTBridgeModule>> *)modules
Should be replaced with:
NSArray<Class> *)modules
This one worked for me.
- Open RCTCxxBridge.mm (line 770) and change parameter type from:
(NSArray<id<RCTBridgeModule>> *)modules
to(NSArray<Class> *)modules
- Open RCTTurboModuleManager.mm (line 300) and change from:
RCTBridgeModuleNameForClass(module))
toRCTBridgeModuleNameForClass(Class(module)));
This one worked for me. Update the PODFILE with:
post_install do |installer| ## Fix for XCode 12.5 beta find_and_replace("../node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm", "_initializeModules:(NSArray<id<RCTBridgeModule>> *)modules", "_initializeModules:(NSArray<Class> *)modules")end
And at the end of podfile add a function:
def find_and_replace(dir, findstr, replacestr) Dir[dir].each do |name| text = File.read(name) replace = text.gsub(findstr,replacestr) if text != replace puts "Fix: " + name File.open(name, "w") { |file| file.puts replace } STDOUT.flush end end Dir[dir + '*/'].each(&method(:find_and_replace))end
The last step if to run:
pod install