Skip to content

0.61.5 → 0.62.0 RCTBridgeModule Error #28405

Closed
@erdemildiz

Description

@erdemildiz

I upgrade 0.61.5 → 0.62.0 version but getting below error

cannot initialize a parameter of type 'NSArray<id<RCTBridgeModule>> *' with an lvalue of type 'NSArray<Class> *__strong' NSArray<RCTModuleData *> *newModules = [self _initializeModules:modules withDispatchGroup:NULL lazilyDiscovered:YES];

React Native Info:

System:
    OS: macOS 10.15.3
    CPU: (4) x64 Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
    Memory: 63.01 MB / 8.00 GB
    Shell: 5.7.1 - /bin/zsh
  Binaries:
    Node: 10.15.3 - /usr/local/bin/node
    Yarn: 1.15.2 - ~/.yarn/bin/yarn
    npm: 6.4.1 - /usr/local/bin/npm
    Watchman: Not Found
  SDKs:
    iOS SDK:
      Platforms: iOS 13.2, DriverKit 19.0, macOS 10.15, tvOS 13.2, watchOS 6.1
    Android SDK:
      API Levels: 23, 25, 26, 27, 28, 29
      Build Tools: 27.0.3, 28.0.3, 29.0.0, 29.0.1, 29.0.2
      System Images: android-27 | Google Play Intel x86 Atom, android-28 | Intel x86 Atom, android-28 | Google APIs Intel x86 Atom
      Android NDK: Not Found
  IDEs:
    Android Studio: 3.5 AI-191.8026.42.35.6010548
    Xcode: 11.3.1/11C504 - /usr/bin/xcodebuild
  Languages:
    Python: 2.7.16 - /usr/bin/python
  npmPackages:
    @react-native-community/cli: Not Found
    react: 16.13.1 => 16.13.1 
    react-native: 0.62.0 => 0.62.0 
  npmGlobalPackages:
    *react-native*: Not Found 

This line:

NSArray<RCTModuleData *> *moduleDataById = [self _registerModulesForClasses:modules

Activity

label-actions

label-actions commented on Mar 26, 2020

@label-actions
⚠️ Missing Environment Information
ℹ️ Your issue may be missing information about your development environment. You can obtain the missing information by running react-native info in a console.
crobinson42

crobinson42 commented on Mar 27, 2020

@crobinson42

Make sure you run pod repo update in the ios dir

erdemildiz

erdemildiz commented on Mar 27, 2020

@erdemildiz
Author

Unfortunately @crobinson42, pod repo update didn't work. I am getting same error from this lines;

(void)[self _initializeModules:RCTGetModuleClasses() withDispatchGroup:prepareBridge lazilyDiscovered:NO];

- (NSArray<RCTModuleData *> *)_initializeModules:(NSArray<Class> *)modules

NSArray<RCTModuleData *> *newModules = [self _initializeModules:modules

elicwhite

elicwhite commented on Mar 27, 2020

@elicwhite
Member

Do you see this problem when creating a new project? If this issue doesn't occur in a new project, I recommend you create an issue on the upgrade-support repo instead. Sharing your issues when upgrading on that repo will improve the likelihood that you will find others with the same problem and find fixes. It also helps others find you! 😄

erdemildiz

erdemildiz commented on Mar 27, 2020

@erdemildiz
Author

@TheSavior I didn't try on new project. I will open this issue in upgrade-support

pjhaok

pjhaok commented on Feb 14, 2021

@pjhaok

Did we able to solve this issue? I am also facing same issue on xcode 12.5 beta.

damikdk

damikdk commented on Feb 14, 2021

@damikdk

Same here. Xcode 12.5 beta specific problem. Here is change log, just in case.

56 remaining items

added a commit that references this issue on May 25, 2021
allthetime

allthetime commented on May 28, 2021

@allthetime

@russelRajitha Well said! We're all in this together. I was very frustrated 20 minutes ago when I encountered these issues after upgrading macOS and XCode. But I have had issues like this before and I know that it's something to do with react-native & XCode compatibility and because of that that many people would have the same problem. Also, blaming XCode is missing the point... XCode doesn't exist solely to compile react-native apps and breaking changes to complex systems in constant development should be expected. React-native developers fixed the issue in the latest versions and so it seems entirely on the user to either upgrade, or to just humbly take the help of thousands of people that is readily available.

BenShelton

BenShelton commented on Jun 5, 2021

@BenShelton

If you are using a much older version of react-native (I was on 0.54.4 😬 ) then the name of the method may be _initModules instead of _initializeModules. And RCTTurboModuleManager doesn't even exist. Plus I was on a version before the Podfile was a thing 😅

So I adjusted the script @strawberry-code mentioned above and now run this on a postinstall script in package.json:

DIR="node_modules"
if [ -d "$DIR" ]; then
  echo "fixing react files in ${DIR}..."
else
  echo "missing node_modules folder, are you running this script from the correct path?"
  exit 1
fi

TARGET_FILE="./node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm"
FROM="_initModules:(NSArray<id<RCTBridgeModule>>\ \*)modules"
TO="_initModules:(NSArray<Class>\ \*)modules"
sed -i -e "s/$FROM/$TO/g" $TARGET_FILE

echo "now RCTCxxBridge.mm should be fixed"

There's more patches in this script in reality (to patch other things that have broken over the years) but this part addresses this specific issue.

prateekchitransh1907

prateekchitransh1907 commented on Jun 7, 2021

@prateekchitransh1907

This was fixed in the new rn version but if you don't want to upgrade

Add this post install script to your Podfile:

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

End of the Podfile add this 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

After adding this script, just run pod install command.

Happy Coding ❤️

You da man !!

Hudamp

Hudamp commented on Jun 10, 2021

@Hudamp
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

where to add the first code?

AbhilashPurohith

AbhilashPurohith commented on Jun 15, 2021

@AbhilashPurohith

change RCTCxxBridge.mm in line number 624

NSArray<id> *)modules

to

*NSArray )modules

Jackyaung

Jackyaung commented on Jun 22, 2021

@Jackyaung

hi I got another problem after add below codes in podfile, the problem is "main.jsbundle does not exist. This must be a bug with", I have tried all most every way posted online, it didn't solve the problem. my react native version is 61.5.

post_install do |installer|
## Fix for XCode 12.5 beta
find_and_replace("../node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm",
"_initializeModules:(NSArray<id> *)modules", "_initializeModules:(NSArray *)modules")
end

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

sbrighiu

sbrighiu commented on Jun 26, 2021

@sbrighiu

In some cases, you may also need this third one :)

post_install do |installer|
...
find_and_replace("../node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm",
"RCTBridgeModuleNameForClass(strongModule))",
"RCTBridgeModuleNameForClass(Class(strongModule)))")
end

romreed

romreed commented on Jul 15, 2021

@romreed

From the comment of @devethan I propose this bash script to be launched from root of the project:

DIR="node_modules"
if [ -d "$DIR" ]; then
        echo "fixing react files in ${DIR}..."
else
	echo "missing node_modules folder, are you running this script from the correct path?"
	exit 1
fi

TARGET_FILE="./node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm"
FROM="_initializeModules:(NSArray<id<RCTBridgeModule>>\ \*)modules"
TO="_initializeModules:(NSArray<Class>\ \*)modules"
sed -i -e "s/$FROM/$TO/g" $TARGET_FILE

TARGET_FILE="./node_modules/react-native/ReactCommon/turbomodule/core/platform/iOS/RCTTurboModuleManager.mm"
FROM="RCTBridgeModuleNameForClass(module))"
TO="RCTBridgeModuleNameForClass(Class(module)))"
sed -i -e "s/$FROM/$TO/g" $TARGET_FILE

echo "now RCTCxxBridge.mm and RCTTurboModuleManager.mm should be fixed"

Using patch-package should be the preferred way, but for someone like me that for some reasons couldn't use patch-package, this script could be a valid alternative. I put it in the post-install into package.json.

Was heplful. Thank you.

bullerliu

bullerliu commented on Jul 22, 2021

@bullerliu

post_install do |installer|
## Fix for XCode 12.5
find_and_replace("./RNLib/node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm",
"_initializeModules:(NSArray *)modules", "_initializeModules:(NSArray *)modules")
find_and_replace("./RNLib/node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm",
"RCTBridgeModuleNameForClass(module))", "RCTBridgeModuleNameForClass([module class]))")
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
end
end
end

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

这样写没有用

oluoyefeso

oluoyefeso commented on Aug 12, 2021

@oluoyefeso

Having same problem here, but im at .61, the problem is with Xcode 12.5, the last version 12.4 didnt have this problem.
image

Experienced this same issue and this worked for me:

post_install do |installer|
      ## Fix for XCode 12.5

    find_and_replace("../node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm",
    "_initializeModules:(NSArray<id<RCTBridgeModule>> *)modules", "_initializeModules:(NSArray<Class> *)modules")

    find_and_replace("../node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm",
      "RCTBridgeModuleNameForClass(module))", "RCTBridgeModuleNameForClass([module class]))")


    find_and_replace("../node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm",
    "RCTBridgeModuleNameForClass(strongModule))",
    "RCTBridgeModuleNameForClass(Class(strongModule)))")

end

And at the end of the Podfile:

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
luccaroli

luccaroli commented on Sep 30, 2021

@luccaroli

@edrdesigner Build failed
No matching function for call to 'RCTBridgeModuleNameForClass'
Heeeelp how to fix this problem?

You can try this. Using post install script of @edrdesigner above

post_install do |installer|
## Fix for XCode 12.5
     find_and_replace("../node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm",
    "_initializeModules:(NSArray<id<RCTBridgeModule>> *)modules", "_initializeModules:(NSArray<Class> *)modules")
    find_and_replace("../node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm",
    "RCTBridgeModuleNameForClass(module))", "RCTBridgeModuleNameForClass(Class(module)))")
end

Hope this helps

it's worked for me, thanks

locked as resolved and limited conversation to collaborators on Oct 1, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Needs: AttentionIssues where the author has responded to feedback.Needs: Environment InfoPlease run `react-native info` and edit your issue with that command's output.Resolution: LockedThis issue was locked by the bot.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @elicwhite@edrdesigner@LPitonakova@glennperez@ptfly

        Issue actions

          0.61.5 → 0.62.0 RCTBridgeModule Error · Issue #28405 · facebook/react-native