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

115

Получение этой ошибки при создании приложения iOS для реагирования на xcode.

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

Начала получать эту ошибку после установки npm и связывания rpm библиотеки react-native-fs . Но после поиска решения в Интернете я заметил, что многие люди получают ту же ошибку при установке других собственных библиотек React.

Возможное решение было предложено многих является, добавление следующих под «Build Settings» -> «Header Пути поиска».

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

Но не повезло с этим решением, по-прежнему возникает та же ошибка

Simar
источник
Я получаю ту же ошибку с v0.41.2, она должна работать с <React / RCT ...>, но не работает: /
pgarciacamou
@camou см. мой ответ ниже; это может помочь
Lawrence
@CecilRodriguez Какая у вас версия для react-native-fs ?. Если вы добавляете вручную с помощью XCode, проверьте github.com/itinance/react-native-fs#adding-manually-in-xcode
Шубхам Хатри,
Я получаю эту ошибку: Невозможно разрешить модульreact-native-webrtc
Анкита,

Ответы:

161

В моем случае эта конкретная проблема возникла, когда я пытался заархивировать приложение для iOS с реагированием 0.40+ (решение было найдено здесь: надежная сборка ^0.39.2не выполняется при обновлении до^0.40.0 ).

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

В моем случае решение заключалось в следующем:

  1. Отключите параллельные сборки:

    • Меню Xcode -> Продукт -> Схема -> Управление схемами ...
    • Дважды щелкните свое приложение
    • Вкладка Build -> снимите флажок Parallelize Build
  2. Добавить реакцию как зависимость проекта

    • Навигатор проекта Xcode -> перетащите React.xcodeproj из библиотек в корневое дерево
    • Вкладка Build Phases -> Target Dependencies -> + -> добавить React
agiaLab
источник
1
Я обнаружил, что это происходит только тогда, когда вы обновляетесь до react-native 0.40+ снизу. В проектах, инициированных с помощью RN 0.40+, параллельные сборки уже отключены.
agiaLab
20
Что означает «перетащить в корневое дерево»? И вкладка «Build Phases Tab» ... это этапы сборки React.xcodeproj?
GreenAsJade
2
Когда эта ошибка появляется после создания новой цели, достаточно шага 1 :)
Kepedizer
2
Как вы поступаете с проектом, выброшенным на Expo? У меня нигде нет React.xcodeproj, React находится в зависимостях Podfile
Себастьен Лорбер,
1
@SebastienLorber: откройте node_modules и перетащите оттуда проект React
Рамон Каналес
35

Убедитесь, что вы отключили Parallelise Buildи добавили Reactцель выше своей цели

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

onmyway133
источник
Я понял это самостоятельно после первого ответа, но движение вверх сработало! Пришлось понять, что это на самом деле означает для процесса строительства
njoye
1
Выдергивал волосы и думал, что делаю не так после добавления цели React, но перемещение вверх дало результат. @njoye, не могли бы вы объяснить, что это значит в процессе сборки? Спасибо!
Юджин Ким
@EugeneKim порядок элементов в списках - это способ Apple показывать хронологический порядок (это все еще часто меня раздражает, как на OSX, так и на iOS). Таким образом, если поставить цель «React» перед «App», код будет собран из «React» раньше вашего собственного. Поскольку ваш собственный код использует цель React, это, похоже, влияет на возможность его сборки. Вероятно, создаются файлы, которые затем используются в вашей цели.
njoye
Я хочу использовать функцию параллельной сборки, чтобы сократить время сборки
utkarsh-DevOps
25

БЫСТРЫЙ ИСПРАВЛЕНИЕ (не самое лучшее)

Измените строки заголовка import response-native:

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

Кому:

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

Вот пример изменений, которые мне пришлось внести в библиотеку, которую я пытался использовать: Закрывает # 46 - файл RCTBridgeModule.h не найден .

Simar
источник
16
Если вы внимательно прочитаете примечания к выпуску, я думаю, что на самом деле все наоборот - новый / одобренный способ #import <React/RCT...h>? совершить здесь
пользователь
1
Я знаю, что это кажется обратным тому, что рекомендуют документы, но указанный формат #import "RCTBridgeModule.h"действительно сработал для меня сегодня лучше.
paws
Ошибка для меня отмечена в файле RCTFileReaderModule.h. Я изменил инструкцию #import, как было предложено, но это не помогло. В связанном запросе на извлечение репо я вижу, что изменение было сделано в RNFSManager.h и RNFSManager.m. Я пробовал сделать это в этих двух файлах, но это тоже не помогло. Есть идеи, что я делаю неправильно?
Йоси
12

+ Изменить

  #import "RCTBridgeModule.h"

к

 #import "React/RCTBridgeModule.h"
Мантас Лауринавичюс
источник
1
Большое спасибо!! Я часами искал решение. Но это решение было спасительным. Спасибо!
Abhirup Mukherjee
3

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

Лоренс
источник
5
Я пробую это прямо сейчас. А как насчет использования вместо этого response-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 и yarn 0.24.5, когда я выполнял init-native init

Codler
источник
Спасибо, я выкладывал свой проект на github. И при повторном клонировании мне не хватало библиотек React, которые отображались красным. ваша команда работает. 👍
Rifinio
2

Последние выпуски библиотек, поддерживающих реакцию, как описано в предыдущих сообщениях и здесь, содержат критические изменения совместимости. Если вы не планируете обновляться до react-native 0.40+, вы можете принудительно установить предыдущую версию библиотеки, например, с помощью response-native-fs:

npm install --save -E react-native-fs@1.5.1
Макс Воробьев
источник
2

Мне удалось создать отладку, но не удалось создать архив.

Я решил эту проблему, перетащив React.xcodeprojфайл / node_modules / response-native / React в мой корневой каталог в Xcode, а затем добавил React в качестве целевой зависимости на этапах сборки> целевые зависимости.

BuffMcBigHuge
источник
Нет 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

Интеграция Refresh Pods полностью с использованием

$ pod deintegrate && pod install

Теперь перезагрузите рабочее пространство и выполните чистую сборку.

Питер Тейл
источник
1

Эта ошибка появилась у меня после того, как я запустил pod installкоманду для новых зависимостей. Наряду с этим также был установлен React. Поэтому, вероятно, Xcode был перепутан с path. Я удалил эти строки из 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 .

Вот мой подфайл.

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 выберите Product -> Scheme -> React вместо выбора MyModuleName по умолчанию.

Тейлор Клайн
источник
+1, важно добавить для тех, кто плохо знаком с разработкой модулей, что вы не увидите другие схемы, пока не создадите действительный подфайл и не запустите его pod install. create-react-native-module, похоже, не делает этого за вас. Я повесил трубку на время. Но у меня это сработало, как только я создал действительный подфайл и запустил установку.
Эллиот Родригес,
1

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

$ pod install

Если вы получаете какую-либо ошибку при установке команды pod type -

$ xcode-select -p

Результат должен быть - /Applications/Xcode.app/Contents/Developer

Если путь неверен, откройте свой проект iOS в Xcode и перейдите в: Xcode-> настройки-> инструменты командной строки-> выберите Xcode

И снова установите модуль, и ваша проблема будет исправлена.

Rathore
источник
0

Если вы хотите сделать это из своего редактора, также откройте SMobile.xcscheme

И изменить parallelizeBuildables = "NO"

Hadnazzar
источник
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 в папке Libraries в Xcode, а затем в настройках сборки изменить пути поиска заголовков, чтобы добавить эти два (рекурсивные):

$(SRCROOT)/../../../ios/Pods/Headers/Public/React-Core
$(SRCROOT)/../../../ios/Pods/Headers/Public
qwertzguy
источник
0

Если вы хотите, чтобы Parallelise Build оставался включенным и избегал проблем с отсутствующими заголовками, укажите в своей схеме этап предварительной сборки, чтобы поместить заголовки реакции в область производных данных. Обратите внимание, что в этом случае настройки сборки берутся из проекта React. Да, в этом нет ничего прекрасного, но он выполняет свою работу, а также экономит много времени на сборках. Выходные данные шага предварительной сборки попадают в файл prebuild.log. Точные заголовки, которые вам нужно скопировать, будут зависеть от зависимостей вашего проекта, связанных с реакцией, но вы получите jist из этого.

Изменить схему => Сборка

Получите каталог производных данных из переменных среды и скопируйте необходимые заголовки реакции.

#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отключить библиотеку

Теперь библиотека успешно удалена, и теперь снова установите ее в свой проект и на этот раз свяжите все вручную. Иногда автоматическое связывание вызывает эту ошибку.

Codesingh
источник