【问题标题】:React Native build failed: 'React/RCTBridge.h' file not foundReact Native 构建失败:找不到“React/RCTBridge.h”文件
【发布时间】:2018-10-31 09:46:51
【问题描述】:

我正在尝试使用以下文件结构构建 React Native 应用程序:

Kurts-MacBook-Pro-2:lucy-app kurtpeek$ tree -L 1
.
├── README.md
├── __tests__
├── android
├── app.json
├── assets
├── index.js
├── ios
├── node_modules
├── package.json
├── src
└── yarn.lock

package.json

{
    "name": "app",
    "version": "0.0.1",
    "private": true,
    "scripts": {
        "android": "concurrently 'emulator @Nexus_5X_API_27_x86' 'yarn android-noavd'",
        "android-noavd": "react-native run-android",
        "android-px": "concurrently 'emulator @Pixel_2_API_27' 'yarn android-noavd'",
        "android:release": "cross-env ENVFILE=.env.release yarn run android",
        "android:staging": "cross-env ENVFILE=.env.staging yarn run android",
        "build:android:dev": "cross-env ENVFILE=.env ./android/gradlew assembleRelease -p ./android/",
        "build:android:release": "cross-env ENVFILE=.env.release ./android/gradlew assembleRelease -p ./android/",
        "build:android:staging": "cross-env ENVFILE=.env.staging ./android/gradlew assembleRelease -p ./android/",
        "clean": "concurrently 'rimraf ./android/build/' 'rimraf ./ios/build/' 'rimraf node_modules/' 'yarn cache clean'",
        "codepush": "yarn codepush:ios; yarn codepush:android",
        "codepush:android": "code-push release-react Lucy-Eng/LucyApp-Android android",
        "codepush:ios": "code-push release-react Lucy-Eng/LucyApp-iOS ios --plistFile ios/LucyApp/Info.plist",
        "codepush:ls:apps": "code-push app ls",
        "codepush:ls:deploys": "echo iOS && code-push deployment ls Lucy-Eng/LucyApp-iOS; echo ANDROID && code-push deployment ls Lucy-Eng/LucyApp-Android",
        "codepush:promote:android": "code-push promote Lucy-Eng/LucyApp-Android Staging Production",
        "codepush:promote:ios": "code-push promote Lucy-Eng/LucyApp-iOS Staging Production",
        "ios": "react-native run-ios --simulator='iPhone 7'",
        "ios8": "react-native run-ios --simulator='iPhone 8'",
        "ios:release": "cross-env ENVFILE=.env.release yarn run ios",
        "ios:staging": "cross-env ENVFILE=.env.staging yarn run ios",
        "iosx": "react-native run-ios --simulator='iPhone X'",
        "lint": "eslint .",
        "log:android": "react-native log-android",
        "log:ios": "react-native log-ios",
        "react-devtools": "react-devtools",
        "start": "./node_modules/react-native/local-cli/cli.js start",
        "test": "jest"
    },
    "dependencies": {
        "analytics-react-native": "^1.2.0",
        "immutability-helper": "^2.5.0",
        "libphonenumber-js": "^1.1.10",
        "lodash": "^4.17.4",
        "moment": "^2.19.0",
        "moment-timezone": "^0.5.14",
        "prop-types": "^15.6.0",
        "querystring": "^0.2.0",
        "raven-for-redux": "^1.3.0",
        "react": "^16.2.0",
        "react-native": "^0.53.3",
        "react-native-android-keyboard-adjust": "^1.1.1",
        "react-native-code-push": "^5.3.2",
        "react-native-config": "^0.11.5",
        "react-native-country-picker-modal": "^0.5.1",
        "react-native-datepicker": "^1.6.0",
        "react-native-intercom": "^8.0.0",
        "react-native-keyboard-aware-scroll-view": "^0.4.4",
        "react-native-markdown-renderer": "^3.1.0",
        "react-native-material-kit": "git://github.com/xinthink/react-native-material-kit#95b0980",
        "react-native-material-menu": "^0.2.3",
        "react-native-modal": "^4.1.1",
        "react-native-onesignal": "^3.0.6",
        "react-native-phone-input": "^0.2.1",
        "react-native-router-flux": "4.0.0-beta.27",
        "react-native-sentry": "^0.35.3",
        "react-native-smart-splash-screen": "^2.3.5",
        "react-native-snackbar": "^0.4.3",
        "react-native-swiper": "^1.5.13",
        "react-native-vector-icons": "^4.4.0",
        "react-navigation": "^1.5.11",
        "react-redux": "^5.0.6",
        "redux": "^3.7.2",
        "redux-devtools-extension": "^2.13.2",
        "redux-form": "^7.3.0",
        "redux-logger": "^3.0.6",
        "redux-persist": "^4.10.1",
        "redux-thunk": "^2.2.0",
        "reselect": "^3.0.1",
        "validator": "^10.2.0"
    },
    "devDependencies": {
        "babel-core": "^6.26.3",
        "babel-eslint": "^8.0.1",
        "babel-jest": "21.2.0",
        "babel-preset-react-native": "4.0.0",
        "code-push-cli": "^2.1.6",
        "concurrently": "^3.5.1",
        "cross-env": "^5.1.4",
        "enzyme": "^3.1.1",
        "enzyme-adapter-react-16": "^1.0.4",
        "eslint": "^4.8.0",
        "eslint-config-airbnb": "^15.1.0",
        "eslint-import-resolver-reactnative": "^1.0.2",
        "eslint-plugin-import": "^2.7.0",
        "eslint-plugin-jsx-a11y": "^5.1.1",
        "eslint-plugin-react": "^7.4.0",
        "eslint-plugin-react-native": "^3.1.0",
        "jest": "21.2.1",
        "react-devtools": "^3.1.0",
        "react-dom": "^16.0.0",
        "react-test-renderer": "16.0.0-beta.5",
        "rimraf": "^2.6.2"
    },
    "jest": {
        "preset": "react-native",
        "setupTestFrameworkScriptFile": "<rootDir>src/test-config/enzyme-config.js"
    },
    "rnpm": {
        "assets": [
            "./assets/fonts/"
        ]
    }
}

还有一个ios/Podfile 像这样:

target 'LucyApp' do
  pod 'React', :path => '../node_modules/react-native', :subspecs => [
    'Core',
    'BatchedBridge',
    'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # needed for debugging
    # 'RCTBridge',
    # Add any other subspecs you want to use in your project
  ]
  # Explicitly include Yoga if you are using RN >= 0.42.0
  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

  # Third party deps podspec link
  pod 'Intercom'
  pod 'CodePush', :path => '../node_modules/react-native-code-push'
  pod 'SentryReactNative', :path => '../node_modules/react-native-sentry'

  # Add new pods below this line

end

当我尝试在 Xcode 中构建这个应用程序时,我收到来自 SentryReactNative 的导入错误:

同样,当我尝试使用yarn ios 运行模拟器时,我收到以下错误:

In file included from /Users/kurtpeek/Documents/Dev/lucy/lucy-app/node_modules/react-native-sentry/ios/RNSentry.m:1:
In file included from /Users/kurtpeek/Documents/Dev/lucy/lucy-app/node_modules/react-native-sentry/ios/RNSentry.h:4:
/Users/kurtpeek/Documents/Dev/lucy/lucy-app/node_modules/react-native/React/Base/RCTBridge.h:12:9: fatal error: 'React/RCTBridgeDelegate.h' file not found
#import <React/RCTBridgeDelegate.h>
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~



** BUILD FAILED **


The following commands produced analyzer issues:

    Analyze Base/RCTModuleMethod.mm normal x86_64
(1 command with analyzer issues)

The following build commands failed:
    CompileC /Users/kurtpeek/Documents/Dev/lucy/lucy-app/ios/build/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/SentryReactNative.build/Objects-normal/x86_64/RNSentryEventEmitter.o /Users/kurtpeek/Documents/Dev/lucy/lucy-app/node_modules/react-native-sentry/ios/RNSentryEventEmitter.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

Installing build/Build/Products/Debug-iphonesimulator/LucyApp.app
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=2):
Failed to install the requested application
An application bundle was not found at the provided path.
Provide a valid path to the desired application bundle.
Print: Entry, ":CFBundleIdentifier", Does Not Exist

Command failed: /usr/libexec/PlistBuddy -c Print:CFBundleIdentifier build/Build/Products/Debug-iphonesimulator/LucyApp.app/Info.plist
Print: Entry, ":CFBundleIdentifier", Does Not Exist


error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

https://facebook.github.io/react-native/docs/integration-with-existing-apps.html#configuring-cocoapods-dependencies之后,我一开始以为我可能需要将'RCTBridge'添加到'React'subspecs中,这就是Podfile中注释掉的行的原因。但是,如果我取消注释该行并尝试 pod install,我会收到“CocoaPods 找不到兼容版本”错误:

如何更新导入以构建应用程序?

【问题讨论】:

  • 我不得不说我尝试了上述所有解决方案,但只有这有助于我在 IOS 文件夹的命令行中“pod install”

标签: ios objective-c reactjs react-native


【解决方案1】:

https://github.com/react-native-cameraroll/react-native-cameraroll/issues/142#issuecomment-587551072

正如上面的帖子所暗示的那样。

如果您的应用正在使用 pod,则正确链接 @react-native-community/cameraroll。

而不是添加 libRNCCameraroll.a 将 libreact-native-cameraroll.a 添加到构建阶段 -> 将二进制文件与库链接

【讨论】:

    【解决方案2】:

    对我来说,通过在Podfile 中添加所有这些依赖项来解决正在发生的问题:

      pod 'React', :path => '../node_modules/react-native/'
      pod 'React-Core', :path => '../node_modules/react-native/'
      pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
      pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
      pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
      pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
      pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
      pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
      pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
      pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
      pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
      pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
      pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
      pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'
    

    添加依赖并运行此命令后:

    1. cd ios
    2. rm -rf Pods
    3. pod deintegrate
    4. pod install

    希望这也能解决某人的问题。

    【讨论】:

      【解决方案3】:

      按照以下步骤操作。它对我有用。

      1. 打开terminal
      2. 转到ios 文件夹
      3. 退出Xcode
      4. 运行pod install
      5. 打开.xcworkspace文件。
      6. 清理 (cmd+shift+k) 并构建 (cmd+b) 项目。

      就是这样。快乐编码:)

      【讨论】:

        【解决方案4】:

        为我工作,没有 hack(仅在您不使用 Swift 时建议):

        1. 文件 > 项目设置
        2. 在构建系统上选择 > Legacy Build System (Both)
        3. 在同一窗口中,打开并清理您的 DerivedData 目录
        4. 清洁您的内置产品 > 清洁 保存所有并重新启动 Xcode。快乐编码!

        【讨论】:

        • 清理派生数据?
        【解决方案5】:

        试试这个 -

        • 在 Xcode 中,转到项目方案(产品 -> 方案 -> 管理方案 -> 双击您的项目)。
        • 单击左侧窗格中的“构建”选项。
        • 取消选中 Build Options 下的“Parallelize Build”。
        • 然后在 Targets 部分,单击“+”按钮,然后搜索“React”。 选择它并点击“添加”。
        • 'React' 现在应该出现在 Targets 部分下。单击并将其拖动到 顶部,使其成为列表中的第一项(在您的项目之前)。
        • 清理项目并构建。

        有关更多选项,请查看 RN repo 上的问题 - https://github.com/facebook/react-native/issues/12042

        【讨论】:

        • 我试过了,但卡在了“目标”步骤——那里没有“反应”条目。
        • 完成了这些步骤,但得到了同样的错误。请帮忙。
        • 我已经尝试重新安装 node_modules 和其他一些解决方案来解决这个问题。但这里没有运气。请帮帮我@thomasbabuj
        • 尝试升级你的cocoa-pods版本,可能会解决。
        • @akshay,我尝试添加 React,但它不起作用,你确定你不是指 React-Core
        猜你喜欢
        • 1970-01-01
        • 2018-01-07
        • 1970-01-01
        • 1970-01-01
        • 2016-10-27
        • 2018-09-18
        • 2020-03-06
        • 2018-03-08
        • 2019-03-21
        相关资源
        最近更新 更多