File `React / RCTBridgeModule.h` non trovato


115

Ottenere questo errore durante la creazione di un'app iOS nativa per la reazione su xcode.

inserisci qui la descrizione dell'immagine

Ho iniziato a ricevere questo errore dopo l'installazione di npm e il collegamento a rpm della libreria react-native-fs . Ma dopo aver cercato online una soluzione, ho notato che molte persone ricevono lo stesso errore durante l'installazione di altre librerie native di React.

Una possibile soluzione suggerita da molti è l'aggiunta di quanto segue in "Impostazioni build" -> "Percorsi di ricerca intestazione".

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

Ma nessuna fortuna con questa soluzione, ottenendo ancora lo stesso errore


Ricevo lo stesso errore con la v0.41.2, dovrebbe funzionare con <React / RCT ...> ma non funziona: /
pgarciacamou

@camou vedi la mia risposta qui sotto; può aiutare
lawrence

@CecilRodriguez Quale versione hai per react-native-fs ?. Se stai aggiungendo manualmente con XCode, controlla github.com/itinance/react-native-fs#adding-manually-in-xcode
Shubham Khatri

Ricevo questo errore: Impossibile risolvere il moduloreact-native-webrtc
Ankita

Risposte:


161

Nel mio caso questo particolare problema si è verificato quando stavo cercando di archiviare un'app 0.40+ nativa per iOS (la soluzione è stata trovata qui: build affidabile ^0.39.2non riesce durante l'aggiornamento a^0.40.0 ).

Quello che è successo è stato che Xcode stava cercando di costruire le librerie native di react in parallelo e stava costruendo librerie con dipendenze reattive implicite prima di costruire effettivamente la libreria reattiva.

La soluzione nel mio caso era:

  1. Disabilita le build parallele:

    • Menu Xcode -> Prodotto -> Schema -> Gestisci Shemes ...
    • Fai doppio clic sulla tua applicazione
    • Scheda Build -> deseleziona Parallelize Build
  2. Aggiungi reagire come dipendenza del progetto

    • Xcode Project Navigator -> trascina React.xcodeproj dalle Librerie all'albero principale
    • Scheda Build Phases -> Dipendenze di destinazione -> + -> aggiungi React

1
Ho scoperto che questo accade solo quando esegui l'aggiornamento a Reazione nativa 0.40+ dal basso. Il progetto avviato con 0.40+ RN dispone già di build parallele disattivate.
agiaLab

20
Cosa significa "trascina nella radice dell'albero"? E la "scheda Build Phases" ... è questa la Build Phases di React.xcodeproj?
GreenAsJade

2
Quando questo bug compare dopo la creazione di un nuovo target, il passaggio 1 è sufficiente :)
Kepedizer

2
Come affronti un progetto espulso da Expo? Non ho React.xcodeproj da nessuna parte, React è nelle dipendenze di Podfile
Sebastien Lorber

1
@SebastienLorber apre il progetto node_modules e trascina il progetto di reazione da lì
Ramon Canales

35

Assicurati di disabilitare Parallelise Builde aggiungere un Reactobiettivo sopra il tuo obiettivo

inserisci qui la descrizione dell'immagine


L'ho capito da solo dopo la prima risposta, ma il movimento ha fatto il trucco! Ho dovuto rendermi conto di cosa ciò significasse effettivamente per il processo di costruzione, però
njoye

1
Mi stavo strappando i capelli e pensando a cosa stavo facendo di sbagliato dopo aver aggiunto l'obiettivo React, ma spostarlo in alto ha funzionato. @njoye potresti spiegare cosa significa nel processo di costruzione? Grazie!
Eugene Kim

@EugeneKim l'ordine degli elementi negli elenchi è il modo in cui Apple mostra l'ordine cronologico (questo mi f * s ancora spesso su OSX e iOS). Quindi, mettendo il target "React" prima di "App" creerai il codice da "React" prima del tuo. Poiché il tuo codice utilizza il target React, questo sembra influenzare se è in grado di essere costruito. Probabilmente ci sono file in costruzione che vengono poi utilizzati nella destinazione.
njoye

Voglio utilizzare la funzione di compilazione parallela per ridurre il tempo di compilazione
utkarsh-devops

25

RISOLUZIONE RAPIDA (non la migliore)

Modificare le righe dell'intestazione nativa di reazione dell'importazione:

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

Per:

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

Ecco un esempio di modifiche che ho dovuto apportare alla libreria che stavo cercando di utilizzare: Closes # 46 - File 'RCTBridgeModule.h' non trovato .


16
Se leggi attentamente le note di rilascio, penso che in realtà sia il contrario: il modo nuovo / approvato è #import <React/RCT...h>? commit qui
utente

1
So che sembra indietro rispetto a ciò che i documenti consigliano, ma il formato specificato #import "RCTBridgeModule.h"ha funzionato davvero meglio per me oggi.
zampe

L'errore per me è contrassegnato nel file RCTFileReaderModule.h. Ho cambiato l'istruzione #import come suggerito ma non ha aiutato. Vedo nella richiesta pull del repository collegato che la modifica è stata eseguita in RNFSManager.he RNFSManager.m. Ho provato a farlo in questi due file ma non ha aiutato neanche. Qualche idea su cosa sto facendo di sbagliato?
Yossi

12

Modificare

  #import "RCTBridgeModule.h"

per

 #import "React/RCTBridgeModule.h"

1
Molte grazie!! Avevo passato ore a cercare la soluzione. Ma questa soluzione è stata il salvatore. Grazie!
Abhirup Mukherjee

3

Per i visualizzatori che hanno ricevuto questo errore dopo aver aggiornato React Native a 0.40+, potrebbe essere necessario eseguire react-native upgradesulla riga di comando.


5
Lo sto provando adesso. Che ne dici di usare invece react-native-git-upgrade ?
pgarciacamou

Bene, questa è l'altra opzione. Penso che funzioneranno entrambi.
lawrence

3

Se Libraries/React.xcodeprojsono rossi in xcode, reinstallare node_modules

rm -rf node_modules && yarn

Il mio progetto appena creato da React-Native 0.46.3 era rosso: SI ha npm 5.3.0 e filato 0.24.5 quando ho eseguito React-Native Init


Grazie, stavo spingendo il mio progetto su GitHub. E durante la clonazione di nuovo mi mancavano le librerie React che erano visualizzate in rosso. il tuo comando sta funzionando. 👍
Rifinio

2

Le ultime versioni delle librerie reattive native come spiegato nei post precedenti e qui hanno modifiche di compatibilità interrotte. Se non prevedi di eseguire l'upgrade a react-native 0.40+ puoi forzare l'installazione della versione precedente della libreria, ad esempio con react-native-fs:

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

2

Sono stato in grado di creare un debug, ma non sono stato in grado di creare un archivio.

Ho risolto questo problema trascinando React.xcodeprojtrovato in / node_modules / react-native / React nella mia directory principale in Xcode, quindi ho aggiunto React come dipendenza di destinazione nelle fasi di compilazione> dipendenze di destinazione.


Non c'è React.xcodeprojin /node_modules/react-native/React.
Andrew Koster

@AndrewKoster Sto riscontrando lo stesso problema
Cecil Rodriguez il

@CecilRodriguez Sono riuscito a risolvere questo problema durante la compilazione in Xcode, aggiungendo Cocoapods e aggiungendo React come pod nel Podfile. Tuttavia, una volta che provo a utilizzare la libreria compilata in react-native run-ios, ottengo errori di compilazione che non si verificano in Xcode. La totale mancanza di documentazione pertinente è frustrante.
Andrew Koster

1
@Yossi No, non ancora. Tutti i tentativi che ho provato non hanno funzionato.
Cecil Rodriguez,

1
@Yossi No, ho provato il tuo. Senza fortuna. Ha qualcosa a che fare con il mio modulo nativo, penso
Cecil Rodriguez il

2

Dopo React Native 0.60 questo problema è spesso causato da una libreria collegata combinata con la nuova funzionalità di 'collegamento automatico'. Questo lo risolve per me

Scollega la vecchia libreria utilizzando

$ react-native unlink react-native-fs

Aggiorna integralmente i pod utilizzando

$ pod deintegrate && pod install

Ora ricarica il tuo spazio di lavoro ed esegui una build pulita.


1

Questo errore è apparso per me dopo aver eseguito il pod installcomando per le nuove dipendenze. Insieme a quelli, era stato installato anche React. Pertanto probabilmente Xcode è stato confuso con il percorso. Ho rimosso queste righe da PodFile e l'errore era sparito. Tieni presente che quelli rimossi da qui erano già collegati in 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

Per me, questo errore si è verificato quando ho aggiunto un nuovo schema / target ( app.staging ) nell'app e ho installato pod utilizzando l'installazione pod.

Questo problema si verifica perché i pod non sono condivisi per tutti i target. Quindi ho bisogno di aggiungere il target appena aggiunto ( app.staging ) all'interno del Podfile .

Ecco il mio 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

Ricevo questo errore in ogni nuovo modulo che creo con create-react-native-module . Nessuna delle soluzioni pubblicate ha funzionato per me.

Quello che ha funzionato per me è stato prima assicurarmi di eseguire yarnnella cartella del modulo appena creata per creare node_modules/(questo passaggio è probabilmente ovvio). Quindi, in XCode, seleziona Product -> Scheme -> React invece della selezione predefinita di MyModuleName.


+1, è importante aggiungere per gli altri nuovi allo sviluppo del modulo che non vedrai gli altri schemi finché non crei un podfile valido ed esegui pod install. create-react-native-module non sembra farlo per te. Mi hai riattaccato per un po '. Ma questo ha funzionato per me una volta che ho creato un podfile valido e ho eseguito l'installazione.
Elliot Rodriguez il

1

Vai alla cartella iOS nel tuo progetto e installa il pod -

$ pod install

Se ricevi un errore durante l'installazione del comando di tipo pod-

$ xcode-select -p

Il risultato dovrebbe essere - /Applications/Xcode.app/Contents/Developer

Se il percorso non è corretto, apri il tuo progetto iOS in Xcode e vai a: Xcode-> preferenze-> strumenti della riga di comando-> seleziona Xcode

E di nuovo installa il pod, il tuo problema verrà risolto.



0

Se vuoi farlo dal tuo editor, apri anche SMobile.xcscheme

E cambia parallelizeBuildables = "NO"


0

Per me non ha funzionato nessuna delle soluzioni di cui sopra e di seguito è quello che ha funzionato (avevo già verificato Parallelize Builde aggiunto 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

Ho riscontrato questo problema durante l'aggiornamento dalla 0.58.4 alla nuova versione nativa di reazione 0.60.4. Niente di quello che ho trovato su Internet mi ha aiutato, ma sono riuscito a farlo funzionare:

Vai alle impostazioni di costruzione, cerca "Percorsi di ricerca intestazione", seleziona la voce, premi il pulsante CANCELLA.

Questi valori sono stati sovrascritti e sembra che siano tornati ai valori predefiniti dopo l'eliminazione. Anche Cocoapods se ne lamentava con messaggi in Terminal dopo 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

Mi sono imbattuto in questo problema dopo aver eseguito un manuale react-native linkdi una dipendenza che non supportava il collegamento automatico su RN 0.59+

La soluzione era selezionare il file xcodeproj nella cartella Librerie in Xcode e quindi in Impostazioni build, modificare i percorsi di ricerca dell'intestazione per aggiungere questi due (ricorsivi):

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

0

Se si desidera mantenere la compilazione parallela abilitata ed evitare i problemi di intestazione mancanti, fornire una fase di pre-compilazione nel proprio schema per inserire le intestazioni di reazione nell'area dei dati derivati. Notare che le impostazioni di build provengono dal progetto React in questo caso. Sì, non è una cosa bella, ma porta a termine il lavoro e riduce anche molto tempo alle costruzioni. L'output del passo di pre-compilazione finisce in prebuild.log. Le intestazioni esatte che dovrai copiare dipenderanno dalle dipendenze native del tuo progetto, ma otterrai il succo da questo.

Modifica schema => Crea

Ottieni la directory dei dati derivati ​​dalle variabili di ambiente e copia le intestazioni di reazione richieste.

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

Lo script viene richiamato durante un build-clean, il che non è l'ideale. Nel mio caso c'è una variabile env che cambia permettendomi di uscire presto dallo script durante una pulizia.

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

0

Hai solo bisogno di installare pod, se il file pod esiste basta digitare

pod install

se no: quindi prima,

pod init

poi,

pod install

nel terminale. e sei a posto.


-1

Quello che puoi fare per farlo bene è:

1) npm uninstall reat-native-fsper disinstallare la libreria

2) npm unlink react-native-fsper scollegare la libreria

Ora la libreria è stata rimossa con successo e ora installa di nuovo la lib nel tuo progetto e questa volta collega tutto manualmente. A volte il collegamento automatico causa questo errore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.