Solução de problemas do SDK do React Native
Importante
O Visual Studio App Center está programado para ser desativado em 31 de março de 2025. Embora você possa continuar a usar o Visual Studio App Center até que ele seja totalmente desativado, há várias alternativas recomendadas para as quais você pode considerar a migração.
Arquivo 'React/RCTDefines.h' não encontrado
Esse erro aparece quando as bibliotecas principais do RN não são referenciadas corretamente, o que pode ser causado por diferentes tipos de problemas de integração ou vinculação. Geralmente, isso acontece quando você tem suas dependências vinculadas usando o caminho relativo em um podfile, em vez de estaticamente em um projeto.
Nosso script de vinculação dá suporte apenas à maneira padrão de vincular pods, portanto, para resolve o problema:
Substitua as dependências em seu
Podfile
por caminhos de vinculação relativos:Antes:
pod 'AppCenter/Analytics', '~> 1.14.0' pod 'AppCenter/Crashes', '~> 1.14.0' pod 'AppCenterReactNativeShared', '~> 1.13.0'
Após:
pod 'appcenter', path: '../node_modules/appcenter/ios' pod 'appcenter-analytics', path: '../node_modules/appcenter-analytics/ios' pod 'appcenter-crashes', path: '../node_modules/appcenter-crashes/ios'
Execute
pod install
a partir daiOS
pasta.Dentro do AppDelegate.m, substitua as importações:
Antes:
#import <AppCenterReactNative/AppCenterReactNative.h> #import <AppCenterReactNativeAnalytics/AppCenterReactNativeAnalytics.h> #import <AppCenterReactNativeCrashes/AppCenterReactNativeCrashes.h>
Após:
#import "AppCenterReactNative.h" #import "AppCenterReactNativeAnalytics.h" #import "AppCenterReactNativeCrashes.h"
Remova as dependências do AppCenter do projeto (clique com o botão direito do mouse na dependência > Remover dependência).
- Selecione <YOUR_APP> ->Bibliotecas e remova os próximos arquivos:
AppCenterReactNative.xcodeproj
AppCenterReactNativeAnalytics.xcodeproj
AppCenterReactNativeCrashes.xcodeproj
- Abra as configurações do projeto e, na guia Geral , na seção Estruturas e Bibliotecas Vinculadas , remova novos itens que referenciam bibliotecas de destino removidas na etapa anterior:
libAppCenterReactNative.a
libAppCenterReactNativeAnalytics.a
libAppCenterReactNativeCrashes.a
- Modifique caminhos de pesquisa de cabeçalho para remover cabeçalhos dos projetos de plug-ins do AppCenter React Native. Abra as configurações do projeto e, na guia Configurações de Build , na seção Caminhos de Pesquisa de Cabeçalho , remova os seguintes locais para arquivos de cabeçalho:
$(SRCROOT)/../node_modules/appcenter/ios/AppCenterReactNative
$(SRCROOT)/../node_modules/appcenter-analytics/ios/AppCenterReactNativeAnalytics
$(SRCROOT)/../node_modules/appcenter-crashes/ios/AppCenterReactNativeCrashes
- Selecione <YOUR_APP> ->Bibliotecas e remova os próximos arquivos:
React Native comando link não reconhecido
Se você tiver yarn
instalado em seu computador, react-native init {myapp}
inicializará seu aplicativo e instalará dependências usando yarn
em vez de npm
. Se você vir a seguinte mensagem de erro ao executar react-native link
, as chances são de que as dependências do npm install {package}
App Center sejam instaladas em vez de yarn add {package}
para que npm
e yarn
sejam misturadas durante a instalação.
Command `link` unrecognized. Make sure that you have run `npm install` and that you are inside a react-native project.
Nesse caso, execute npm install
e tente react-native link
novamente.
Erro de build, como o arquivo 'AppCenterCrashes/MSACErrorReport.h' não encontrado
React-Native 0,60 e superior
A causa provável é o conflito entre as principais versões do pacote devido a uma alteração interruptiva em nosso SDK da Apple.
Verifique se todos os
appcenter
pacotes usam a mesma versão principal. Atualize-os comnpm install
ouyarn
se necessário.Vá para a pasta ios do projeto e remova Podfile.lock e a pasta Pods .
Execute
pod install --repo-update
em sua pasta ios .Verifique se Podfile.lock contém
appcenter
dependências da mesma versão principal.
React Native inferior a 0,60
Uma causa possível é ao executar react-native link
sem CocoaPods instalado.
Para confirmar a causa, execute react-native link
e nos logs, marcar para a seguinte linha:
Could not configure AppCenter for iOS. Error Reason - spawn pod ENOENT
Essa linha está localizada na seguinte seção dos logs:
Added code to initialize iOS AppCenter SDK in ios/TestApp/AppDelegate.m
Installing Cocoapods dependencies...
Could not configure AppCenter for iOS. Error Reason - spawn pod ENOENT
rnpm-install info Platform 'ios' module appcenter-analytics is already linked
rnpm-install info Platform 'android' module appcenter-analytics is already linked
Se você vir esse erro, verifique se o pod
comando do CocoaPods está disponível na variável de ambiente PATH do sistema.
Depois de corrigir a instalação do CocoaPods , execute pod install
na pasta ios para corrigir o projeto.
CocoaPods não consegue encontrar uma especificação para AppCenterReactNativeShared durante o link react-native
Se você vir a seguinte mensagem de erro CocoaPods durante react-native link
, as chances são de que o clone local (~/.cocoapods/repos
em seu computador) do repositório de especificações CocoaPods não esteja atualizado.
Analyzing dependencies [!] Unable to find a specification for AppCenterReactNativeShared (~> {version})
Execute pod repo update
para atualizar o repositório de especificações e tente react-native link
novamente. Para obter mais informações sobre os comandos CocoaPods, consulte Referência da linha de comando CocoaPods.
Como atualizar o aplicativo usando o SDK do App Center de React Native 0.59 para 0.60
Para atualizar React Native para a versão 0.60.0, use o seguinte comando:
react-native upgrade 0.60.0
Observação
Se durante uma atualização você receber esse erro Command failed: git status -s fatal: not a git repository (or any of the parent directories): .git
, execute as próximas etapas:
git init
git add .
git commit -m "Upgrade react-native"
Depois de concluir a atualização, você poderá remover o .git
diretório.
Atualizar React Native iOS
Abra o Podfile e substitua as dependências do App Center na seguinte linha:
use_native_modules!
Execute o comando a seguir:
pod repo update
Como atualizar React Native SDK para a versão mais recente
Se você já integrou nosso SDK ao aplicativo e deseja atualizar para uma versão mais recente do SDK, siga as seguintes etapas para atualizar:
npm uninstall --save appcenter appcenter-analytics appcenter-crashes
para desinstalar pacotes antigos do App Center.npm install --save-exact appcenter appcenter-analytics appcenter-crashes
para instalar os pacotes mais recentes do App Center.pod repo update
para garantir que o repositório de especificações do CocoaPods esteja atualizado.react-native link
.
Dica
Se você vir uma mensagem de erro semelhante à seguinte mensagem de erro CocoaPods durante react-native link
, exclua o Podfile.lock gerado automaticamente na pasta ios e execute react-native link
novamente.
[!] Unable to satisfy the following requirements: - `AppCenter/Core (= 1.0.0)` required by `Podfile.lock` - `AppCenter/Core (= 1.0.0)` required by `AppCenter/Crashes (1.0.0)` - `AppCenter/Core (= 1.0.0)` required by `AppCenter/Analytics (1.0.0)` - `AppCenter/Core (= 1.0.1)` required by `AppCenterReactNativeShared (1.0.1)`
Migração do jCenter para o Maven Central
Devido ao encerramento do suporte do jCenter , todos os assemblies foram movidos para o repositório Maven Central.
Para usar o App Center, você precisa adicionar mavenCentral()
ao repositório no arquivo Gradle, como abaixo:
repositories {
google()
mavenCentral()
}
Proteger o valor do segredo do App Center
O app_secret
é um identificador do seu aplicativo, é necessário saber a qual aplicativo o tráfego se aplica e não pode ser usado para recuperar ou editar dados existentes. Se você app_secret
estiver exposto, o maior risco será enviar dados inválidos para seu aplicativo, mas isso não terá efeito sobre a segurança dos dados.
Para recuperar dados confidenciais, você precisaria fornecer um token de aplicativo/usuário, que é gerado no lado do cliente. Não há como tornar os dados do lado do cliente completamente seguros.
Você pode melhorar a segurança do aplicativo usando uma variável de ambiente para injetar o segredo do aplicativo em seu código. Dessa forma, o segredo não está visível em seu código.