ไม่พบไฟล์ "React / RCTBridgeModule.h`


115

รับข้อผิดพลาดนี้ขณะสร้างแอป iOS ที่ตอบสนองบน xcode

ใส่คำอธิบายภาพที่นี่

เริ่มรับข้อผิดพลาดนี้หลังจากการติดตั้ง npm และ rpm เชื่อมโยงไลบรารีreact-native-fs แต่หลังจากค้นหาวิธีแก้ปัญหาทางออนไลน์ฉันสังเกตเห็นว่ามีคนจำนวนมากได้รับข้อผิดพลาดเดียวกันในขณะที่ติดตั้งไลบรารีดั้งเดิมที่ตอบสนองอื่น ๆ

วิธีการแก้ปัญหาที่เป็นไปได้แนะนำโดยหลายคนมีการเพิ่มความต่อไปนี้ "การตั้งค่ารูปร่าง" -> "หัวค้นหาเส้นทาง"

$(SRCROOT)/../node_modules/react-native/React - (เรียกซ้ำ)

แต่ไม่มีโชคกับการแก้ปัญหานี้ยังคงได้รับข้อผิดพลาดเดียวกัน


ฉันได้รับข้อผิดพลาดเดียวกันนี้กับ v0.41.2 ควรใช้กับ <React / RCT ... > แต่ไม่: /
pgarciacamou

@camou ดูคำตอบของฉันด้านล่าง; มันอาจช่วยได้
lawrence

@CecilRodriguez คุณมีรุ่นอะไรสำหรับ react-native-fs? หากคุณเพิ่มด้วย XCode ด้วยตนเองโปรดตรวจสอบgithub.com/itinance/react-native-fs#adding-manually-in-xcode
Shubham Khatri

ฉันได้รับข้อผิดพลาดนี้: ไม่สามารถแก้ไขโมดูลreact-native-webrtc
Ankita

คำตอบ:


161

ในกรณีของฉันปัญหานี้เกิดขึ้นเมื่อฉันพยายามเก็บถาวรแอปตอบกลับ 0.40+ สำหรับ iOS (พบโซลูชันที่นี่: การสร้างที่เชื่อถือได้^0.39.2ล้มเหลวเมื่ออัปเกรดเป็น^0.40.0 )

สิ่งที่เกิดขึ้นคือXcodeพยายามสร้างไลบรารีแบบตอบสนองแบบขนานและกำลังสร้างไลบรารีที่มีการพึ่งพาปฏิกิริยาโดยนัยก่อนที่จะสร้างไลบรารีปฏิกิริยาจริง

วิธีแก้ปัญหาในกรณีของฉันคือ:

  1. ปิดใช้งานการสร้างแบบขนาน:

    • เมนู Xcode -> ผลิตภัณฑ์ -> Scheme -> จัดการ Shemes ...
    • ดับเบิลคลิกที่แอปพลิเคชันของคุณ
    • แท็บ Build -> ยกเลิกการเลือก Parallelize Build
  2. เพิ่มการตอบสนองเป็นการพึ่งพาโครงการ

    • Xcode Project Navigator -> ลาก React.xcodeproj จากไลบรารีไปยังทรีราก
    • แท็บสร้างเฟส -> การอ้างอิงเป้าหมาย -> + -> เพิ่มการตอบสนอง

1
ฉันได้ค้นพบว่าสิ่งนี้จะเกิดขึ้นเมื่อคุณอัปเกรดเป็น react-native 0.40+ จากด้านล่างเท่านั้น โปรเจ็กต์ที่เริ่มต้นด้วย 0.40+ RN ได้ปิดการสร้างแบบขนานแล้ว
agiaLab

20
"ลากถึงรากต้นไม้" หมายความว่าอย่างไร และ "แท็บขั้นตอนการสร้าง" ... นี่คือขั้นตอนการสร้างของ React.xcodeproj หรือไม่
GreenAsJade

2
เมื่อจุดบกพร่องนี้ปรากฏขึ้นหลังจากสร้างเป้าหมายใหม่ขั้นตอนที่ 1 ก็เพียงพอแล้ว :)
Kepedizer

2
คุณจะจัดการกับโครงการที่ถูกออกจากงาน Expo ได้อย่างไร? ฉันไม่มี React.xcodeproj ที่ไหนเลย React อยู่ในการพึ่งพา Podfile
Sebastien Lorber

1
@SebastienLorber เปิด node_modules และลากโครงการตอบสนองจากที่นั่น
Ramon Canales

35

ตรวจสอบให้แน่ใจว่าคุณปิดใช้งานParallelise Buildและเพิ่มReactเป้าหมายเหนือเป้าหมายของคุณ

ใส่คำอธิบายภาพที่นี่


ฉันคิดออกด้วยตัวเองหลังจากคำตอบแรก แต่การเคลื่อนไหวตอบสนองนั้นเป็นเคล็ดลับ! ต้องตระหนักถึงความหมายที่แท้จริงสำหรับกระบวนการสร้าง
njoye

1
กำลังดึงผมของฉันออกและคิดว่าฉันทำอะไรผิดหลังจากเพิ่มเป้าหมายการตอบสนอง แต่การเลื่อนขึ้นก็เป็นเคล็ดลับ @njoye คุณช่วยอธิบายได้ไหมว่านี่หมายถึงอะไรในกระบวนการสร้าง ขอบคุณ!
Eugene Kim

@EugeneKim ลำดับขององค์ประกอบในรายการเป็นวิธีของ Apple ในการแสดงลำดับเวลา (สิ่งนี้ยังคงทำให้ฉันรู้สึกบ่อยครั้งบน OSX และ iOS) ดังนั้นการวางเป้าหมาย "React" ก่อน "App" จะสร้างโค้ดจาก "React" ก่อนของคุณเอง เนื่องจากโค้ดของคุณใช้ React target จึงดูเหมือนว่าจะส่งผลต่อหากสามารถสร้างได้ อาจมีไฟล์ที่สร้างขึ้นเพื่อใช้ในเป้าหมายของคุณ
njoye

ฉันต้องการใช้คุณสมบัติการสร้างแบบขนานเพื่อลดเวลาในการสร้าง
utkarsh-devops

25

แก้ไขด่วน (ไม่ใช่สิ่งที่ดีที่สุด)

เปลี่ยนบรรทัดส่วนหัวของการตอบสนองดั้งเดิมที่นำเข้า:

 #import <React/RCTBridgeModule.h>
 #import <React/RCTLog.h>

ถึง:

 #import "RCTBridgeModule.h"
 #import "RCTLog.h"

นี่คือตัวอย่างของการเปลี่ยนแปลงที่ฉันได้เพื่อให้ห้องสมุดที่ผมพยายามใช้: ปิด # 46 - ไม่พบแฟ้ม


16
หากคุณอ่านบันทึกประจำรุ่นอย่างละเอียดฉันคิดว่าเป็นวิธีอื่น - วิธีใหม่ / ได้รับการอนุมัติคือ#import <React/RCT...h>? กระทำที่นี่
ผู้ใช้

1
ฉันรู้ว่าดูเหมือนว่าจะย้อนกลับไปในสิ่งที่เอกสารแนะนำ แต่รูปแบบที่ระบุ#import "RCTBridgeModule.h"ทำงานได้ดีขึ้นสำหรับฉันในวันนี้
paws

ข้อผิดพลาดสำหรับฉันถูกตั้งค่าสถานะในไฟล์ RCTFileReaderModule.h ฉันเปลี่ยนคำสั่ง #import ตามที่แนะนำ แต่ไม่ได้ผล ฉันเห็นในคำขอดึง repo ที่เชื่อมโยงว่าการเปลี่ยนแปลงเสร็จสิ้นใน RNFSManager.h และ RNFSManager.m ฉันพยายามสร้างมันในสองไฟล์นี้ แต่ก็ไม่ได้ผลเช่นกัน มีความคิดว่าฉันทำอะไรผิดหรือเปล่า?
Yossi

12

เปลี่ยนแปลง

  #import "RCTBridgeModule.h"

ถึง

 #import "React/RCTBridgeModule.h"

1
ขอบคุณมาก!! ฉันใช้เวลาหลายชั่วโมงในการค้นหาวิธีแก้ปัญหา แต่วิธีนี้เป็นผู้ช่วยให้รอด ขอบคุณ!
Abhirup Mukherjee

3

สำหรับผู้ชมที่ได้รับข้อผิดพลาดนี้หลังจากอัปเกรด React Native เป็น 0.40+ คุณอาจต้องเรียกใช้react-native upgradeในบรรทัดคำสั่ง


5
ฉันกำลังพยายามอยู่ตอนนี้ แล้วการใช้react-native-git-upgradeแทนล่ะ?
pgarciacamou

ใช่นั่นคือตัวเลือกอื่น ๆ ฉันคิดว่าพวกเขาทั้งสองจะได้ผล
lawrence

3

หากLibraries/React.xcodeprojเป็นสีแดงใน xcode ให้ติดตั้ง node_modules ใหม่

rm -rf node_modules && yarn

โครงการที่สร้างขึ้นใหม่ของฉันจาก react-native 0.46.3 เป็นสีแดง: SI มี npm 5.3.0 และเส้นด้าย 0.24.5 เมื่อฉันทำ react-native init


ขอบคุณฉันกำลังผลักดันโครงการของฉันไปยัง github และเมื่อทำการโคลนอีกครั้งฉันไม่มีไลบรารี React ที่แสดงเป็นสีแดง คำสั่งของคุณใช้งานได้ 👍
Rifinio

2

เวอร์ชันล่าสุดของไลบรารีแบบตอบสนองตามที่อธิบายไว้ในโพสต์ก่อนหน้านี้และที่นี่มีการเปลี่ยนแปลงความเข้ากันได้ หากคุณไม่ได้วางแผนที่จะอัปเกรดเป็น react-native 0.40+ แต่คุณสามารถบังคับติดตั้งไลบรารีเวอร์ชันก่อนหน้าได้ตัวอย่างเช่น react-native-fs:

npm install --save -E react-native-fs@1.5.1

2

ฉันสามารถสร้างดีบักได้ แต่ไม่สามารถสร้างที่เก็บถาวรได้

ฉันแก้ไขปัญหานี้โดยการลากที่React.xcodeprojพบใน / node_modules / react-native / React ไปยังไดเรกทอรีรากของฉันใน Xcode จากนั้นเพิ่ม React เป็นการอ้างอิงเป้าหมายในขั้นตอนการสร้าง> การอ้างอิงเป้าหมาย


ไม่มีReact.xcodeprojใน/node_modules/react-native/React.
Andrew Koster

@AndrewKoster ฉันกำลังประสบปัญหาเดียวกัน
Cecil Rodriguez

@CecilRodriguez ฉันได้จัดการเพื่อแก้ไขปัญหานี้เมื่อรวบรวมใน Xcode โดยเพิ่ม Cocoapods และเพิ่ม React เป็นพ็อดใน Podfile อย่างไรก็ตามเมื่อฉันพยายามใช้ไลบรารีที่คอมไพล์react-native run-iosแล้วฉันได้รับข้อผิดพลาดในการคอมไพล์ที่ไม่เกิดขึ้นใน Xcode การขาดเอกสารที่เกี่ยวข้องอย่างครบถ้วนทำให้น่าหงุดหงิด
Andrew Koster

1
@ ยอสซี่ยังไม่มีค่ะ ความพยายามทั้งหมดที่ฉันพยายามไม่ได้ผล
Cecil Rodriguez

1
@Yossi ไม่ฉันพยายามของคุณ ไม่มีโชค. ฉันคิดว่ามันมีส่วนเกี่ยวข้องกับโมดูลดั้งเดิมของฉัน
Cecil Rodriguez

2

หลังจาก React Native 0.60 ปัญหานี้มักเกิดจากไลบรารีที่เชื่อมโยงผสมกับคุณลักษณะ "การเชื่อมโยงอัตโนมัติ" ใหม่ สิ่งนี้แก้ไขให้ฉัน

ยกเลิกการลิงก์ห้องสมุดเก่าโดยใช้

$ react-native unlink react-native-fs

รีเฟรชการรวมพ็อดทั้งหมดโดยใช้

$ pod deintegrate && pod install

ตอนนี้โหลดพื้นที่ทำงานของคุณใหม่และสร้างใหม่ทั้งหมด


1

ข้อผิดพลาดนี้ปรากฏสำหรับฉันหลังจากที่ฉันรันpod installคำสั่งสำหรับการอ้างอิงใหม่ นอกจากนี้ยังมีการติดตั้ง React ดังนั้นจึงอาจทำให้ Xcode สับสนสำหรับเส้นทาง ฉันลบบรรทัดเหล่านี้ออกจาก PodFile และข้อผิดพลาดหายไป โปรดทราบว่าสิ่งที่ถูกลบออกจากที่นี่ถูกเชื่อมโยงใน Xcode แล้ว

target 'app' do

  pod 'GoogleMaps'
  pod 'Firebase/Auth', '~> 6.3.0'
  pod 'Firebase/Database', '~> 6.3.0'

  # Removed four pods below and it worked.

  pod 'react-native-image-picker', :path => '../node_modules/react-native-image-picker'

  pod 'ReactNativePermissions', :path => '../node_modules/react-native-permissions'

  pod 'react-native-image-resizer', :path => '../node_modules/react-native-image-resizer'

  pod 'RNFS', :path => '../node_modules/react-native-fs'

  end

1

สำหรับฉันข้อผิดพลาดนี้เกิดขึ้นเมื่อฉันเพิ่มรูปแบบ / เป้าหมายใหม่ ( app.staging ) ในแอปและติดตั้งพ็อดโดยใช้การติดตั้งพ็อด

ปัญหานี้เกิดขึ้นเนื่องจากไม่มีการแชร์พ็อดสำหรับเป้าหมายทั้งหมด ดังนั้นผมจึงจำเป็นต้องเพิ่มใหม่เพิ่มเป้าหมาย ( app.staging ) ภายในPodfile

นี่คือ Podfile ของฉัน

platform :ios, '9.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

target 'app' do
  # Pods for app
  pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
  pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"

  target 'appTests' do
    inherit! :search_paths
    # Pods for testing
  end

  # Pods for staging app // important line below
  target 'app.staging'

  use_native_modules!
end

1

ผมได้รับข้อผิดพลาดในโมดูลใหม่ ๆ ที่ฉันสร้างขึ้นด้วยการสร้างปฏิกิริยาพื้นเมืองโมดูล ไม่มีวิธีแก้ปัญหาที่โพสต์ไว้สำหรับฉัน

สิ่งที่ได้ผลสำหรับฉันก่อนอื่นต้องแน่ใจว่าได้เรียกใช้yarnในโฟลเดอร์โมดูลที่สร้างขึ้นใหม่เพื่อสร้างnode_modules/(ขั้นตอนนี้อาจชัดเจน) จากนั้นใน XCode ให้เลือก Product -> Scheme -> React แทนการเลือก MyModuleName เริ่มต้น


+1 มันเป็นสิ่งสำคัญที่จะเพิ่มสำหรับคนอื่น ๆ ใหม่เพื่อพัฒนาโมดูลที่คุณจะไม่เห็นรูปแบบอื่น ๆ จนกว่าคุณสร้าง podfile pod installที่ถูกต้องและการทำงาน create-react-native-module ดูเหมือนจะไม่ทำสิ่งนี้ให้คุณ ทำให้ฉันวางสายไปชั่วขณะ แต่สิ่งนี้ใช้ได้ผลสำหรับฉันเมื่อฉันสร้าง podfile ที่ถูกต้องและรันการติดตั้ง
Elliot Rodriguez

1

ไปที่โฟลเดอร์ iOS ในโครงการของคุณและติดตั้งพ็อด -

$ pod install

หากคุณได้รับข้อผิดพลาดใด ๆ ในการติดตั้งคำสั่งประเภทพ็อด -

$ xcode-select -p

ผลลัพธ์ควรเป็น - /Applications/Xcode.app/Contents/Developer

หากเส้นทางไม่ถูกต้องให้เปิดโครงการ iOS ของคุณใน Xcode แล้วไปที่: Xcode-> การตั้งค่า -> เครื่องมือบรรทัดคำสั่ง -> เลือก Xcode

และติดตั้งพ็อดอีกครั้งปัญหาของคุณจะได้รับการแก้ไข



0

หากคุณต้องการสร้างจากตัวแก้ไขของคุณให้เปิดSMobile.xcscheme

และเปลี่ยน parallelizeBuildables = "NO"


0

สำหรับฉันไม่ได้ผลใด ๆ จากวิธีแก้ปัญหาข้างต้นและด้านล่างคือสิ่งที่ได้ผล (ฉันได้ตรวจสอบParallelize Buildและเพิ่มแล้วReact)

1. Open XCode --> To Libraries add `$LibraryWhichDoesNotWork.xcodeproj$`
2. Then for your app in the `Build Phases` add to the `Link Binary with Libraries` the file `lib$LibraryWhichDoesNotWork$.a`

0

ฉันพบปัญหานี้ขณะอัปเกรดจาก 0.58.4 เป็นเวอร์ชันตอบกลับเนทีฟใหม่ 0.60.4 ไม่มีสิ่งใดจากสิ่งที่ฉันพบบนอินเทอร์เน็ตช่วยฉันได้ แต่ฉันพยายามทำให้มันใช้งานได้:

ไปที่การตั้งค่าการสร้างค้นหา "เส้นทางการค้นหาส่วนหัว" เลือกรายการแล้วกดปุ่ม DELETE

ฉันมีการลบล้างค่าเหล่านี้และดูเหมือนว่าค่าเหล่านี้จะกลับสู่ค่าเริ่มต้นหลังจากการลบ นอกจากนี้ Cocoapods ยังบ่นเกี่ยวกับเรื่องนี้ด้วยข้อความใน Terminal หลังจากpod install:

[!] The `app [Release]` target overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Target Support Files/Pods-app/Pods-app.release.xcconfig'. This can lead to problems with the CocoaPods installation

0

ฉันพบปัญหานี้หลังจากทำคู่มือreact-native linkการพึ่งพาซึ่งไม่รองรับลิงก์อัตโนมัติบน RN 0.59+

วิธีแก้ปัญหาคือเลือกไฟล์ xcodeproj ภายใต้โฟลเดอร์ Libraries ใน Xcode จากนั้นใน Build Settings เปลี่ยน Header Search Paths เพื่อเพิ่มสองสิ่งนี้ (เรียกซ้ำ):

$(SRCROOT)/../../../ios/Pods/Headers/Public/React-Core
$(SRCROOT)/../../../ios/Pods/Headers/Public

0

หากคุณต้องการเปิดใช้งาน Parallelise Build และหลีกเลี่ยงปัญหาส่วนหัวที่ขาดหายไปให้ระบุขั้นตอนก่อนสร้างในโครงร่างของคุณเพื่อใส่ส่วนหัวของปฏิกิริยาลงในพื้นที่ข้อมูลที่ได้รับ สังเกตว่าการตั้งค่าการสร้างมาจากโครงการ React ในกรณีนี้ ใช่มันไม่ใช่เรื่องสวยงาม แต่ทำให้งานเสร็จและยังช่วยลดเวลาในการสร้าง เอาต์พุตขั้นตอน prebuild จะสิ้นสุดใน prebuild.log ส่วนหัวที่แน่นอนที่คุณจะต้องคัดลอกจะขึ้นอยู่กับการพึ่งพาการตอบสนองของโครงการของคุณ แต่คุณจะได้รับความช่วยเหลือจากสิ่งนี้

แก้ไข Scheme => สร้าง

รับไดเร็กทอรีข้อมูลที่ได้รับจากตัวแปรสภาพแวดล้อมและคัดลอกส่วนหัวของปฏิกิริยาที่ต้องการ

#build_prestep.sh (chmod a+x)
derived_root=$(echo $SHARED_DERIVED_FILE_DIR|sed 's/DerivedSources//1')
react_base_headers=$(echo $PROJECT_FILE_PATH|sed 's#React.xcodeproj#Base/#1')
react_view_headers=$(echo $PROJECT_FILE_PATH|sed 's#React.xcodeproj#Views/#1')
react_modules_head=$(echo $PROJECT_FILE_PATH|sed 's#React.xcodeproj#Modules/#1')
react_netw_headers=$(echo $PROJECT_FILE_PATH|sed 's#React/React.xcodeproj#Libraries/Network/#1')
react_image_header=$(echo $PROJECT_FILE_PATH|sed 's#React/React.xcodeproj#Libraries/Image/#1')

echo derived root = ${derived_root}
echo react headers = ${react_base_headers}

mkdir -p ${derived_root}include/React/

find  "${react_base_headers}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_view_headers}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_modules_head}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_netw_headers}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_image_header}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;

สคริปต์จะถูกเรียกใช้ระหว่าง build-clean ซึ่งไม่เหมาะ ในกรณีของฉันมีตัวแปร env หนึ่งตัวซึ่งการเปลี่ยนแปลงทำให้ฉันออกจากสคริปต์ก่อนเวลาระหว่างการล้าง

if [ "$RUN_CLANG_STATIC_ANALYZER" != "NO" ] ; then
    exit 0 
fi

0

คุณเพียงแค่ต้องติดตั้งพ็อดหากมีไฟล์พ็อดเพียงแค่พิมพ์

pod install

ถ้าไม่: ก่อนอื่น

pod init

แล้ว

pod install

ในเทอร์มินัล และคุณพร้อมที่จะไป


-1

สิ่งที่คุณทำได้เพื่อให้ถูกต้องคือ:

1) npm uninstall reat-native-fsเพื่อถอนการติดตั้งไลบรารี

2) npm unlink react-native-fsเพื่อยกเลิกการเชื่อมโยงไลบรารี

ตอนนี้ไลบรารีถูกลบออกเรียบร้อยแล้วและตอนนี้ติดตั้ง lib อีกครั้งในโปรเจ็กต์ของคุณและคราวนี้เชื่อมโยงทุกอย่างด้วยตนเอง บางครั้งการเชื่อมโยงอัตโนมัติทำให้เกิดข้อผิดพลาดนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.