No se encontró el archivo `React / RCTBridgeModule.h`

115

Recibiendo este error al compilar una aplicación iOS nativa de reacción en xcode.

ingrese la descripción de la imagen aquí

Comenzó a recibir este error después de la instalación de npm y rpm vinculando la biblioteca react-native-fs . Pero después de buscar una solución en línea, noté que muchas personas están obteniendo el mismo error al instalar otras bibliotecas nativas react.

Una posible solución sugerida por muchos es agregar lo siguiente en "Configuración de compilación" -> "Rutas de búsqueda de encabezado".

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

Pero no tuve suerte con esta solución, todavía aparece el mismo error

Simar
fuente
Recibo este mismo error con v0.41.2, debería funcionar con <React / RCT ...> pero no lo hace: /
pgarciacamou
@camou vea mi respuesta a continuación; puede ayudar
lawrence
@CecilRodriguez ¿Qué versión tienes para react-native-fs ?. Si está agregando manualmente con XCode, consulte github.com/itinance/react-native-fs#adding-manually-in-xcode
Shubham Khatri
Recibo este error: No se puede resolver el móduloreact-native-webrtc
Ankita

Respuestas:

161

En mi caso, este problema en particular ocurrió cuando estaba tratando de archivar una aplicación nativa de reacción 0.40+ para iOS (la solución se encontró aquí: la compilación confiable ^0.39.2falla al actualizar a^0.40.0 ).

Lo que sucedió fue que Xcode estaba tratando de construir bibliotecas nativas de reacción en paralelo y estaba construyendo bibliotecas con dependencias de reacción implícitas antes de construir la biblioteca de reacción.

La solución en mi caso fue:

  1. Deshabilite las compilaciones paralelas:

    • Menú Xcode -> Producto -> Esquema -> Administrar Shemes ...
    • Haga doble clic en su aplicación
    • Pestaña Construir -> desmarque Construir en paralelo
  2. Agregar reaccionar como una dependencia del proyecto

    • Navegador de proyectos Xcode -> arrastre React.xcodeproj desde Bibliotecas al árbol raíz
    • Pestaña Build Phases -> Target Dependencias -> + -> agregar React
agiaLab
fuente
1
Descubrí que esto solo sucede cuando está actualizando a react-native 0.40+ desde abajo. Los proyectos que se inician con 0.40+ RN ya tienen las compilaciones paralelas desactivadas.
agiaLab
20
¿Qué significa "arrastrar a la raíz del árbol"? Y la "pestaña Build Phases" ... ¿es esta la Build Phase de React.xcodeproj?
GreenAsJade
2
Cuando aparece este error después de la creación de un nuevo objetivo, el paso 1 es suficiente :)
Kepedizer
2
¿Cómo se enfrenta a un proyecto expulsado de la Expo? No tengo React.xcodeproj en ningún lado, React está en las dependencias de Podfile
Sebastien Lorber
1
@SebastienLorber abre node_modules y arrastra el proyecto de reacción desde allí
Ramon Canales
35

Asegúrese de deshabilitar Parallelise Buildy agregar un Reactobjetivo por encima de su objetivo

ingrese la descripción de la imagen aquí

onmyway133
fuente
Lo descubrí por mi cuenta después de la primera respuesta, ¡pero moverme y reaccionar hizo el truco! Sin embargo
njoye
1
Estaba tirando de mi cabello y pensando qué estaba haciendo mal después de agregar el objetivo React, pero moverlo hacia arriba funcionó. @njoye, ¿podrías explicar qué significa esto en el proceso de construcción? ¡Gracias!
Eugene Kim
@EugeneKim el orden de los elementos en las listas es la forma en que Apple muestra el orden cronológico (esto todavía me molesta a menudo, tanto en OSX como en iOS). Así que poner el objetivo "React" antes de "App" construirá el código de "React" antes que el tuyo. Dado que su propio código usa el objetivo React, esto parece afectar si se puede construir. Probablemente se están creando archivos que luego se utilizan en su objetivo.
njoye
Quiero usar la función de compilación en paralelo para reducir el tiempo de compilación
utkarsh-devops
25

CORRECCIÓN RÁPIDA (no es la mejor)

Cambie las líneas de encabezado de importación react-native:

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

A:

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

Aquí hay un ejemplo de los cambios que tuve que hacer para la biblioteca que estaba tratando de usar: Cierra # 46 - No se encontró el archivo 'RCTBridgeModule.h' .

Simar
fuente
16
Si lee las notas de la versión detenidamente, creo que en realidad es al revés: ¿la forma nueva / aprobada es #import <React/RCT...h>? confirmar aquí
usuario
1
Sé que parece al revés de lo que recomiendan los documentos, pero el formato especificado #import "RCTBridgeModule.h"realmente funcionó mejor para mí hoy.
patas
El error para mí está marcado en el archivo RCTFileReaderModule.h. Cambié la declaración #import como se sugirió, pero no ayudó. Veo en la solicitud de extracción del repositorio vinculado que el cambio se realizó en RNFSManager.hy RNFSManager.m. Intenté hacerlo en estos dos archivos, pero tampoco ayudó. ¿Alguna idea de lo que estoy haciendo mal?
Yossi
12

Cambio

  #import "RCTBridgeModule.h"

a

 #import "React/RCTBridgeModule.h"
Mantas Laurinavičius
fuente
1
¡¡Muchas gracias!! Había pasado horas buscando la solución. Pero esta solución fue la salvadora. ¡Gracias!
Abhirup Mukherjee
3

Para los espectadores que obtuvieron este error después de actualizar React Native a 0.40+, es posible que deba ejecutar react-native upgradeen la línea de comandos.

Lawrence
fuente
5
Estoy intentando esto ahora mismo. ¿Qué hay de usar react-native-git-upgrade en su lugar?
pgarciacamou
Bien, esa es la otra opción. Creo que ambos funcionarán.
Lawrence
3

Si Libraries/React.xcodeprojestán en rojo en xcode, reinstale node_modules

rm -rf node_modules && yarn

Mi proyecto recién creado de react-native 0.46.3 era rojo: SI tengo npm 5.3.0 y yarn 0.24.5 cuando hice react-native init

Codler
fuente
Gracias, estaba impulsando mi proyecto a github. Y al clonarlo nuevamente, me faltaban las bibliotecas React que se mostraban en rojo. su comando está funcionando. 👍
Rifinio
2

Las últimas versiones de bibliotecas nativas de reacción como se explica en publicaciones anteriores y aquí tienen cambios de compatibilidad importantes. Si aún no planea actualizar a react-native 0.40+, puede forzar la instalación de la versión anterior de la biblioteca, por ejemplo con react-native-fs:

npm install --save -E react-native-fs@1.5.1
Max Vorobjev
fuente
2

Pude crear una depuración, pero no pude crear un archivo.

Resolví este problema arrastrando lo que se React.xcodeprojencuentra en / node_modules / react-native / React a mi directorio raíz en Xcode, luego agregué React como una dependencia de destino en las fases de compilación> dependencias de destino.

BuffMcBigEnorme
fuente
No hay React.xcodeprojen /node_modules/react-native/React.
Andrew Koster
@AndrewKoster Estoy experimentando el mismo problema
Cecil Rodríguez
@CecilRodriguez Me las arreglé para solucionar esto al compilar en Xcode, agregando Cocoapods y agregando React como un pod en el Podfile. Sin embargo, una vez que intento usar la biblioteca compilada react-native run-ios, obtengo errores de compilación que no ocurren en Xcode. La falta total de documentación relevante es frustrante.
Andrew Koster
1
@Yossi No, todavía no. Todos los intentos que he intentado no han funcionado.
Cecil Rodriguez
1
@Yossi No, probé el tuyo. Sin suerte. Creo que tiene algo que ver con mi módulo nativo
Cecil Rodríguez
2

Después de React Native 0.60, este problema a menudo es causado por una biblioteca vinculada combinada con la nueva función de 'autoenlace'. Esto me lo arregla

Desvincular biblioteca antigua usando

$ react-native unlink react-native-fs

Actualizar la integración de Pods usando

$ pod deintegrate && pod install

Ahora recargue su espacio de trabajo y haga una construcción limpia.

Peter Theill
fuente
1

Este error apareció para mí después de ejecutar el pod installcomando para las nuevas dependencias. Junto con esos, React también se había instalado. Por lo tanto, probablemente Xcode se confundió con la ruta. Eliminé estas líneas de PodFile y el error desapareció. Tenga en cuenta que los eliminados de aquí ya estaban vinculados en 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
Furia Nocturna
fuente
1

Para mí, este error ocurrió cuando agregué un nuevo esquema / objetivo ( app.staging ) en la aplicación e instalé pods usando la instalación de pod.

Este problema se debe a que los pods no se comparten para todos los destinos. Así que necesito agregar el destino recién agregado ( app.staging ) dentro del Podfile .

Aquí está mi 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
fuente
1

Recibo este error en cualquier módulo nuevo que creo con create-react-native-module . Ninguna de las soluciones publicadas funcionó para mí.

Lo que funcionó para mí fue primero asegurarme de ejecutar yarnen la carpeta del módulo recién creado para crear node_modules/(este paso es probablemente obvio). Luego, en XCode, seleccione Producto -> Esquema -> Reaccionar en lugar de la selección predeterminada de MyModuleName.

Taylor Kline
fuente
+1, es importante agregar para otros nuevos en el desarrollo de módulos que no verá los otros esquemas hasta que cree un podfile válido y lo ejecute pod install. create-react-native-module no parece hacer esto por usted. Me hizo colgar por un tiempo. Pero esto funcionó para mí una vez que creé un podfile válido y ejecuté la instalación.
Elliot Rodriguez
1

Vaya a la carpeta de iOS en su proyecto e instale el pod -

$ pod install

Si recibe algún error en la instalación del comando de tipo pod-

$ xcode-select -p

El resultado debe ser - /Applications/Xcode.app/Contents/Developer

Si la ruta es incorrecta, abra su proyecto de iOS en Xcode y vaya a: Xcode-> preferencias-> herramientas de línea de comando-> seleccione Xcode

Y nuevamente instale el pod, su problema se solucionará.

Rathore
fuente
0

Si desea hacerlo desde su editor, también abra SMobile.xcscheme

Y cambio parallelizeBuildables = "NO"

Hadnazzar
fuente
0

Para mí, no funcionó ninguna de las soluciones anteriores y debajo es lo que funcionó (ya había revisado Parallelize Buildy agregado 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
fuente
0

Encontré este problema al actualizar de 0.58.4 a la nueva versión reactiva nativa 0.60.4. Nada de lo que encontré en Internet me ayudó, pero logré que funcionara:

Vaya a la configuración de compilación, busque 'Rutas de búsqueda de encabezado', seleccione la entrada, presione el botón BORRAR.

Hice anular estos valores y parece que volvieron a los valores predeterminados después de la eliminación. También Cocoapods se quejó con mensajes en la Terminal después 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
fuente
0

Me encontré con este problema después de hacer un manual react-native linkde una dependencia que no admitía el enlace automático en RN 0.59+

La solución fue seleccionar el archivo xcodeproj en la carpeta Bibliotecas en Xcode y luego en Configuración de compilación, cambiar las Rutas de búsqueda de encabezado para agregar estos dos (recursivos):

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

Si desea mantener la construcción paralela habilitada y evitar los problemas de encabezado que faltan, proporcione un paso previo a la compilación en su esquema para colocar los encabezados de reacción en el área de datos derivados. Observe que la configuración de compilación proviene del proyecto React en este caso. Sí, no es una cosa hermosa, pero hace el trabajo y también reduce mucho tiempo de las construcciones. La salida del paso previo a la compilación termina en prebuild.log. Los encabezados exactos que necesitará copiar dependerán de las dependencias nativas de reacción de su proyecto, pero obtendrá la esencia de esto.

Editar esquema => Construir

Obtenga el directorio de datos derivados de las variables de entorno y copie los encabezados de reacción requeridos.

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

El script se invoca durante una limpieza de compilación, lo que no es ideal. En mi caso, hay una variable env que cambia y me permite salir del script temprano durante una limpieza.

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

Solo necesita instalar pod, si el archivo pod existe, simplemente escriba

pod install

si no: así que primero,

pod init

luego,

pod install

en terminal. y estás listo para irte.

Abdul Karim Khan
fuente
-1

Lo que puede hacer para hacerlo bien es:

1) npm uninstall reat-native-fspara desinstalar la biblioteca

2) npm unlink react-native-fspara desvincular la biblioteca

Ahora la biblioteca se eliminó con éxito y ahora instale la biblioteca nuevamente en su proyecto y esta vez vincule todo manualmente. En ocasiones, la vinculación automática provoca este error.

Codificación
fuente