Файл React/RCTEventEmitter.h не найден

Я пытаюсь реализовать PushNotificationIOS с помощью отдельного приложения Expo. Я запускаю SDK 21.0.0 (React Native 0.48).

Я получаю React/RCTEventEmitter file not found

Я выполнил следующие шаги:

  • Откройте мой проект .xcworkspace
  • Перетащите RCTPushNotification.xcodeproj в папку "Мои библиотеки"
  • Добавлен libRCTPushNotification.a в App > Build Phases > Link Binary With Libraries на libRCTPushNotification.a App > Build Phases > Link Binary With Libraries
  • Добавлены $(SRCROOT)/../node_modules/react-native/Libraries по пути поиска заголовков. Я также пробовал без /../. У меня есть группа "Под" в списке "Пути поиска заголовков".

Затем я добавил следующее в AppDelegate.m но когда я AppDelegate.m к файлу (⌘ + щелчок), я получаю знак вопроса.

#import <React/RCTPushNotificationManager.h>

Если я изменю его на ниже, он работает, я могу щелкнуть

#import "RCTPushNotificationManager.h"

Однако это моя проблема

Когда я RCTPushNotificationManager.h свой проект, я получаю RCTPushNotificationManager.h ошибку в RCTPushNotificationManager.h чтобы сказать:

'React/RCTEventEmitter.h' file not found

Ответ 1

@Дэн Я столкнулся с точно такой же проблемой, она также возникает для RCTLinking и других библиотек, зависящих от eventEmitter.h и отдельного проекта Expo.

Проблема заключается в том, что RCTPushNotification не имеет ссылки на React из файла Cocoapods React, так как Expo управляет React в Cocoapods. Таким образом, вы должны зайти в RCTPushNotification.xcodeproj, затем в Targets - RCTPushNotification Heath Search Paths и добавить ссылку на "ios/Pods/Headers/Public/React" и установить для рекурсии.

RCTPushNotification Target Build Settings Самый простой способ сделать это - перейти на iOS/Pods/Headers/Public/React и перетащить папку в настройки сборки для путей поиска заголовков, как показано на рисунке ниже.

enter image description here

Поднимитесь, наконец, после этого вам, скорее всего, придется ссылаться на ReactCommon/yoga, ReactCommon/yoga, однако, должно быть в ваших 'node_modules/реагировать-нативном /ReactCommon/yoga'

Ответ 2

Это работает для меня на отдельном проекте Экспо

"react": "16.6.3",
"react-native": "0.58.6",

Добавьте 'RCTPushNotification' в ваш модуль и запустите pod install

pod 'React', :path => '../node_modules/react-native', :subspecs => [    
    'RCTPushNotification',
  ]

Ответ 3

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

Ответ 4

Поскольку ничто из вышеперечисленного не помогло мне, я начал экспериментировать, и вот что решил для меня:

1. Ссылка React-Core & Общественный

Как упомянул Escamilla, в xcode откройте RCTPushNotification.xcodeproj и в Build Settings найдите header search path и добавьте туда 2 пути:

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

2. Скопируйте RCTPushNotificationManager.h вручную в React-Core

В корневой папке вашего проекта выполните:

cp ./node_modules/react-native/Libraries/PushNotificationIOS/RCTPushNotificationManager.h ./ios/Pods/Headers/Public/React-Core/React

Это скопирует RCTPushNotificationManager.h, который находится в node_modules/react-native/Libraries/PushNotificationIOS/, вручную в папку React, которая находится в ios/Pods/Headers/Public/React-Core/React.


Я понятия не имею, если это хорошее решение, но оно работает. Может быть, если бы кто-то мог объяснить мне, почему его там не было? Это было бы золотым.

Я очень тщательно следовал инструкциям по установке 1 к 1, все делал правильно, но ничего не получалось, кроме упомянутой выше ручной копии...

Кроме того, это случайно сбрасывается время от времени и должно быть сделано снова -.- '

Ответ 5

Просто выполните следующие действия:

  1. создать проект react-native init project.
  2. добавьте эту строку в файл pod в папке ios: pod 'React-RCTPushNotification', :path => '../node_modules/react-native/Libraries/PushNotificationIOS'
  3. cd ios && pod install
  4. cd .. && react-native run-ios

Не нужно делать грязные ручные ссылки