facebook / react-native

A framework for building native applications using React
https://reactnative.dev
MIT License
118.23k stars 24.22k forks source link

iOS fails to run on version 0.72.1, 'react/debug/react_native_assert.h' file not found on RunLoopObserver.cpp (React-utils) #38283

Closed maksibajo4 closed 5 months ago

maksibajo4 commented 1 year ago

Description

I get the error: 'react/debug/react_native_assert.h' file not found, React-utils/RunLoopObserver. This is my Podfile:

# Resolve react_native_pods.rb with node to allow for hoisting
require Pod::Executable.execute_command('node', ['-p',
  'require.resolve(
    "react-native/scripts/react_native_pods.rb",
    {paths: [process.argv[1]]},
  )', __dir__]).strip

platform :ios, '13.0'
prepare_react_native_project!

flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled

dynamic_frameworks = [
    'Starscream',
    'iProov',
    'DatadogSDK',
    'SwiftProtobuf',
]
pre_install do |installer|
  installer.pod_targets.each do |pod|
    if !dynamic_frameworks.include?(pod.name)
      puts "Overriding the static_framework? method for #{pod.name}"
      def pod.static_framework?;
        true
      end
      def pod.build_type;
        Pod::BuildType.static_library
      end
    end
  end
end

target 'POK' do
  use_frameworks! :linkage => :static
  config = use_native_modules!
  flags = get_default_flags()

  use_react_native!(
    :path => config[:reactNativePath],
    :hermes_enabled => true,
    :fabric_enabled => flags[:fabric_enabled],
    :flipper_configuration => FlipperConfiguration.disabled,
    :app_path => "#{Pod::Config.instance.installation_root}/.."
  )

  permissions_path = '../node_modules/react-native-permissions/ios'
  pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
  pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
  pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
  pod 'Google-Maps-iOS-Utils', :git => 'https://github.com/Simon-TechForm/google-maps-ios-utils.git', :branch => 'feat/support-apple-silicon'
  pod 'SRSRadialGradient', :path => '../node_modules/react-native-radial-gradient/ios'
  pod 'FirebaseCoreExtension', :modular_headers => true
  pod 'FirebaseInstallations', :modular_headers => true
  pod 'GoogleDataTransport', :modular_headers => true
  pod 'nanopb', :modular_headers => true
  pod 'FirebaseCore', :modular_headers => true
  pod 'FirebaseCoreInternal', :modular_headers => true
  pod 'GoogleUtilities', :modular_headers => true
  $RNFirebaseAsStaticFramework = true

  rn_maps_path = '../node_modules/react-native-maps'
  pod 'react-native-google-maps', :path => rn_maps_path

  target 'POKTests' do
    inherit! :complete
    # Pods for testing
  end

  post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
        end
      end
      installer.generated_projects.each do |project|
        project.targets.each do |target|
          target.build_configurations.each do |config|
            config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
          end
        end
      end
      `sed -i -e  $'s/__IPHONE_10_0/__IPHONE_13_0/' #{installer.sandbox.root}/RCT-Folly/folly/portability/Time.h`
      path = "Pods/Target Support Files/Pods-POK/Pods-POK-frameworks.sh"
      lines = File.readlines(path)
      lines.insert(177, 'install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework"'+"\n")
      File.write(path, lines.join, mode: "w")
  end
end

### React Native Version

0.72.1

### Output of `npx react-native info`

System:
  OS: macOS 13.0
  CPU: (8) x64 Intel(R) Core(TM) i7-1068NG7 CPU @ 2.30GHz
  Memory: 74.79 MB / 32.00 GB
  Shell:
    version: 5.8.1
    path: /bin/zsh
Binaries:
  Node:
    version: 18.16.1
    path: ~/.nvm/versions/node/v18.16.1/bin/node
  Yarn:
    version: 1.22.18
    path: /usr/local/bin/yarn
  npm:
    version: 9.5.1
    path: ~/.nvm/versions/node/v18.16.1/bin/npm
  Watchman:
    version: 2023.07.03.00
    path: /usr/local/bin/watchman
Managers:
  CocoaPods:
    version: 1.12.1
    path: /usr/local/bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 22.4
      - iOS 16.4
      - macOS 13.3
      - tvOS 16.4
      - watchOS 9.4
  Android SDK:
    API Levels:
      - "23"
      - "28"
      - "29"
      - "30"
      - "31"
      - "32"
      - "33"
    Build Tools:
      - 28.0.3
      - 29.0.0
      - 29.0.2
      - 29.0.3
      - 30.0.2
      - 30.0.3
      - 31.0.0
      - 32.0.0
      - 33.0.0
    System Images:
      - android-24 | Google Play Intel x86 Atom
      - android-29 | Intel x86 Atom_64
      - android-30 | Intel x86 Atom_64
      - android-30 | Google APIs Intel x86 Atom
      - android-30 | Google Play Intel x86 Atom
      - android-31 | Intel x86 Atom_64
      - android-33 | Google APIs Intel x86 Atom_64
      - android-33 | Google Play Intel x86 Atom_64
    Android NDK: Not Found
IDEs:
  Android Studio: 2022.2 AI-222.4459.24.2221.10121639
  Xcode:
    version: 14.3.1/14E300c
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 17.0.1
    path: /usr/bin/javac
  Ruby:
    version: 2.6.10
    path: /usr/bin/ruby
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 18.2.0
    wanted: 18.2.0
  react-native:
    installed: 0.72.1
    wanted: 0.72.1
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: false
iOS:
  hermesEnabled: true
  newArchEnabled: false

### Steps to reproduce

i migrated my app to a new clean version of a React native 0.72.1. i install my dependencies successfully using `yarn install`, then i run `pod install` successfully, but when i try to run the project on iOS, it throws me `'react/debug/react_native_assert.h' file not found` error.
Here's my package.json

{ "name": "POK", "version": "0.0.1", "private": true, "scripts": { "postinstall": "patch-package", "android": "react-native run-android", "ios": "react-native run-ios", "lint": "eslint .", "start": "react-native start", "test": "jest" }, "dependencies": { "@react-native-async-storage/async-storage": "^1.19.0", "@react-native-clipboard/clipboard": "^1.11.2", "@react-native-community/blur": "^4.3.2", "@react-native-community/netinfo": "^9.4.1", "@react-native-firebase/analytics": "^18.1.0", "@react-native-firebase/app": "^18.1.0", "@react-native-firebase/crashlytics": "^18.1.0", "@react-native-firebase/messaging": "^18.1.0", "@react-navigation/bottom-tabs": "^6.5.8", "@react-navigation/native": "^6.1.7", "@react-navigation/native-stack": "^6.9.13", "@react-navigation/stack": "^6.3.17", "axios": "^1.4.0", "buffer": "^6.0.3", "card-validator": "^8.1.1", "expo-modules-core": "^1.5.4", "fbjs": "^3.0.5", "isomorphic-webcrypto": "^2.3.8", "js-base64": "^3.7.5", "lodash": "^4.17.21", "lodash.compact": "^3.0.1", "lodash.every": "^4.6.0", "lodash.pick": "^4.4.0", "lodash.values": "^4.3.0", "lottie-ios": "3.4.1", "lottie-react-native": "^5.1.6", "moment-timezone": "^0.5.43", "patch-package": "^7.0.0", "postinstall-postinstall": "^2.1.0", "prop-types": "^15.8.1", "react": "18.2.0", "react-hook-form": "^7.45.1", "react-native": "0.72.1", "react-native-biometrics": "^3.0.1", "react-native-blob-util": "^0.18.3", "react-native-bootsplash": "^4.7.4", "react-native-calendars": "^1.1299.0", "react-native-camera": "^4.2.1", "react-native-confirmation-code-field": "^7.3.1", "react-native-contacts": "^7.0.5", "react-native-device-info": "^10.7.0", "react-native-fast-image": "^8.6.3", "react-native-flash-message": "^0.4.1", "react-native-flip-card": "^3.5.7", "react-native-geocoding": "^0.5.0", "react-native-geolocation-service": "^5.3.1", "react-native-gesture-handler": "^2.12.0", "react-native-google-places-autocomplete": "^2.5.1", "react-native-image-picker": "^5.6.0", "react-native-jumio-mobilesdk": "https://github.com/Jumio/mobile-react.git#v4.5.0", "react-native-keychain": "^8.1.1", "react-native-linear-gradient": "^2.7.3", "react-native-loading-spinner-overlay": "^3.0.1", "react-native-localization": "^2.3.2", "react-native-localize": "^3.0.2", "react-native-map-clustering": "^3.4.2", "react-native-maps": "^1.7.1", "react-native-masked-text": "^1.13.0", "react-native-mmkv": "^2.10.1", "react-native-modal": "^13.0.1", "react-native-modalize": "^2.1.1", "react-native-pdf": "^6.7.1", "react-native-permissions": "^3.8.3", "react-native-qrcode-scanner": "^1.5.5", "react-native-qrcode-svg": "^6.2.0", "react-native-radial-gradient": "^1.1.3", "react-native-radio-buttons": "^1.0.0", "react-native-reanimated": "^3.3.0", "react-native-safe-area-context": "^4.6.4", "react-native-screens": "^3.22.1", "react-native-skeleton-content-nonexpo": "^1.0.13", "react-native-svg": "^13.9.0", "react-native-toast-message": "^2.1.6", "react-native-vector-icons": "^9.2.0", "react-native-webview": "^13.2.2", "react-redux": "^8.1.1", "reanimated-bottom-sheet": "^1.0.0-alpha.22", "redux": "^4.2.1", "redux-logger": "^3.0.6", "redux-persist": "^6.0.0", "redux-thunk": "^2.4.2", "reselect": "^4.1.8", "socket.io-client": "^4.7.1", "validate.js": "^0.13.1" }, "devDependencies": { "@babel/core": "^7.20.0", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", "@react-native/eslint-config": "^0.72.2", "@react-native/metro-config": "^0.72.7", "@tsconfig/react-native": "^3.0.0", "@types/metro-config": "^0.76.3", "@types/react": "^18.0.24", "@types/react-test-renderer": "^18.0.0", "babel-jest": "^29.2.1", "babel-plugin-module-resolver": "^5.0.0", "eslint": "^8.19.0", "eslint-plugin-import": "^2.27.5", "jest": "^29.2.1", "metro-react-native-babel-preset": "0.76.5", "prettier": "^2.4.1", "react-native-svg-transformer": "^1.0.0", "react-test-renderer": "18.2.0", "typescript": "4.8.4" }, "engines": { "node": ">=16" } }

Snack, code example, screenshot, or link to a repository

Screenshot 2023-07-11 at 11 01 12 AM
blakef commented 1 year ago

This looks similar to this reported issue: https://github.com/facebook/react-native/issues/38140#issuecomment-1614755738, can you read that thread if that's useful to unblock yourself.

maksibajo4 commented 1 year ago

This looks similar to this reported issue: #38140 (comment), can you read that thread if that's useful to unblock yourself.

I've read that threat but that issue is for version 0.69.1, so it didn't really help

maksibajo4 commented 1 year ago

@blakef even after applying the patch react-native@0.72.1.patch I still get the same error:


/Users/user/Documents/projects/UpdateTest/node_modules/react-native/ReactCommon/react/utils/RunLoopObserver.cpp:10:10 'react/debug/react_native_assert.h' file not found
blakef commented 1 year ago

This looks similar to this reported issue: #38140 (comment), can you read that thread if that's useful to unblock yourself.

I've read that threat but that issue is for version 0.69.1, so it didn't really help

CleanShot 2023-07-11 at 12 06 40@2x

Did you rerun bundle exec pod install after applying the patch?

maksibajo4 commented 1 year ago

@blakef yes i did, i also tried to remove all pods and cache to do a clean bundle exec pod install, but still the issue persists.


/Users/user/Documents/projects/UpdateTest/node_modules/react-native/ReactCommon/react/utils/RunLoopObserver.cpp:10:10 'react/debug/react_native_assert.h' file not found
vishesh9096 commented 1 year ago

any solution for this problem?

ravindraguptacapgemini commented 1 year ago

+1

surbhidavara99 commented 1 year ago

I am also facing the same issue

VasuLief commented 1 year ago

Also seeing the same issue

Shreepadav commented 1 year ago

I am also facing the same issue

MarcinuDev commented 1 year ago

Any fix? Also struggling with it.

hairus commented 1 year ago

you can see here i'am success

and you can type npx react-native doctor

https://github.com/facebook/react-native/issues/38140

harouf commented 1 year ago

@maksibajo4 Did you manage to fix this issue?

adelindanaila commented 1 year ago

+1

LE: Fixed by using https://github.com/software-mansion/react-native-svg/issues/2081#issuecomment-1691758876 Make sure you pass the libraries that complain

if ["React-cxxreact", "React-NativeModulesApple", "RNGestureHandler", "RNScreens", "React-utils", "React-runtimescheduler"].any? { |t| t == target.name }
    append_header_search_path(target, "${PODS_ROOT}/../../node_modules/react-native/ReactCommon")
end
zjkuang commented 1 year ago

+1

zjkuang commented 1 year ago

@blakef I found that the patches mentioned in the thread above have already been included in RN 0.72.4. But with RN 0.72.4 I still have this issue.

WYA-Not-Found commented 1 year ago

Is there anyone who can solve? I've been stuck there for a while :(

daniel-toth-leeder commented 1 year ago

I was able to fix the issue with this: https://github.com/software-mansion/react-native-svg/issues/2081#issuecomment-1691758876

ShRoO0oM commented 1 year ago

For those who still has this problem, you can temporary get rid of it by pointing out to those headers manually by adding this into your podfile:

installer.pods_project.targets.each do |target|
    # These React Naive targets have probelm on resolving some of their header files
    # These lines will point out to header files that were missing
    # This is a known issue on React Native 0.72
    # https://github.com/facebook/react-native/issues/38283

    if target.name == 'React-RCTSettings' || target.name == 'React-RCTBlob' || target.name == 'React-NativeModulesApple' || target.name == 'React-RCTVibration' || target.name == 'React-RCTNetwork' || target.name == 'React-RCTAnimation' || target.name == 'React-RCTImage' || target.name == 'React-RCTLinking' || target.name == 'React-Codegen' || target.name == 'React-CoreModules'
      target.build_configurations.each do |config|
        config.build_settings["HEADER_SEARCH_PATHS"] ||= "$(inherited) "
        config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios/ "
        config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../../../node_modules/react-native/ReactCommon/react/nativemodule/core/"
      end
    end

    if target.name == "RNReanimated"
      target.build_configurations.each do |config|
        config.build_settings["CLANG_CXX_LANGUAGE_STANDARD"] = 'c++17'
        config.build_settings["HEADER_SEARCH_PATHS"] ||= "$(inherited) "
        config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios/ "
        config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../../../node_modules/react-native/ReactCommon/react/nativemodule/core/"
      end
    end
    if target.name == 'React-RCTAppDelegate' || target.name == 'React-utils' || target.name == 'React-NativeModulesApple' || target.name == 'React-cxxreact'
      target.build_configurations.each do |config|
        config.build_settings["HEADER_SEARCH_PATHS"] ||= "$(inherited) "
        config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../../../node_modules/react-native/ReactCommon"
      end
    end

    if target.name == 'VisionCamera' || target.name == 'ReactCommon'
      target.build_configurations.each do |config|
        config.build_settings["HEADER_SEARCH_PATHS"] ||= "$(inherited) "
        config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../../../node_modules/react-native/ReactCommon "
        config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios/ "
        config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../../../node_modules/react-native/ReactCommon/react/nativemodule/core/"
      end
    end
  end

After this step you will also need to resolve RCTAppSetupUtils.h, for doing so add "${PODS_ROOT}/../../../../node_modules/react-native/Libraries/AppDelegate" in Header search paths in the build settings of main target of application, also change #import <React/RCTAppSetupUtils.h> to #import <RCTAppSetupUtils.h>

I know this is not an ideal solution but it will bypass current errors for bumping your ReactNative version to 0.72.4.

Note to developers: Seems like all the problems lies in ReactCommon so I guess fixing its podspec might fix the issue

WYA-Not-Found commented 1 year ago

Hello I found the solution after working on this for so many long :) It's like the issue with your react native version gap

So I did this :

If you don't want to create new project to copy new podfile code, you can have it here "( use_modular_headers! require Pod::Executable.execute_command('node', ['-p', 'require.resolve( "react-native/scripts/react_native_pods.rb", {paths: [process.argv[1]]}, )', dir]).strip

platform :ios, min_ios_version_supported prepare_react_native_project!

linkage = ENV['USE_FRAMEWORKS'] if linkage != nil Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green use_frameworks! :linkage => linkage.to_sym end

target 'YourProject' do config = use_native_modules!

flags = get_default_flags()

use_react_native!( :path => config[:reactNativePath],

:hermes_enabled => flags[:hermes_enabled],
:fabric_enabled => flags[:fabric_enabled],
:app_path => "#{Pod::Config.instance.installation_root}/.."

)

target 'YourProjectTests' do inherit! :complete end

post_install do |installer| react_native_post_install( installer, config[:reactNativePath], :mac_catalyst_enabled => false ) __apply_Xcode_12_5_M1_post_install_workaround(installer) end end

)"

Hope It will solve your problem with "react/debug/react_native_assert.h' file not found" error in react native ios GoodLuck Guys!

zjkuang commented 1 year ago

After having been blocked many days, my issue was finally fixed by this: https://github.com/software-mansion/react-native-svg/issues/2081#issuecomment-1691758876

adilijaz commented 12 months ago

After having been blocked many days, my issue was finally fixed by this: software-mansion/react-native-svg#2081 (comment)

Hi! Can you please guide me on how you resolve this? I added the following code in my pod but I am still getting the same error: installer.pods_project.targets.each do |target| if ["React-cxxreact", "React-NativeModulesApple", "RNGestureHandler", "RNScreens", "React-utils", "React-runtimescheduler"].any? { |t| t == target.name } append_header_search_path(target, "${PODS_ROOT}/../../node_modules/react-native/ReactCommon") end end

enchorb commented 11 months ago

Getting this on RN 0.72.5 and XCode 15

Adding the following to post_install do |installer| fixed it for now:

    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        if ["React-cxxreact", "React-utils", "React-NativeModulesApple"].any? { |t| t == target.name }
          config.build_settings["HEADER_SEARCH_PATHS"] ||= "$(inherited) "
          config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../node_modules/react-native/ReactCommon"
        end
      end
    end
EduardoBravoP commented 11 months ago

Getting this on RN 0.72.5 and XCode 15

Adding the following to post_install do |installer| fixed it for now:

    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        if ["React-cxxreact", "React-utils", "React-NativeModulesApple"].any? { |t| t == target.name }
          config.build_settings["HEADER_SEARCH_PATHS"] ||= "$(inherited) "
          config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../node_modules/react-native/ReactCommon"
        end
      end
    end

Could you show your full post_install? I am still getting this error

enchorb commented 11 months ago

The full snippet is below

After further testing while this resolves the react/debug/react_native_assert.h I am now getting another error for React-NativeModulesApple --> 'ReactCommon/TurboModuleBinding.h' file not found.

Seems like other folks who have use_frameworks! are getting the later as well. https://github.com/react-native-tvos/react-native-tvos/issues/575

Edit: After further debugging this seems to be an issue with the recent 0.72.5 release. 0.72.4 works for me on XCode 14.3.1 & 15, but 0.72.5 leads to the above errors.

  post_install do |installer|
    react_native_post_install(
      installer,
      config[:reactNativePath],
      :mac_catalyst_enabled => false
    )

    __apply_Xcode_12_5_M1_post_install_workaround(installer)

    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        if ["React-cxxreact", "React-utils", "React-NativeModulesApple"].any? { |t| t == target.name }
          config.build_settings["HEADER_SEARCH_PATHS"] ||= "$(inherited) "
          config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../node_modules/react-native/ReactCommon"
        end
      end
    end
  end
natak0 commented 11 months ago

Downgrading to 0.72.4 (from 0.72.5) and upgrading the XCode from 14.3.2 to 15 fixed it for me without changing the Podfile.

cipolleschi commented 11 months ago

Hi there, sorry that this issue slipped from my watch. Can any of you create a reproducer using the official reproducer so that I can work on that and fix the issue for everyone?

The reproducer should be a vanilla react native app, with all the required libraries.

Thank you so much

nica0012 commented 10 months ago

I am having this issue, I've tried everything above and still have no luck. I tried on both RN 0.72.3 and 0.72.6. I cannot get rid of this error. this was not a problem on RN 0.71

cipolleschi commented 10 months ago

@nica0012 from 0.71 to 0.72 we had to change how the project is structured internally and we introduced some new pods.

some of the third party dependencies needs to be updated in order to support this new setup. I already opened PRs agains RNGestureHandler and RNScreens which are suffering from the problem.

Can you share your Podfile (enclosed in </code> quotes) and the list of your dependencies (enclosed in <code> as well)?

That would help me figure out which dependencies needs to be updated. I'm working on a sample project with all the offending dependencies to build in CI to make sure we don't break them again, and the list of the more common ones would be super useful. Thank you! 🙏

monkeyK1n9 commented 10 months ago

Thanks @enchorb , your solution worked for me. 🚀

ondra-marik commented 10 months ago

Just ran into the same issue when adding RN Firebase to project and adding use_frameworks! :linkage => :static. Can confirm downgrading RN to 0.72.4 resolves the issue. Also may be worth mentioning I'm using pnpm and started my project on 0.72.3 version.

On 0.72.6 the workaround from @enchorb fixed this specific issue for me, but lead to other import problems, finally I got stuck on error resolving FLT_MAX constant.

emmyduruc commented 10 months ago

config[:reactNativePath],

worked for me too

vksgautam1986 commented 10 months ago

Hi @cipolleschi I have just created a repo for this and im using xcode 14.2. My command to create project is npx react-native init testProject RN 0.72.7 and node version is 16.14.1. I have tried fabric on and off both , but the settings have the issues Screenshot 2023-11-15 at 12 23 45 PM

https://github.com/vksgautam1986/RnIssue

fdobre commented 10 months ago

I am encountering the same issue. Tried both RN 0.72.4 and 0.72.6 and all the workarounds from here.

There is still React-NativeModulesApple --> 'ReactCommon/TurboModuleBinding.h' file not found after adding the workaround in pods:

    # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
    react_native_post_install(
      installer,
      config[:reactNativePath],
      :mac_catalyst_enabled => false
    )
    __apply_Xcode_12_5_M1_post_install_workaround(installer)

    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        if ["React-NativeModulesApple", "React-cxxreact", "RNGestureHandler", "RNScreens", "React-utils", "React-runtimescheduler", "StreamAMGSDK/PlayKit"].any? { |t| t == target.name }
          config.build_settings["HEADER_SEARCH_PATHS"] ||= "$(inherited) "
          config.build_settings["HEADER_SEARCH_PATHS"] << "${PODS_ROOT}/../../node_modules/react-native/ReactCommon"
        end
      end
    end

  end

Screenshot 2023-11-16 at 18 06 35

cipolleschi commented 10 months ago

I'll have a look at it tomorrow! Thanks for the repro @vksgautam1986 Can you also invite me as a collaborator, so I can make changes and share them with you more easily?

wkwyatt commented 10 months ago

@cipolleschi please post the fixed changes here I am having the same issue

vksgautam1986 commented 10 months ago

I'll have a look at it tomorrow! Thanks for the repro @vksgautam1986 Can you also invite me as a collaborator, so I can make changes and share them with you more easily?

Thanks , i have invited you

cipolleschi commented 10 months ago

@vksgautam1986 I'm investigating the issue. I cleaned up a little the Podfile, this is the correct version: https://github.com/vksgautam1986/RnIssue/pull/1

After that, I started investigating the issue. I found that the culprit is react-native-image-picker which seems to be not compatible with use_frameworks! Once I remove it with yarn remove react-native-image-picker it then works seamlessly.

I'm now trying to understand what makes react-native-image-picker fail so badly and I'm looking for a solution.

cipolleschi commented 10 months ago

Good news, I understood the problem. Bad news, this is an issue with react-native-image-picker.

This is the PR that fixes. You can apply it to your node_modules while the maintainer release a new version (or any other patching mechanism).

Aaaaaanyway, the technical bits if you are interested.

wkwyatt commented 10 months ago

@cipolleschi I have seen this issue linked to the issue

fatal error: 'ReactCommon/TurboModuleBinding.h' file not found
#import <ReactCommon/TurboModuleBinding.h>

Can you explain how it is related or how changing the node_modules can fix that issue?

cipolleschi commented 10 months ago

If you are using react-native-image-picker, the reason is that that library is using a Swift import that is not compatible. When the libraries are loaded and react-native-image-picker is loaded, the resolution fails at the first c++ symbol encountered. The suggested patch removed the Swift import, therefore fixing the incompatibility.

Otherwise, TurboModuleBinding is another issue. It wasn't happening in the repro provided by @vksgautam1986

If you had that failure, please provide a repro with the dependencies you are using. React Native builds properly with use_frameworks! And it works with Firebase. If you are seeing that error is because either the Podfile you are using is tampering with the the dependencies setup or there is another dependency that is causing issues.

I need to look into the specifics and I need a repro with all your deps.

wkwyatt commented 10 months ago

@cipolleschi This issue was mentioned here https://github.com/facebook/react-native/issues/38067#issuecomment-1766411375 as a root cause. I think I misunderstood then, because I didn't understand where the resolution was on that issue. I can comment there to keep the thread focused but I just didn't see in either issue thread where the fatal error: 'ReactCommon/TurboModuleBinding.h' file not found was resolved

vksgautam1986 commented 10 months ago

Good news, I understood the problem. Bad news, this is an issue with react-native-image-picker.

This is the PR that fixes. You can apply it to your node_modules while the maintainer release a new version (or any other patching mechanism).

Aaaaaanyway, the technical bits if you are interested.

  • Since we started working on the New Architecture, React Native is a C++/Objective-C++ project
  • C++ and Swift don't like each other
  • react-native-image-picker make use of a Swift @import statement here (why? I have no clue! ¯(ツ)/¯)
  • this means that as soon as a file in library tries to import something from React Native the file resolution will fail as soon as it enocunter a C++ symbol. In our case the RunLoopObserver.h

thanks fix is working fine for me and i have patched the image picker fix as well and thanks for the technical explination of the issue. Now it's more clear about things

cipolleschi commented 9 months ago

@wkwyatt Your problem is probably different from the react-native-image-picker.

To help you out I need the exact list of dependencies you are using. The most likely cause is that there is a dependency that is not properly configured that is trying to access the TurboModuleBinding.h files without having it in its own search_path. Thus, the dependency don't find the file and it shows the error. Therefore, the app fails to build.

However, there are 1309 libraries that have React Native as their dependency. Many of them are deprecated or unmaintained. I can't try and fix them all, so, please, provide a reproducer with your dependencies.

mokoshi commented 9 months ago

I'm getting the same build error when updating react-native from 0.71.14 to 0.72.7. image

As @cipolleschi pointed out, I have removed react-native related dependencies one by one to find out which one is causing the error, but in the end I still get the error even after removed every deps except react-native itself. I confirmed that my Podfile.lock is the same as reproducer repos' one.

I'm a bit stucked, but does anyone come up with something which might causing the problem? I could deep dive if any clues are provided...

cipolleschi commented 9 months ago

Hi @mokoshi, some debugging questions:

  1. Does the issue reproduce when you create a new empty app with React Native 0.72.7?
  2. can you run:
    # from the project repo
    yarn install 
    cd ios
    bundle install
    bundle exec pod deintegrate
    bundle exec pod install

    open the xcworkspace file and try to build from Xcode?

  3. Can you share your podfile? (please wrap it in a ```ruby codeblock)
mokoshi commented 9 months ago

Thank you for the instructions @cipolleschi !

  1. Does the issue reproduce when you create a new empty app with React Native 0.72.7?

Probably yes...? First of all, I can build the reproducer repo. Additional information:

diff --git a/ReproducerApp/ios/Podfile b/ReproducerApp/ios/Podfile
index 403498b..60e84a7 100644
--- a/ReproducerApp/ios/Podfile
+++ b/ReproducerApp/ios/Podfile
@@ -17,7 +17,8 @@ prepare_react_native_project!
 #   dependencies: {
 #     ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
 # ```
-flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled
+# flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled
+flipper_config = FlipperConfiguration.disabled

 linkage = ENV['USE_FRAMEWORKS']
 if linkage != nil
@@ -27,6 +28,7 @@ end

 target 'ReproducerApp' do
   config = use_native_modules!
+  use_frameworks! :linkage => :static

   # Flags change depending on the env values.
   flags = get_default_flags()

(The error is not the same as this GitHub issue focuses on 🤔 )

/Users/mokoshi/projects/reproducer-react-native/ReproducerApp/node_modules/react-native/React/Base/RCTRuntimeExecutorFromBridge.h:10:9: error: include of non-modular header inside framework module 'React.RCTRuntimeExecutorFromBridge': '/Users/mokoshi/projects/reproducer-react-native/ReproducerApp/ios/Pods/Headers/Public/React-runtimeexecutor/ReactCommon/RuntimeExecutor.h'
/Users/mokoshi/projects/reproducer-react-native/ReproducerApp/node_modules/react-native-image-picker/ios/ImagePickerManager.h:1:9: Could not build module 'React'
  1. can you run: ...

I followed your instructions, but still having the same error: react_native_assert.h not found

  1. Can you share your podfile?
Here is my podfile: ```ruby # Resolve react_native_pods.rb with node to allow for hoisting require Pod::Executable.execute_command('node', ['-p', 'require.resolve( "react-native/scripts/react_native_pods.rb", {paths: [process.argv[1]]}, )', __dir__]).strip require_relative '../node_modules/react-native-permissions/scripts/setup' platform :ios, min_ios_version_supported prepare_react_native_project! setup_permissions([ 'Camera', 'Notifications', 'PhotoLibrary', ]) # If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set. # because `react-native-flipper` depends on (FlipperKit,...) that will be excluded # # To fix this you can also exclude `react-native-flipper` using a `react-native.config.js` # ```js # module.exports = { # dependencies: { # ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}), # ``` # flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled flipper_config = FlipperConfiguration.disabled linkage = ENV['USE_FRAMEWORKS'] if linkage != nil Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green use_frameworks! :linkage => linkage.to_sym end project 'MyApp', 'Debug' => :debug, 'Release' => :release, 'Local' => :debug, 'Dev' => :release, 'Prod' => :release target 'MyApp' do config = use_native_modules! # for react-native-firebase use_frameworks! :linkage => :static # Flags change depending on the env values. flags = get_default_flags() use_react_native!( :path => config[:reactNativePath], # Hermes is now enabled by default. Disable by setting this flag to false. :hermes_enabled => flags[:hermes_enabled], :fabric_enabled => flags[:fabric_enabled], # Enables Flipper. # # Note that if you have use_frameworks! enabled, Flipper will not work and # you should disable the next line. :flipper_configuration => flipper_config, # An absolute path to your application root. :app_path => "#{Pod::Config.instance.installation_root}/.." ) target 'MyAppTests' do inherit! :complete # Pods for testing end post_install do |installer| # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 react_native_post_install( installer, config[:reactNativePath], :mac_catalyst_enabled => false ) __apply_Xcode_12_5_M1_post_install_workaround(installer) # react-native-config setup_envfiles(installer) end end ENVFILES = { 'Local' => '$(PODS_ROOT)/../../.env.local.ios', 'Dev' => '$(PODS_ROOT)/../../.env.dev', 'Prod' => '$(PODS_ROOT)/../../.env.prod' } def setup_envfiles(installer) installer.pods_project.targets.each do |target| target.build_configurations.each do |config| if target.name == 'react-native-config' config.build_settings['ENVFILE'] = ENVFILES[config.name] end end end end ```
cipolleschi commented 9 months ago

IIUC, you are building the reproducer with a static framework setup. 🤔 We have tests in CI for the framework setup and they are passing. So I'm a bit skeptical that this is the root problem, but it can be a way in which it manifest.

Can I ask you to create a reproducer by:

  1. cloning the reproducer template
  2. apply the changes the you need to make the error appear (the react_native_assert.h not found one)
  3. commit those changes?

In that way I can download the code and investigate. What I think is happening is another dependency that is not properly configured which is not depending on React-debug which exposes the react_native_assert.h header.

mokoshi commented 9 months ago

Thank you for your help. I'm trying to create a minimum reproducible example from each side, my own repository and the empty project. I will share here if I create that successfully.

cipolleschi commented 9 months ago

Thank you so much! PSA: I'll be on PTO from tomorrow until the 12th of December (6-7 working days). I hope this would not be a major issue.