Cette page n'est pas encore disponible en français, sa traduction est en cours. Si vous avez des questions ou des retours sur notre projet de traduction actuel, n'hésitez pas à nous contacter.
Cette page n'est pas encore disponible en français, sa traduction est en cours. Si vous avez des questions ou des retours sur notre projet de traduction actuel, n'hésitez pas à nous contacter.
Enable React Native Crash Reporting and Error Tracking to get comprehensive crash reports and error trends with Real User Monitoring. With this feature, you can access:
Aggregated React Native crash dashboards and attributes
Symbolicated React Native (JavaScript and native iOS or Android) crash reports
Trend analysis with React Native Error Tracking
In order to symbolicate your stack traces, manually upload your source maps and native debug symbols into Datadog.
Debug symbols are used to deobfuscate stack traces, which helps in debugging errors. Using a unique build ID that gets generated, Datadog automatically matches the correct stack traces with the corresponding debug symbols. This ensures that regardless of when the debug symbols were uploaded (either during pre-production or production builds), the correct information is available for efficient QA processes when reviewing crashes and errors reported in Datadog.
For React Native applications, the matching of stack traces and source maps relies on a combination of the service, version, bundle_name, and platform fields. Out of all source maps that match with these fields, Datadog uses the one with the highest build_number value.
In order to make your application’s size smaller, its code is minified when it is built for release. To link errors to your actual code, you need to upload the following symbolication files:
JavaScript source maps for your iOS JavaScript bundle
JavaScript source maps for your Android JavaScript bundle
dSYMs for your iOS native code
Proguard mapping files if you have enabled code obfuscation for your Android native code
To set your project up to send the symbolication files automatically, run npx datadog-react-native-wizard.
To specify a different service name, add the following code to your android/app/build.gradle file, before the apply from: "../../node_modules/@datadog/mobile-react-native/datadog-sourcemaps.gradle" line:
Use the DATADOG_RELEASE_VERSION environment variable to specify a different release version for your source maps, starting from @datadog/mobile-react-native@2.3.5 and @datadog/datadog-ci@v2.37.0.
When the SDK is initialized with a version suffix, you must manually override the release version in order for the source map and build versions to match.
To verify your React Native Crash Reporting and Error Tracking configuration, you need to issue an error in your application and confirm that the error appears in Datadog.
To test your implementation:
Run your application on a simulator, emulator, or a real device. If you are running on iOS, ensure that the debugger is not attached. Otherwise, Xcode captures the crash before the Datadog SDK does.
Execute some code containing an error or crash. For example:
constthrowError=()=>{thrownewError("My Error")}
For obfuscated error reports that do not result in a crash, you can verify symbolication and deobfuscation in Error Tracking.
For crashes, after the crash happens, restart your application and wait for the React Native SDK to upload the crash report in Error Tracking.
To make sure your source maps are correctly sent and linked to your application, you can also generate crashes with the react-native-performance-limiter package.
Install it with yarn or npm then re-install your pods:
yarn add react-native-performance-limiter # or npm install react-native-performance-limiter(cd ios && pod install)
If using datadog-react-native-wizard did not succeed or if you don’t want to upload your symbolication files automatically on each release, follow the next steps to symbolicate crash reports.
Automatically on each release build (React Native >= 0.69)
Manually uploading your source maps on every release build takes time and is prone to errors. Datadog recommends automatically sending your source maps every time you run a release build.
Create a script file named datadog-sourcemaps.sh at the root of your project containing the following:
#!/bin/sh
set -e
DATADOG_XCODE="../node_modules/.bin/datadog-ci react-native xcode"/bin/sh -c "$DATADOG_XCODE"
This script runs a command that takes care of uploading the source maps with all the correct parameters. For more information, see the datadog-ci documentation.
Open your .xcworkspace with Xcode, then select your project > Build Phases > Bundle React Native code and images. Edit the script to look like the following:
set -e
WITH_ENVIRONMENT="../node_modules/react-native/scripts/xcode/with-environment.sh"# Add these two linesREACT_NATIVE_XCODE="./datadog-sourcemaps.sh"exportSOURCEMAP_FILE=$DERIVED_FILE_DIR/main.jsbundle.map
# Edit the next line/bin/sh -c "$WITH_ENVIRONMENT$REACT_NATIVE_XCODE"
For the upload to work, you need to provide your Datadog API key. If you use a command-line tool or an external service, you can specify it as a DATADOG_API_KEY environment variable. If you run the build from Xcode, create a datadog-ci.json file at the root of your project containing the API key:
{"apiKey":"<YOUR_DATADOG_API_KEY>"}
You can also specify the Datadog site (such as datadoghq.eu) as a DATADOG_SITE environment variable, or as a datadogSite key in your datadog-ci.json file.
Automatically on each release build (React Native < 0.69)
Open your .xcworkspace with Xcode, then select your project > Build Phases > Bundle React Native code and images. Edit the script to look like the following:
set -e
exportNODE_BINARY=node
exportSOURCEMAP_FILE=$DERIVED_FILE_DIR/main.jsbundle.map
../node_modules/.bin/datadog-ci react-native xcode
This script runs a command that takes care of uploading the source maps with all the correct parameters. For more information, see the datadog-ci documentation.
For the upload to work, you need to provide your Datadog API key. If you use a command-line tool or an external service, you can specify it as a DATADOG_API_KEY environment variable. If you run the build from Xcode, create a datadog-ci.json file at the root of your project containing the API key:
{"apiKey":"<YOUR_DATADOG_API_KEY>"}
You can also specify the Datadog site (such as datadoghq.eu) as a DATADOG_SITE environment variable, or as a datadogSite key in your datadog-ci.json file.
Manually on each build
To output a source map, you need to edit the Xcode build phase “Bundle React Native Code and Images”.
Open the ios/YourAppName.xcworkspace file in Xcode.
In the left panel, select the “File” icon and click on your project.
In the central panel, select “Build Phases” from the top bar.
Change the script by adding this after the set -e line:
set -e
exportSOURCEMAP_FILE=./build/main.jsbundle.map # <- add this line to output source maps# leave the rest of the script unchanged
Moving forward, you can find the source maps for your bundle on every iOS build.
To find the path to your bundle file from Xcode, display the Report Navigator on Xcode and filter by BUNDLE_FILE for its location.
The usual location is ~/Library/Developer/Xcode/DerivedData/YourAppName-verylonghash/Build/Intermediates.noindex/ArchiveIntermediates/YourAppName/BuildProductsPath/Release-iphoneos/main.jsbundle, where YourAppName is the name of your app, and verylonghash is a 28 letter hash.
To upload the source maps, run this from your React Native project:
exportDATADOG_API_KEY=# fill with your API keyexportSERVICE=com.myapp # replace by your service nameexportVERSION=1.0.0 # replace by the version of your app in XcodeexportBUILD=100# replace by the build of your app in XcodeexportBUNDLE_PATH=# fill with your bundle pathyarn datadog-ci react-native upload --platform ios --service $SERVICE --bundle $BUNDLE_PATH --sourcemap ./build/main.jsbundle.map --release-version $VERSION --build-version $BUILD
Manually on each build (with Hermes for React Native < 0.71)
There is a bug in React Native versions up to 0.71 that generates an incorrect source map when using Hermes.
To resolve this, you need to add more lines at the very end of the build phase to generate a correct source map file.
Edit your build phase like so:
set -e
exportSOURCEMAP_FILE=./build/main.jsbundle.map # <- add this line to output source maps# For React Native 0.70, you need to set USE_HERMES to true for source maps to be generatedexportUSE_HERMES=true# keep the rest of the script unchanged# add these lines to compose the packager and compiler source maps into one fileREACT_NATIVE_DIR=../node_modules/react-native
if[ -f "$REACT_NATIVE_DIR/scripts/find-node-for-xcode.sh"];thensource"$REACT_NATIVE_DIR/scripts/find-node-for-xcode.sh"else# Before RN 0.70, the script was named find-node.shsource"$REACT_NATIVE_DIR/scripts/find-node.sh"fisource"$REACT_NATIVE_DIR/scripts/node-binary.sh""$NODE_BINARY""$REACT_NATIVE_DIR/scripts/compose-source-maps.js""$CONFIGURATION_BUILD_DIR/main.jsbundle.map""$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/main.jsbundle.map" -o "../$SOURCEMAP_FILE"
To upload the source map, run this from your React Native project root:
exportDATADOG_API_KEY=# fill with your API keyexportSERVICE=com.myapp # replace by your service nameexportVERSION=1.0.0 # replace by the version of your app in XcodeexportBUILD=100# replace by the build of your app in XcodeexportBUNDLE_PATH=# fill with your bundle pathyarn datadog-ci react-native upload --platform ios --service $SERVICE --bundle $BUNDLE_PATH --sourcemap ./build/main.jsbundle.map --release-version $VERSION --build-version $BUILD
For the upload to work, you need to provide your Datadog API key. You can specify it as a DATADOG_API_KEY environment variable, or create a datadog-ci.json file at the root of your project containing the API key:
{"apiKey":"<YOUR_DATADOG_API_KEY>"}
You can also specify the Datadog site (such as datadoghq.eu) as a DATADOG_SITE environment variable, or as a datadogSite key in your datadog-ci.json file.
Automatically on each release build (React Native < 0.71)
In your android/app/build.gradle file, add the following after the apply from: "../../node_modules/react-native/react.gradle" line:
For the upload to work, you need to provide your Datadog API key. You can specify it as a DATADOG_API_KEY environment variable, or create a datadog-ci.json file at the root of your project containing the API key:
{"apiKey":"<YOUR_DATADOG_API_KEY>"}
You can also specify the Datadog site (such as datadoghq.eu) as a DATADOG_SITE environment variable, or as a datadogSite key in your datadog-ci.json file.
Manually on each build
On Android, the source map file is located at android/app/build/generated/sourcemaps/react/release/index.android.bundle.map.
The bundle file location depends on your React Native (RN) and Android Gradle Plugin (AGP) versions:
RN >= 0.71 and AGP >= 7.4.0: android/app/build/generated/assets/createBundleReleaseJsAndAssets/index.android.bundle
RN >= 0.71 and AGP < 7.4.0: android/app/build/ASSETS/createBundleReleaseJsAndAssets/index.android.bundle
The Android Gradle Plugin version is specified in the android/build.gradle file under com.android.tools.build:gradle, for instance: classpath("com.android.tools.build:gradle:7.3.1").
If your application has more comprehensive variants, replace release by your variant’s name in the paths.
If you specified a bundleAssetName in your React config in android/app/build.gradle, replace index.android.bundle by its value.
After running your build, upload your source map by running this from your React Native project root:
exportDATADOG_API_KEY=# fill with your API keyexportSERVICE=com.myapp # replace by your service nameexportVERSION=1.0.0 # replace by the versionName from android/app/build.gradleexportBUILD=100# replace by the versionCode from android/app/build.gradleexportBUNDLE_PATH=android/app/build/generated/assets/react/release/index.android.bundle
exportSOURCEMAP_PATH=android/app/build/generated/sourcemaps/react/release/index.android.bundle.map
yarn datadog-ci react-native upload --platform android --service $SERVICE --bundle $BUNDLE_PATH --sourcemap $SOURCEMAP_PATH --release-version $VERSION --build-version $BUILD
If you are still unsure, you can see if running (cd android && ./gradlew tasks --all) | grep minifyReleaseWithR8 returns anything. If so, minification is enabled.
Manually on each build
In your android/app/build.gradle file, add the latest version of the plugin and configure it at the top of the file:
plugins{id("com.datadoghq.dd-sdk-android-gradle-plugin")version"x.y.z"}datadog{checkProjectDependencies="none"// this is needed in any case for React Native projects
}
For the upload to work, you need to provide your Datadog API key. You can specify it as a DATADOG_API_KEY environment variable, or create a datadog-ci.json file at the root of your project containing the API key:
{"apiKey":"<YOUR_DATADOG_API_KEY>"}
You can also specify the Datadog site (such as datadoghq.eu) as a DATADOG_SITE environment variable, or as a datadogSite key in your datadog-ci.json file.
For more information, see the Datadog Android SDK Gradle Plugin.
To run the plugin after a build run (cd android && ./gradlew app:uploadMappingRelease).
Automate the upload on each build
Install the plugin like in the previous step.
Find the loop on applicationVariants in the android/app/build.gradle file. It should look like applicationVariants.all { variant ->.