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

Simar
źródło
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
agiaLab
źródło
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

onmyway133
źródło
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” .

Simar
źródło
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
12

Zmiana

  #import "RCTBridgeModule.h"

do

 #import "React/RCTBridgeModule.h"
Mantas Laurinavičius
źródło
1
Wielkie dzięki!! Szukałem rozwiązania godzinami. Ale to rozwiązanie było zbawieniem. Dzięki!
Abhirup Mukherjee,
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ń.

Lawrence
źródło
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

Codler
źródło
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
Max Vorobjev
źródło
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.

BuffMcBigHuge
źródło
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ę.

Peter Theill
źródło
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
Nocna Furia
źródło
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
maulikdhameliya
źródło
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.

Taylor Kline
źródło
+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.

Rathore
źródło
0

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

I zmienić parallelizeBuildables = "NO"

Hadnazzar
źródło
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`
kodeusz
źródło
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
Hleb Barylskyi
źródło
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
qwertzguy
źródło
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
Hermano Mclintock
źródło
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ść.

Abdul Karim Khan
źródło
-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.

Codesingh
źródło