Файл `React / RCTBridgeModule.h` не знайдено


115

Отримання цієї помилки під час створення реальної програми для iOS на xcode.

введіть тут опис зображення

Початок отримувати цю помилку після встановлення npm та rpm, що пов'язує бібліотеку react-native-fs . Але після пошуку в Інтернеті рішення, я помітив, що багато людей отримують ту саму помилку під час встановлення інших реагуючих рідних бібліотек.

Можливе рішення було запропоновано багатьох є, додавання наступних під «Build Settings" -> "Header Шляхи пошуку».

$(SRCROOT)/../node_modules/react-native/React - (рекурсивна)

Але не пощастило з цим рішенням, все ж отримуючи ту саму помилку


Я отримую цю ж помилку з v0.41.2, вона повинна працювати з <React / RCT ...>, але це не так: /
pgarciacamou

@camou моя відповідь нижче; це може допомогти
Lawrence

@CecilRodriguez Яку версію ви маєте для react-native-fs ?. Якщо ви додаєте вручну за допомогою XCode,
Shubham

Я отримую цю помилку: неможливо вирішити модульreact-native-webrtc
Ankita

Відповіді:


160

У моєму випадку ця конкретна проблема трапилася, коли я намагався архівувати додаток 0,40+, що реагує на реакцію для iOS (тут було знайдено рішення: надійне нарощування ^0.39.2не вдається під час оновлення до^0.40.0 ).

Сталося те, що Xcode намагався паралельно створювати власні бібліотеки, що реагують на реакцію, і будував бібліотеки з неявними реакційними залежностями, перш ніж будувати бібліотеку реагуючих.

У моєму випадку рішення було:

  1. Вимкнути паралельні складання:

    • Меню Xcode -> Продукт -> Схема -> Керування схемами ...
    • Двічі клацніть на вашій програмі
    • Вкладка Build -> зніміть прапорець Parallelize Build
  2. Додати реакцію як залежність від проекту

    • Навігатор проектів Xcode -> перетягніть React.xcodeproj з Бібліотеки до кореневого дерева
    • Вкладка «Фази побудови» -> Цільові залежності -> + -> додати реагувати

1
Я виявив, що це відбувається лише тоді, коли ви модернізуєтесь до 0,40+ знизу. Проект, ініціалізований з 0,40+ RN, вже має паралельні збірки.
agiaLab

20
Що означає "перетягнути до кореневого дерева"? І "Вкладка фаз збірки" ... це фази збірки React.xcodeproj?
GreenAsJade

2
Коли ця помилка з’явиться після створення нової цілі, достатньо кроку 1 :)
Kepedizer

2
Як ви маєте справу з викинутим проектом Expo? У мене ніде немає React.xcodeproj, React знаходиться в залежності від Podfile
Себастьян Лорбер

1
@SebastienLorber відкрити node_modules і перетягнути проект з реакції звідти
Рамон Каналес

35

Переконайтесь, що ви відключили Parallelise Buildта додали Reactціль вище своєї мети

введіть тут опис зображення


Я зрозумів це самостійно після першої відповіді, але рухома реакція вгору зробила трюк! Довелося усвідомити, що це насправді означає для будівельного процесу
njoye

1
Витягував волосся і думав, що я робив неправильно після додавання цілі "Реакт", але переміщення його вгору зробив трюк. @njoye ви могли б пояснити, що це означає у процесі збирання? Дякую!
Євген Кім

@EugeneKim порядок елементів у списках - це спосіб Apple відображати хронологічний порядок (це все ще часто мене запускає, як на OSX, так і на iOS). Таким чином, поставивши ціль "Реагувати" перед "Додаток", він створить код з "Реагувати" перед вашим власним. Оскільки ваш власний код використовує ціль React, це, мабуть, впливає на можливість його побудови. Ймовірно, створюються файли, які потім використовуються у вашій цілі.
njoye

Я хочу використовувати функцію паралельної збірки, щоб скоротити час збирання
utkarsh-devops

25

ШВИДКА ФІК (не найкраща)

Змініть початкові рядки заголовка реакції імпорту:

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

До:

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

Ось приклад змін, які я повинен був внести до бібліотеки, яку я намагався використати: Closes # 46 - файл "RCTBridgeModule.h" не знайдено .


16
Якщо ви уважно читаєте нотатки до випуску, я думаю, що насправді це інший шлях - новий / затверджений спосіб #import <React/RCT...h>? вчинити тут
користувач

1
Я знаю, що це здається зворотним до того, що рекомендують документи, але вказаний формат #import "RCTBridgeModule.h"справді працював краще для мене сьогодні.
лапки

Помилка для мене позначена у файлі RCTFileReaderModule.h. Я змінив заяву #import, як було запропоновано, але це не допомогло. Я бачу у пов'язаному запиті на виклик репо, що зміна була здійснена в RNFSManager.h та RNFSManager.m. Я спробував зробити це в цих двох файлах, але це не допомогло. Будь-яка ідея, що я роблю неправильно?
Йоссі


3

Для глядачів, які отримали цю помилку після оновлення React Native до 0.40+, можливо, вам знадобиться запустити react-native upgradeкомандний рядок.


5
Я зараз це намагаюся. А як із використанням замість реакції-реагування-native-git ?
pgarciacamou

Правильно, це інший варіант. Я думаю, що вони будуть працювати обом.
Лоуренс

3

Якщо Libraries/React.xcodeprojу xcode червоний колір, то перевстановіть node_modules

rm -rf node_modules && yarn

Мій щойно створений проект із реальної реакції 0,46,3 був червоним: у SI є npm 5.3.0 та пряжа 0.24.5, коли я реагував на-init


Дякую, я підштовхував свій проект до github. І коли його знову клонували, мені не вистачало бібліотек React, які показували червоним кольором. ваша команда працює. 👍
Рифініо

2

Останні випуски натільних бібліотек, як це пояснено в попередніх публікаціях, і тут суттєво змінюються сумісність. Якщо ви не плануєте оновлення до реактивної 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.
Андрій Костер

@AndrewKoster У мене є те саме питання
Сесіль Родрігес

@CecilRodriguez Мені вдалося виправити це під час компіляції в Xcode, додавши Cocoapods та додавши React як стручок у Podfile. Однак, як тільки я намагаюся використовувати компільовану бібліотеку в react-native run-ios, я отримую помилки компіляції, які не трапляються в Xcode. Повна відсутність відповідної документації засмучує.
Андрій Костер

1
@Yossi Ні, ще не. Усі спроби, які я намагався, не спрацювали.
Сесіль Родрігес

1
@Yossi Ні, я спробував ваше. Нещастить. Це має щось спільне з моїм рідним модулем, я думаю
Сесіль Родрігес,

2

Після React Native 0.60 ця проблема часто викликається пов'язаною бібліотекою, змішаною з новою функцією "автоматичного зв’язку". Це виправляє це для мене

Від’єднайте стару бібліотеку за допомогою

$ react-native unlink react-native-fs

Оновіть інтеграцію Pods повністю, використовуючи

$ 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) ) у програму та встановив стручки за допомогою встановлення pod.

Ця проблема виникає через те, що стручки поділяються не на всі цілі. Тому мені потрібно додати щойно додану ціль ( 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

Я отримую цю помилку в будь-якому новому модулі, який я створюю за допомогою create-react-native-module . Жодне з розміщених рішень не працювало для мене.

Що для мене працювало, спершу переконайтеся, що запустити yarnв новоствореній папці модулів, щоб створити node_modules/(цей крок, мабуть, очевидний). Потім у XCode виберіть Продукт -> Схема -> Реагуйте замість вибору за замовчуванням MyModuleName.


+1, важливо додати іншим новим у розробці модулів те, що ви не побачите інших схем, поки не створите дійсний підфайл та не запустіть pod install. Створюється-реагувати-native-модуль, здається, не робить це для вас. Мене повісили на деякий час. Але це працювало для мене, як тільки я створив дійсний підфіл і запустив інсталяцію.
Елліот Родрігес

1

Перейдіть до папки iOS у своєму проекті та встановіть pod -

$ 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. Ніщо з того, що я знайшов в Інтернеті, не допомогло мені, але мені вдалося змусити його працювати:

Перейдіть до налаштування налаштувань, знайдіть «Шляхи пошуку в заголовку», виберіть запис, натисніть кнопку «ВИДАЛИТИ».

Ці значення я переосмислив, і схоже, що вони повернулися до дефолтів після видалення. Також Cocoapods скаржився на це повідомленнями в Терміналі після 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 у папці Бібліотеки в Xcode, а потім у Налаштуваннях збірки, змінити Шляхи пошуку заголовків, щоб додати ці два (рекурсивні):

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

0

Якщо ви хочете увімкнути паралельну збірку і уникнути відсутніх проблем із заголовком, то передбачте крок попередньої збірки у вашій схемі, щоб помістити заголовки реакцій у область похідних даних. Зверніть увагу, що в цьому випадку налаштування збірки надходять від проекту React. Так, це не є красивою справою, але вона виконує роботу, а також голить багато часу на складі. Вихідний крок попереднього збирання закінчується в prebuild.log. Точні заголовки, які вам потрібно буде скопіювати, залежатимуть від залежних від вашого проекту реакцій, але ви отримаєте суть від цього.

Редагувати схему => Побудувати

Отримайте похідний каталог даних зі змінних оточення та скопіюйте потрібні заголовки реакцій.

#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/" \;

Сценарій дійсно застосовується під час очищення збірки - що не ідеально. У моєму випадку є одна змінна env, яка змінюється, дозволяючи мені вийти зі сценарію рано під час чистого.

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

0

Вам просто потрібно встановити pod, якщо файл pod існує просто введіть

pod install

якщо ні: так спочатку,

pod init

тоді,

pod install

в терміналі. і вам добре піти.


-1

Що ви можете зробити, щоб правильно це:

1) npm uninstall reat-native-fsвидалити бібліотеку

2) npm unlink react-native-fsвід’єднати бібліотеку

Тепер бібліотеку успішно видалено, і тепер знову встановіть ліб у проекті, і цього разу зв’яжіть все вручну. Інколи автоматичне зв’язування викликає цю помилку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.