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


115

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

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

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

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

$(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
Шубхам Хатри,

Я получаю эту ошибку: Невозможно разрешить модуль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

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цель выше своей цели

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


Я понял это самостоятельно после первого ответа, но движение вверх сработало! Пришлось понять, что это на самом деле означает для процесса строительства
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 не найден .


16
Если вы внимательно прочитаете примечания к выпуску, я думаю, что на самом деле все наоборот - новый / одобренный способ #import <React/RCT...h>? совершить здесь
пользователь

1
Я знаю, что это кажется обратным тому, что рекомендуют документы, но указанный формат #import "RCTBridgeModule.h"действительно сработал для меня сегодня лучше.
paws

Ошибка для меня отмечена в файле RCTFileReaderModule.h. Я изменил инструкцию #import, как было предложено, но это не помогло. В связанном запросе на извлечение репо я вижу, что изменение было сделано в RNFSManager.h и RNFSManager.m. Я пробовал сделать это в этих двух файлах, но это тоже не помогло. Есть идеи, что я делаю неправильно?
Йоси


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


Спасибо, я выкладывал свой проект на 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 в качестве целевой зависимости на этапах сборки> целевые зависимости.


Нет 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

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



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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.