Se você compilar seu aplicativo React Native com o EAS Build, a Continuous Native Generation (CNG) do Expo gerará novamente suas pastas android/ e ios/ do zero em cada etapa de expo prebuild — tanto localmente quanto nos servidores de compilação do EAS. Isso significa que um arquivo newrelic.properties adicionado manualmente ou uma fase de compilação Run Script do Xcode adicionada manualmente são apagados na próxima compilação.
O plug-in de configuração newrelic-react-native-agent resolve isso regenerando a configuração de build do New Relic a cada prebuild, para que o upload do arquivo de mapeamento e do source map do Android e o upload do dSYM e do source map do iOS continuem funcionando em todos os builds do EAS. O plug-in lê as credenciais das variáveis de ambiente no momento do build e nunca faz o commit delas no seu repositório.
Dica
Esta página pressupõe que você já instalou o agente do React Native e adicionou o plug-in de configuração ao seu app.json ou app.config.js, conforme descrito em Integrar com o Expo. Isso requer uma versão recente do newrelic-react-native-agent — verifique as versões do GitHub do pacote se as opções de plug-in abaixo ainda não estiverem disponíveis.
Antes de você começar
Obtenha o seguinte da mesma conta do New Relic:
- Uma chave de API do usuário.
- Seu token do aplicativo Android e/ou iOS (o mesmo token que você passa para
NewRelic.startAgent()). Se você lançar para ambas as plataformas, precisará de um token por plataforma.
Definir variáveis de ambiente do EAS
Registre sua chave de API de usuário e token(s) do aplicativo como variáveis de ambiente do EAS, com escopo para os ambientes com os quais você compila:
$eas env:create --environment production --name NEWRELIC_USER_API_KEY --value <YOUR_USER_API_KEY> --visibility sensitive$eas env:create --environment production --name NEWRELIC_ANDROID_APP_TOKEN --value <YOUR_ANDROID_APP_TOKEN> --visibility sensitive$eas env:create --environment production --name NEWRELIC_IOS_APP_TOKEN --value <YOUR_IOS_APP_TOKEN> --visibility sensitiveImportante
Não use --visibility secret. O EAS reserva variáveis de visibilidade secreta para seu próprio sistema de credenciais, portanto, o EAS nunca as expõe como process.env para os scripts de compilação — o plug-in de configuração não as verá e ignorará silenciosamente a gravação do arquivo de propriedades do Android ou das credenciais da fase de compilação do iOS. Use plaintext ou sensitive em vez disso.
O EAS Build resolve as variáveis plaintext/sensitive antes de executar prebuild, independentemente de a compilação ser executada nos servidores do EAS ou localmente com eas build --local.
Android: upload automático de arquivo de mapeamento e source map
Sem nenhuma configuração extra, o plug-in lê sua chave de API de usuário de NEWRELIC_USER_API_KEY e o token do aplicativo Android de NEWRELIC_ANDROID_APP_TOKEN, e os grava em android/app/newrelic.properties em cada pré-compilação:
{ "name": "my app", "plugins": ["newrelic-react-native-agent"]}Essas propriedades são o que as tarefas Gradle newrelicMapUploadRelease e newrelicReactNativeSourceMapUploadRelease do agente leem para autenticar o upload do seu arquivo de mapeamento do ProGuard/R8 e do source map do React Native após cada build de release. Para saber mais sobre como esse upload funciona (e como fazer o upload manualmente, se necessário), consulte Relatório de erros de JavaScript do React Native.
Se apenas uma das duas variáveis de ambiente estiver definida, o plug-in ainda grava essa única propriedade, e a tarefa do Gradle registra no log qual delas está faltando, em vez de causar falha na compilação. Se nenhuma estiver definida, o plug-in deixa newrelic.properties intocado e ambas as tarefas ignoram o upload com uma mensagem do log.
Use nomes de variáveis de ambiente personalizados (Android)
Para obter a chave e o token de variáveis de ambiente com nomes diferentes, passe-os explicitamente:
{ "name": "my app", "plugins": [ [ "newrelic-react-native-agent", { "android": { "apiKeyEnvName": "MY_NR_USER_API_KEY", "appTokenEnvName": "MY_NR_ANDROID_APP_TOKEN" } } ] ]}iOS: upload automático de dSYM e source map
Ao contrário do Android, os scripts de upload de source map do dSYM e do React Native (run-symbol-tool e upload-react-native-sourcemap, da pasta dsym-upload-tools) não vêm incluídos no CocoaPod NewRelicAgent e normalmente exigem uma fase de compilação Run Script adicionada manualmente no Xcode — o que não sobrevive ao expo prebuild regenerando o ios/. Em cada pré-compilação, em vez disso, o plug-in:
- Copia ambos os scripts para
ios/dsym-upload-tools. - Adiciona uma fase de build Run Script chamada "Upload dSYMs and Source Maps to New Relic" (após "Bundle React Native code and images") que os invoca, lendo as credenciais de variáveis de ambiente no momento do build — o script gerado apenas faz referência às credenciais pelo nome e nunca as grava em um arquivo.
- Garante que a fase "Bundle React Native code and images" exporte
SOURCEMAP_FILE, já que o template padrão do Expo não o define e, caso contrário, o Expo não geraria o source map.
Sem configuração extra, a fase de build lê o token do seu aplicativo iOS de NEWRELIC_IOS_APP_TOKEN e a sua chave de API de usuário de NEWRELIC_USER_API_KEY (compartilhada com o padrão do Android):
{ "name": "my app", "plugins": ["newrelic-react-native-agent"]}Para obter contexto sobre o que esses scripts fazem e como o upload de dSYM funciona fora do Expo, consulte Upload de dSYMs.
Dica
Ambos os scripts são executados apenas para builds Release e ignoram builds de simulador por padrão. Para testar o caminho de upload do source map em um simulador, defina NEWRELIC_SOURCEMAP_ALLOW_SIMULATOR=true.
Use nomes de variáveis de ambiente personalizados (iOS)
Para obter o token e a chave de variáveis de ambiente com nomes diferentes, passe-os explicitamente:
{ "name": "my app", "plugins": [ [ "newrelic-react-native-agent", { "ios": { "appTokenEnvName": "MY_NR_IOS_APP_TOKEN", "apiKeyEnvName": "MY_NR_USER_API_KEY" } } ] ]}Verifique o upload
Após executar uma compilação do EAS, verifique os logs de compilação de cada plataforma:
- Android: procure as tarefas
newrelicMapUploadReleaseenewrelicReactNativeSourceMapUploadReleasedo Gradle no log. Uma execução bem-sucedida informa que o arquivo de mapeamento e o source map foram encontrados e enviados, sem avisos de configuração ausente. - iOS: procure a etapa do script de execução “Upload dSYMs and Source Maps to New Relic”. Se uma credencial estiver ausente, ele registrará qual delas e ignorará esse upload (por exemplo,
NEWRELIC_IOS_APP_TOKEN not set, skipping...) em vez de causar falha no build. Quando as credenciais estão presentes, ele registra que está processando os dSYMs e o source map e fazendo o upload deles para o New Relic.
Assim que uma compilação for bem-sucedida, confirme se o source map realmente chegou ao New Relic verificando Listar e excluir source maps do React Native.