Arquivo `React / RCTBridgeModule.h` não encontrado


115

Recebendo este erro ao construir um aplicativo iOS nativo reactivo no xcode.

insira a descrição da imagem aqui

Começou a receber este erro após npm install e rpm vincular a biblioteca react -native-fs Mas depois de pesquisar online por uma solução, percebi que muitas pessoas estão recebendo o mesmo erro ao instalar outras bibliotecas nativas react.

Uma possível solução sugerida por muitos é adicionar o seguinte em "Build Settings" -> "Header Search Paths".

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

Mas sem sorte com esta solução, ainda obtendo o mesmo erro


Estou recebendo o mesmo erro com a v0.41.2, deveria funcionar com <React / RCT ...> mas não funciona: /
pgarciacamou

@camou veja minha resposta abaixo; pode ajudar
lawrence

@CecilRodriguez Qual versão você tem para react-native-fs ?. Se você estiver adicionando manualmente com o XCode, verifique github.com/itinance/react-native-fs#adding-manually-in-xcode
Shubham Khatri

Estou recebendo este erro: Não é possível resolver o móduloreact-native-webrtc
Ankita

Respostas:


160

No meu caso, esse problema específico aconteceu quando eu estava tentando arquivar um aplicativo nativo de reação 0.40+ para iOS (a solução foi encontrada aqui: A construção confiável ^0.39.2falha ao atualizar para^0.40.0 ).

O que aconteceu foi que o Xcode estava tentando construir as bibliotecas react-nativas em paralelo e estava construindo bibliotecas com dependências react implícitas antes de construir a biblioteca react.

A solução no meu caso foi:

  1. Desative as compilações paralelas:

    • Menu Xcode -> Produto -> Esquema -> Gerenciar Shemes ...
    • Clique duas vezes no seu aplicativo
    • Guia Build -> desmarque a opção Parallelize Build
  2. Adicione o react como uma dependência do projeto

    • Xcode Project Navigator -> arraste React.xcodeproj das Bibliotecas para a árvore raiz
    • Guia Build Phases -> Target Dependencies -> + -> add React

1
Eu descobri que isso só acontece quando você está atualizando para reagente nativo 0.40+ de baixo para cima. Projetos que são inicializados com o 0.40+ RN já têm compilações paralelas desativadas.
agiaLab de

20
O que significa "arrastar para a raiz da árvore"? E a "Aba Build Phases" ... esta é a Build Phases do React.xcodeproj?
GreenAsJade

2
Quando esse bug aparece após a criação de um novo alvo, a etapa 1 é suficiente :)
Kepedizer

2
Como você lida com um projeto expulso da Expo? Não tenho React.xcodeproj em lugar nenhum, React está nas dependências do Podfile
Sebastien Lorber

1
@SebastienLorber abre node_modules e arrasta o projeto de reação de lá
Ramon Canales

35

Certifique-se de desativar Parallelise Builde adicionar Reactalvo acima de seu alvo

insira a descrição da imagem aqui


Descobri por conta própria após a primeira resposta, mas mover-se e reagir para cima funcionou! Tive que perceber o que isso realmente significava para o processo de construção
njoye

1
Estava puxando meu cabelo e pensando no que estava fazendo de errado depois de adicionar o alvo React, mas movê-lo para cima funcionou. @njoye você poderia explicar o que isso significa no processo de construção? Obrigado!
Eugene Kim

@EugeneKim a ordem dos elementos nas listas é a maneira da Apple de mostrar a ordem cronológica (isso ainda me incomoda com frequência, tanto no OSX quanto no iOS). Portanto, colocar o alvo "React" antes de "App" construirá o código de "React" antes do seu. Como seu próprio código usa o alvo React, isso parece afetar se ele pode ser compilado. Provavelmente, há arquivos sendo compilados que são usados ​​em seu destino.
njoye

Quero usar o recurso de compilação paralela para reduzir o tempo de compilação
utkarsh-devops

25

QUICK FIX (não é o melhor)

Altere as linhas de cabeçalho import react-native:

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

Para:

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

Aqui está um exemplo de alterações que tive de fazer na biblioteca que estava tentando usar: Closes # 46 - arquivo 'RCTBridgeModule.h' não encontrado .


16
Se você ler as notas de lançamento com atenção, acho que na verdade é o contrário - o novo / aprovado é #import <React/RCT...h>? comprometa-se aqui
usuário

1
Eu sei que parece retroceder em relação ao que os documentos recomendam, mas o formato especificado #import "RCTBridgeModule.h"realmente funcionou melhor para mim hoje.
patas

O erro para mim está sinalizado no arquivo RCTFileReaderModule.h. Alterei a instrução #import conforme sugerido, mas não ajudou. Vejo na solicitação de pull de repositório vinculada que a alteração foi feita em RNFSManager.he RNFSManager.m. Tentei fazê-lo nesses dois arquivos, mas também não ajudou. Alguma ideia do que estou fazendo de errado?
Yossi

12

mudança

  #import "RCTBridgeModule.h"

para

 #import "React/RCTBridgeModule.h"

1
Muito obrigado!! Passei horas procurando a solução. Mas essa solução foi o salvador. Obrigado!
Abhirup Mukherjee

3

Para visualizadores que obtiveram este erro após atualizar o React Native para 0.40+, pode ser necessário executar react-native upgradena linha de comando.


5
Estou tentando isso agora. Que tal usar react-native-git-upgrade em vez disso?
pgarciacamou de

Certo, essa é a outra opção. Acho que os dois vão funcionar.
lawrence

3

Se Libraries/React.xcodeprojestiverem vermelhos no xcode, então reinstale node_modules

rm -rf node_modules && yarn

Meu projeto recém-criado do react-native 0.46.3 era vermelho: SI tem npm 5.3.0 e yarn 0.24.5 quando eu fiz o init react-native


Obrigado, eu estava enviando meu projeto para o github. E ao cloná-lo novamente, eu estava perdendo as bibliotecas React que estavam aparecendo em vermelho. seu comando está funcionando. 👍
Rifinio

2

Versões mais recentes de bibliotecas react-nativas, conforme explicado em postagens anteriores, e aqui apresentam alterações de compatibilidade importantes. Se você ainda não planeja atualizar para react-native-fs, pode forçar a instalação da versão anterior da biblioteca, por exemplo, com react-native-fs:

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

2

Consegui construir um debug, mas não consegui construir um arquivo.

React.xcodeprojResolvi esse problema arrastando encontrado em / node_modules / react-native / React para meu diretório raiz no Xcode e, em seguida, adicionando React como uma dependência de destino nas fases de compilação> dependências de destino.


Não há React.xcodeprojdentro /node_modules/react-native/React.
Andrew Koster,

@AndrewKoster Estou tendo o mesmo problema
Cecil Rodriguez,

@CecilRodriguez Consegui consertar isso ao compilar no Xcode, adicionando Cocoapods e adicionando React como um pod no Podfile. No entanto, quando tento usar a biblioteca compilada no react-native run-ios, recebo erros de compilação que não acontecem no Xcode. A completa falta de documentação relevante é frustrante.
Andrew Koster,

1
@Yossi Não, ainda não. Todas as tentativas que tentei não funcionaram.
Cecil Rodriguez

1
@Yossi Não, tentei o seu. Sem sorte. Tem algo a ver com meu módulo nativo, eu acho
Cecil Rodriguez

2

Após o React Native 0.60, esse problema geralmente é causado por uma biblioteca vinculada combinada com o novo recurso de 'vinculação automática'. Isso corrige para mim

Desvincular biblioteca antiga usando

$ react-native unlink react-native-fs

Atualizar integração de pods inteiramente usando

$ pod deintegrate && pod install

Agora recarregue seu espaço de trabalho e faça uma construção limpa.


1

Este erro apareceu para mim depois que executei o pod installcomando para as novas dependências. Junto com eles, o React também foi instalado. Portanto, provavelmente o Xcode foi confundido com o caminho. Removi essas linhas do PodFile e o erro desapareceu. Observe que aqueles removidos daqui já estavam vinculados no 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

Para mim, esse erro ocorreu quando adicionei um novo esquema / destino ( app.staging ) no aplicativo e instalei pods usando a instalação de pod.

Esse problema está ocorrendo porque os pods não são compartilhados para todos os destinos. Portanto, preciso adicionar o destino recém-adicionado ( app.staging ) dentro do Podfile .

Aqui está meu 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

Recebo esse erro em qualquer novo módulo que eu criar com o módulo create-react-native-module . Nenhuma das soluções postadas funcionou para mim.

O que funcionou para mim foi primeiro certificar-se de executar yarnna pasta de módulo recém-criada para criar node_modules/(esta etapa é provavelmente óbvia). Então, em XCode, selecione Produto -> Esquema -> React em vez da seleção padrão de MyModuleName.


1, é importante adicionar para outros novos no desenvolvimento de módulo que você não verá os outros esquemas até que crie um podfile válido e execute pod install. create-react-native-module não parece fazer isso para você. Me desligou por um tempo. Mas isso funcionou para mim depois que criei um podfile válido e executei a instalação.
Elliot Rodriguez

1

Vá para a pasta iOS em seu projeto e instale o pod -

$ pod install

Se você estiver recebendo algum erro na instalação do comando pod type-

$ xcode-select -p

O resultado deve ser - /Applications/Xcode.app/Contents/Developer

Se o caminho estiver incorreto, abra seu projeto iOS no Xcode e vá para: Xcode-> preferências-> ferramentas de linha de comando-> selecione Xcode

E instale novamente o pod, seu problema será corrigido.



0

Se você quiser fazer isso a partir de seu editor, abra também SMobile.xcscheme

E mudar parallelizeBuildables = "NO"


0

Para mim não funcionou nenhuma das soluções acima e abaixo está o que funcionou (eu já tinha verificado Parallelize Builde adicionado 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

Eu encontrei esse problema durante a atualização de 0.58.4 para a nova versão reac-nativa 0.60.4. Nada do que encontrei na internet me ajudou, mas consegui fazer funcionar:

Vá para as configurações de construção, procure por 'Caminhos de pesquisa de cabeçalho', selecione a entrada e pressione o botão DELETE.

Substituí esses valores e parece que eles voltaram aos padrões após a exclusão. Também o Cocoapods estava reclamando disso com mensagens no Terminal depois de 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

Encontrei esse problema depois de fazer um manual react-native linkde uma dependência que não suportava link automático em RN 0.59+

A solução foi selecionar o arquivo xcodeproj na pasta Bibliotecas no Xcode e, em seguida, em Build Settings, alterar Header Search Paths para adicionar estes dois (recursivos):

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

0

Se você deseja manter o Parallelise Build habilitado e evitar os problemas de cabeçalho ausentes, forneça uma etapa de pré-construção em seu esquema para colocar os cabeçalhos de reação na área de dados derivados. Observe que as configurações de compilação vêm do projeto React neste caso. Sim, não é uma coisa bonita, mas faz o trabalho e também economiza muito tempo das construções. A saída da etapa de pré-construção termina em prebuild.log. Os cabeçalhos exatos que você precisará copiar dependerão das dependências nativas da reação do seu projeto, mas você entenderá isso.

Editar Esquema => Construir

Obtenha o diretório de dados derivados das variáveis ​​de ambiente e copie os cabeçalhos de reação necessários.

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

O script é invocado durante uma limpeza de construção - o que não é o ideal. No meu caso, há uma variável env que muda, permitindo que eu saia do script mais cedo durante uma limpeza.

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

0

Você só precisa instalar o pod, se o arquivo pod existir, basta digitar

pod install

se não: então primeiro,

pod init

então,

pod install

no terminal. e você está pronto para ir.


-1

O que você pode fazer para acertar é:

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

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

Agora a biblioteca foi removida com sucesso e agora instale a lib novamente em seu projeto e desta vez vincule tudo manualmente. Às vezes, a vinculação automática causa esse erro.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.