Реагируйте Native / Xcode Upgrade и теперь RCTConvert.h не найден

Приложение работало нормально на React Native 0.35.0. После обновления до 0.40.0 через react-native-git-upgrade При попытке собрать / запустить приложение в XCode у меня возникает ряд проблем с лексикой / препроцессором.

React/RCTBridgeModule.h' file not found

При нажатии на вопрос я вижу это выделено:

#import <React/RCTBridgeModule.h>

Это не похоже на проблему с поиском.

Я пытался удалить node_modules и запустить npm install еще раз, но это ничего не исправило.

8 ответов

Решение

Как указывалось th0th, в iOS RN 0,40 есть резкое изменение. Короче говоря, объявления заголовка RN обновляются, чтобы указывать на путь включения $(BUILT_PRODUCTS_DIR)/include/React,

Чтобы решить эту проблему, вы должны сделать следующее:

  1. В Xcode перейдите к схеме проекта (Продукт -> Схема -> Управление схемой -> дважды щелкните ваш проект).
  2. Нажмите на опцию "Построить" на левой панели.
  3. Снимите флажок "Распараллелить сборку" в разделе " Параметры сборки".
  4. Затем в разделе " Цели " нажмите кнопку "+", затем выполните поиск "Реагировать". Выберите его и нажмите "Добавить".
  5. "Реакция" должна появиться в разделе " Цели ". Нажмите и перетащите его вверх, чтобы он стал первым элементом в списке (до вашего проекта).
  6. Очистить проект и построить.

Примечание: у вас все еще может быть похожая проблема с заголовками в других библиотеках (например, response-native-fbsdk), которые ссылаются на эти реагирующие нативные файлы.h.


В реакции-родной 0,40


ты должен заменить #import "RCTBridgeModule.h" с #import <React/RCTBridgeModule.h>

затем очистите и постройте его снова.

Я была такая же проблема. Я решил это, удалив цель Test моего приложения из схемы сборки.

На 0.40 произошли серьезные изменения, подробности вы можете увидеть здесь.

Цитирование непосредственно из заметок о выпуске:

Это означает, что все нативные библиотеки iOS нуждаются в значительном увеличении версии для RN ​​0,40. Мы стараемся свести к минимуму изменения этой величины и приносим извинения за причиненные неудобства.

Таким образом, все нативные библиотеки iOS нуждаются в обновлении, прежде чем они станут совместимыми с нативной версией 0.40.

Если ваше приложение не слишком большое, просто

1) rename original app
2) create the same app again react-native init <orig_app_name>
3) copy over all necessary files from your original app to the newly created one
4) adjust the package.json
5) npm install
6) react-native run-<ios|android>

Я потратил часы, чтобы найти, где связать новые библиотеки, это был по крайней мере ценный вариант и ярлык для меня.

надеюсь, это кому-нибудь поможет

Если вы используете pod, возможно, вы можете попробовать это решение:

Перейти к путям поиска заголовка:Pods -> TARGETS -> (YOUR TARGET, like my target is RNGL) -> Build Settings -> All -> Search Paths -> Header Search Paths

добавить путь:"${PODS_ROOT}/Headers/Public/React" нерекурсивна

Эти шаги помогли решить мою проблему. Я попытался "Снять флажок распараллелить сборку". Это не сработало для меня.

  1. Откройте свой проект в XCode.
  2. Откройте папку "Библиотеки". Вы должны увидеть React.xcodeproj и несколько RCT*.xcodeproj.
  3. Перетащите React.xcodeproj в каждый из других проектов.
  4. Нажмите на каждый проект и перейдите на вкладку Build Phases.
  5. Нажмите на целевые зависимости и добавьте React в качестве целевой зависимости.

Изменение пути от:

#import <React/RCTBridgeModule.h>

чтобы:

#import <React/Base/RCTBridgeModule.h>

работал на меня.

Вот как я это сделал:

  • Я очистил свой package.json до последней версии,
  • Я сделал трюк от @max23_
  • Я заменил все#import '....h' которые вызывали ошибку в соответствующем #import <React/.....h>,

Обновление от

импорт "RCT/BridgeModule.h"

в

импорт "React/RCT/BridgeModule.h"

чистить и строить.

Хотя я не проверял это, я подозреваю, что если бы я не внес никаких изменений и просто очистил бы и собрал бы это, то добился бы цели.

Другие вопросы по тегам