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.

Saiba mais sobre linhas do tempo e alternativas de suporte.

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:

  1. 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'
    
  2. Execute pod install a partir da iOS pasta.

  3. 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"
    
  4. 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

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.

  1. Verifique se todos os appcenter pacotes usam a mesma versão principal. Atualize-os com npm install ou yarn se necessário.

  2. Vá para a pasta ios do projeto e remova Podfile.lock e a pasta Pods .

  3. Execute pod install --repo-update em sua pasta ios .

  4. 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 linke 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.

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

  1. Abra o Podfile e substitua as dependências do App Center na seguinte linha:

    use_native_modules!
    
  2. 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:

  1. npm uninstall --save appcenter appcenter-analytics appcenter-crashes para desinstalar pacotes antigos do App Center.

  2. npm install --save-exact appcenter appcenter-analytics appcenter-crashes para instalar os pacotes mais recentes do App Center.

  3. pod repo update para garantir que o repositório de especificações do CocoaPods esteja atualizado.

  4. 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.