Nie znaleziono pliku `React / RCTBridgeModule.h`


115

Ten błąd pojawia się podczas tworzenia natywnej aplikacji na iOS w Xcode.

wprowadź opis obrazu tutaj

Zaczęło się otrzymywać ten błąd po instalacji npm i połączeniu rpm -a biblioteki act-native-fs . Ale po wyszukaniu rozwiązania w Internecie zauważyłem, że wiele osób otrzymuje ten sam błąd podczas instalowania innych reagujących bibliotek natywnych.

Możliwe rozwiązanie sugerowane przez wielu jest, dodając po punkcie „Ustawienia Build” -> „Header wyszukiwania Paths”.

$(SRCROOT)/../node_modules/react-native/React - (rekurencyjne)

Ale bez tego rozwiązania, wciąż pojawia się ten sam błąd


Otrzymuję ten sam błąd z wersją 0.41.2, powinien działać z <React / RCT ...>, ale nie: /
pgarciacamou

@camou widzisz moją odpowiedź poniżej; to może pomóc
lawrence

@CecilRodriguez Jaką masz wersję dla act-native-fs ?. Jeśli dodajesz ręcznie za pomocą XCode, sprawdź github.com/itinance/react-native-fs#adding-manually-in-xcode
Shubham Khatri

Otrzymuję ten błąd: Nie można rozwiązać modułureact-native-webrtc
Ankita

Odpowiedzi:


161

W moim przypadku ten konkretny problem wystąpił, gdy próbowałem zarchiwizować aplikację natywną w wersji 0.40+ dla iOS (rozwiązanie znaleziono tutaj: Niezawodna kompilacja ^0.39.2kończy się niepowodzeniem podczas aktualizacji do^0.40.0 ).

Zdarzyło się, że Xcode próbował równolegle zbudować natywne biblioteki reagujące i budował biblioteki z niejawnymi zależnościami reagowania, zanim faktycznie zbudował tę bibliotekę.

Rozwiązaniem w moim przypadku było:

  1. Wyłącz kompilacje równoległe:

    • Menu Xcode -> Produkt -> Schemat -> Zarządzaj schematami ...
    • Kliknij dwukrotnie swoją aplikację
    • Karta Build -> odznacz opcję Parallelize Build
  2. Dodaj reakcję jako zależność projektu

    • Xcode Project Navigator -> przeciągnij React.xcodeproj z bibliotek do drzewa głównego
    • Zakładka Build Phases -> Target Dependencies -> + -> add React

1
Odkryłem, że dzieje się tak tylko wtedy, gdy aktualizujesz do reaktywnego 0.40+ od dołu. W projektach zainicjowanych w wersji 0.40+ RN kompilacje równoległe są już wyłączone.
agiaLab

20
Co oznacza „przeciągnij do korzenia”? A zakładka „Fazy kompilacji”… czy to są fazy tworzenia React.xcodeproj?
GreenAsJade

2
Gdy po utworzeniu nowej tarczy pojawia się ten błąd, krok 1 jest na tyle :)
Kepedizer

2
Jak radzisz sobie z projektem wyrzuconym na Expo? Nigdzie nie mam React.xcodeproj, React jest w zależnościach Podfile
Sebastien Lorber

1
@SebastienLorber otwórz node_modules i przeciągnij stamtąd projekt reakcji
Ramon Canales

35

Upewnij się, że wyłączyłeś Parallelise Buildi dodałeś Reactcel powyżej celu

wprowadź opis obrazu tutaj


Zrozumiałem to sam po pierwszej odpowiedzi, ale przeniesienie reakcji w górę załatwiło sprawę! Musiałem jednak zdać sobie sprawę, co to właściwie oznacza dla procesu budowy
njoye

1
Wyciągałem włosy i zastanawiałem się, co robię źle po dodaniu celu reakcji, ale przesunięcie go w górę załatwiło sprawę. @njoye czy mógłbyś wyjaśnić, co to oznacza w procesie tworzenia? Dziękuję Ci!
Eugene Kim

@EugeneKim kolejność elementów na listach to sposób firmy Apple na wyświetlanie kolejności chronologicznej (wciąż często mnie to denerwuje, zarówno na OSX, jak i iOS). Zatem umieszczenie celu „React” przed „App” spowoduje zbudowanie kodu z „React” przed własnym. Ponieważ twój własny kod używa celu React, wydaje się to mieć wpływ na to, czy można go zbudować. Prawdopodobnie są tworzone pliki, które są następnie używane w celu.
njoye

Chcę użyć funkcji kompilacji równoległej, aby skrócić czas kompilacji
utkarsh-devops,

25

QUICK FIX (nie najlepszy)

Zmień linie nagłówka importu reaguj-natywne:

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

Do:

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

Oto przykład zmian, które musiałem wprowadzić w bibliotece, której próbowałem użyć: Zamyka # 46 - Nie znaleziono pliku „RCTBridgeModule.h” .


16
Jeśli uważnie przeczytasz informacje o wydaniu, myślę, że w rzeczywistości jest inaczej - nowy / zatwierdzony sposób jest #import <React/RCT...h>? zobowiąż tutaj
użytkownik

1
Wiem, że wydaje się to być odwrócone od tego, co zalecają dokumenty, ale określony format #import "RCTBridgeModule.h"naprawdę działał dla mnie dzisiaj lepiej.
łapy

U mnie błąd jest oznaczony w pliku RCTFileReaderModule.h. Zmieniłem instrukcję #import zgodnie z sugestią, ale to nie pomogło. Widzę w żądaniu ściągnięcia połączonego repozytorium, że zmiana została dokonana w RNFSManager.h i RNFSManager.m. Próbowałem zrobić to w tych dwóch plikach, ale to też nie pomogło. Masz pojęcie, co robię źle?
Yossi


3

Dla widzów, którzy otrzymali ten błąd po aktualizacji React Native do wersji 0.40+, może być konieczne uruchomienie react-native upgradez wiersza poleceń.


5
Próbuję tego teraz. A co powiesz na użycie zamiast tego React-native-git-upgrade ?
pgarciacamou

Racja, to druga opcja. Myślę, że oboje będą działać.
lawrence

3

Jeśli Libraries/React.xcodeprojsą czerwone w xcode, zainstaluj ponownie node_modules

rm -rf node_modules && yarn

Mój nowo utworzony projekt z React-native 0.46.3 był czerwony: SI miał npm 5.3.0 i przędzę 0.24.5, kiedy zrobiłem react-native init


Dziękuję, wysyłałem swój projekt na github. A kiedy klonowałem go ponownie, brakowało mi bibliotek Reacta, które były wyświetlane na czerwono. Twoje polecenie działa. 👍
Rifinio

2

Najnowsze wersje bibliotek responsywnych, jak wyjaśniono w poprzednich postach , mają przełomowe zmiany w kompatybilności. Jeśli nie planujesz aktualizacji do react-native 0.40+, możesz wymusić instalację poprzedniej wersji biblioteki, na przykład za pomocąreak-native-fs:

npm install --save -E react-native-fs@1.5.1

2

Udało mi się zbudować debug, ale nie mogłem zbudować archiwum.

Rozwiązałem ten problem, przeciągając React.xcodeprojznaleziony w / node_modules / react-native / React do mojego katalogu głównego w Xcode, a następnie dodałem React jako docelową zależność w fazach kompilacji> docelowe zależności.


Nie ma React.xcodeprojw /node_modules/react-native/React.
Andrew Koster

@AndrewKoster Mam ten sam problem
Cecil Rodriguez

@CecilRodriguez Udało mi się to naprawić podczas kompilacji w Xcode, dodając Cocoapods i dodając Reacta jako pod w Podfile. Jednak gdy próbuję użyć skompilowanej biblioteki w programie react-native run-ios, otrzymuję błędy kompilacji, które nie występują w Xcode. Całkowity brak odpowiedniej dokumentacji jest frustrujący.
Andrew Koster

1
@Yossi Nie, jeszcze nie. Wszystkie próby, które próbowałem, nie zadziałały.
Cecil Rodriguez

1
@Yossi Nie, próbowałem twojego. Brak szczęścia. Myślę, że ma to coś wspólnego z moim rodzimym modułem
Cecil Rodriguez

2

Po React Native 0.60 ten problem jest często spowodowany połączeniem biblioteki z nową funkcją automatycznego łączenia. To rozwiązuje problem

Odłącz starą bibliotekę za pomocą

$ react-native unlink react-native-fs

Odśwież integrację podów w całości przy użyciu

$ pod deintegrate && pod install

Teraz przeładuj obszar roboczy i zrób czystą kompilację.


1

Ten błąd pojawił się po uruchomieniu pod installpolecenia dla nowych zależności. Wraz z nimi został również zainstalowany React. Dlatego prawdopodobnie Xcode był mylony ze ścieżką. Usunąłem te linie z PodFile i błąd zniknął. Należy pamiętać, że te usunięte stąd zostały już połączone w 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

U mnie ten błąd wystąpił, gdy dodałem nowy schemat / cel ( app.staging ) w aplikacji i zainstalowałem pody przy użyciu instalacji pod.

Ten problem występuje, ponieważ pody nie są udostępniane dla wszystkich celów. Muszę więc dodać nowo dodany cel ( app.staging ) wewnątrz pliku Podfile .

Oto mój plik 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

Otrzymuję ten błąd w każdym nowym module, który tworzę za pomocą create-react-native-module . Żadne z opublikowanych rozwiązań nie działało dla mnie.

To, co zadziałało, to najpierw upewnienie się, że uruchomię się yarnw nowo utworzonym folderze modułu w celu utworzenia node_modules/(ten krok jest prawdopodobnie oczywisty). Następnie w XCode wybierz Produkt -> Schemat -> Reaguj zamiast domyślnego wyboru MyModuleName.


+1, ważne jest, aby dodać innym nowicjuszom w rozwoju modułu, że nie zobaczysz innych schematów, dopóki nie utworzysz prawidłowego podfile i nie uruchomisz pod install. Nie wygląda na to, że create-aware-native-module robi to za Ciebie. Rozłączyłem się na chwilę. Ale to zadziałało, gdy utworzyłem prawidłowy plik podfile i uruchomiłem instalację.
Elliot Rodriguez

1

Przejdź do folderu iOS w swoim projekcie i zainstaluj pod -

$ pod install

Jeśli otrzymujesz błąd podczas instalacji polecenia typu pod-

$ xcode-select -p

Wynik powinien być - /Applications/Xcode.app/Contents/Developer

Jeśli ścieżka jest niepoprawna, otwórz projekt iOS w Xcode i przejdź do: Xcode-> preferencje-> narzędzia wiersza poleceń-> wybierz Xcode

I ponownie zainstaluj kapsułę, twój problem zostanie rozwiązany.



0

Jeśli chcesz zrobić to z edytora, otwórz również SMobile.xcscheme

I zmienić parallelizeBuildables = "NO"


0

U mnie nie działało żadne z powyższych rozwiązań a poniżej to co zadziałało (już sprawdziłem Parallelize Buildi dodałem 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

Napotkałem ten problem podczas aktualizacji z 0.58.4 do nowej wersji reaktywnej 0.60.4. Nic z tego, co znalazłem w internecie, nie pomogło mi, ale udało mi się to uruchomić:

Przejdź do ustawień kompilacji, wyszukaj `` Ścieżki wyszukiwania nagłówków '', wybierz wpis, naciśnij przycisk USUŃ.

Miałem te wartości zastąpione i wygląda na to, że po usunięciu wróciły do ​​wartości domyślnych. Również Cocoapods narzekał na to z wiadomościami w Terminalu po 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 linkNatknąłem się na ten problem po zrobieniu instrukcji zależności, która nie obsługuje automatycznego łączenia na RN 0.59+

Rozwiązaniem było wybranie pliku xcodeproj w folderze Libraries w Xcode, a następnie w ustawieniach kompilacji zmień ścieżki wyszukiwania nagłówków, aby dodać te dwa (rekurencyjne):

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

0

Jeśli chcesz zachować włączoną Parallelise Build i uniknąć problemów z brakującymi nagłówkami, zapewnij krok przed kompilacją w swoim schemacie, aby umieścić nagłówki reakcji w obszarze danych pochodnych. Zauważ, że w tym przypadku ustawienia kompilacji pochodzą z projektu React. Tak, nie jest to rzecz piękna, ale wykonuje swoją pracę, a także pozwala zaoszczędzić dużo czasu na kompilacjach. Dane wyjściowe kroku przed kompilacją trafiają do pliku prebuild.log. Dokładne nagłówki, które musisz skopiować, będą zależeć od natywnych zależności twojego projektu, ale otrzymasz z tego plik jist.

Edytuj schemat => Buduj

Pobierz katalog danych pochodnych ze zmiennych środowiskowych i skopiuj wymagane nagłówki reakcji.

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

Skrypt jest wywoływany podczas czyszczenia kompilacji - co nie jest idealne. W moim przypadku jest jedna zmienna env, która zmienia się, pozwalając mi wyjść ze skryptu na wczesnym etapie czyszczenia.

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

0

Wystarczy zainstalować pod, jeśli plik pod istnieje, po prostu wpisz

pod install

jeśli nie: to najpierw

pod init

następnie,

pod install

w terminalu. i możesz iść.


-1

Co możesz zrobić, aby zrobić to dobrze, to:

1) npm uninstall reat-native-fsaby odinstalować bibliotekę

2) npm unlink react-native-fsaby odłączyć bibliotekę

Teraz biblioteka została pomyślnie usunięta i ponownie zainstaluj bibliotekę w swoim projekcie i tym razem połącz wszystko ręcznie. Czasami automatyczne łączenie powoduje ten błąd.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.