React Native Crash Reporting mit Sentry einrichten
AI generated
RN
native
React Native · Sentry · Crash Reporting · Monitoring
React Native Crash Reporting mit Sentry einrichten
von der SDK-Installation bis zur symbolisierten Stacktrace

Ein Absturz, der nie in einem Dashboard auftaucht, wird nie behoben. Sentry Crash Reporting fängt JavaScript-Fehler und native iOS- und Android-Abstürze in React Native Apps gleichermaßen ab, symbolisiert die Stacktraces und macht sichtbar, was Nutzer wirklich erleben, bevor eine schlechte App-Store-Bewertung der erste Hinweis ist.

18 Min. Lesezeit @sentry/react-native · sentry-cli · Source Maps React Native 0.74+ · Expo · iOS · Android

1. Was Crash Reporting in React Native wirklich löst

Eine React Native App lebt in zwei Laufzeiten gleichzeitig: der JavaScript-Engine (Hermes oder JSC) und den nativen iOS- beziehungsweise Android-Schichten. Ein Fehler kann in beiden entstehen, aber ohne Sentry Crash Reporting sieht ein Entwicklerteam davon nichts. Der Nutzer sieht einen roten Bildschirm, schließt die App oder deinstalliert sie. Die Fehlermeldung, der Gerätetyp, die Betriebssystemversion und der genaue Codepfad bleiben unbekannt, es sei denn, jemand meldet den Vorfall manuell im Support.

Genau hier setzt Crash Reporting mit Sentry an: Ein installiertes SDK fängt unbehandelte JavaScript-Exceptions, Promise-Rejections und native Signalabbrüche automatisch ab, reichert sie mit Kontext an und sendet sie an ein zentrales Dashboard. Das Team erfährt in Minuten statt Wochen, dass ein neues Release auf bestimmten Android-Geräten abstürzt, und kann die genaue Zeile im Quellcode identifizieren, statt Symptome zu raten.

Der Unterschied zwischen einer App mit und ohne Sentry Crash Reporting zeigt sich am deutlichsten nach einem Release: Ohne Monitoring bemerkt man Probleme über sinkende Store-Bewertungen und Support-Tickets, oft Tage später. Mit Sentry erscheint ein Anstieg der Fehlerrate innerhalb von Minuten im Dashboard, verknüpft mit der genauen Release-Version, dem betroffenen Gerätemodell und dem Stacktrace, der direkt zur fehlerhaften Codezeile führt.

2. SDK-Setup: @sentry/react-native einrichten

Die Installation von @sentry/react-native beginnt mit dem Sentry-Wizard, der automatisch die native Konfiguration für iOS und Android anpasst, den Metro-Bundler-Hook für Source Maps registriert und die Basiskonfiguration in die App-Einstiegsdatei einträgt. Der Wizard ersetzt manuelle Bearbeitungen von AppDelegate.mm und MainApplication.kt, die in älteren Sentry-Versionen noch nötig waren.

Zentral ist der Aufruf Sentry.init() möglichst früh im App-Lebenszyklus, noch vor dem Rendern der Root-Komponente. Die DSN (Data Source Name) identifiziert das Sentry-Projekt, tracesSampleRate steuert die Performance-Sampling-Rate, und enableNative aktiviert die Verbindung zu den nativen Crash-Handlern von sentry-cocoa und sentry-android. Ohne diese native Kopplung würde Sentry Crash Reporting nur JavaScript-Fehler sehen, aber Abstürze in nativen Modulen komplett verpassen.


// App.tsx — initialize Sentry as early as possible in the app lifecycle
import * as Sentry from '@sentry/react-native';

Sentry.init({
  dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0',
  environment: __DEV__ ? 'development' : 'production',
  tracesSampleRate: 0.2,
  enableNative: true,
  enableAutoSessionTracking: true,
  release: 'my-app@2.4.0+42',
  beforeSend(event) {
    // Strip personally identifiable data before it leaves the device
    if (event.user) {
      delete event.user.email;
    }
    return event;
  },
});

export default Sentry.wrap(function App() {
  return <RootNavigator />;
});

3. Source Maps und lesbare JS-Stacktraces

Ein JavaScript-Bundle im Produktionsbuild ist minifiziert. Ohne Source Maps liefert Sentry Crash Reporting nur kryptische Zeilennummern in einer komprimierten Datei, keine Zuordnung zum tatsächlichen Quellcode. Der Sentry-Metro-Plugin erzeugt beim Bundlen automatisch Source Maps und lädt sie über sentry-cli hoch, verknüpft mit der exakten Release-Version und dem Build.

Entscheidend ist, dass die Release-Kennung im Client identisch mit der Release-Kennung ist, die beim Source-Map-Upload verwendet wird. Weicht sie ab, findet Sentry keine passende Zuordnung und zeigt weiterhin minifizierten Code an. Ein CI-Schritt, der Release-Erstellung, Source-Map-Upload und Deployment automatisch synchron hält, verhindert dieses häufige Fehlerbild zuverlässig.


#!/usr/bin/env bash
# Upload source maps for a production release before app store submission
set -euo pipefail

RELEASE="my-app@2.4.0+42"

sentry-cli releases new "$RELEASE"
sentry-cli releases files "$RELEASE" upload-sourcemaps \
  ./dist \
  --dist 42 \
  --rewrite

sentry-cli releases finalize "$RELEASE"
echo "Source maps uploaded and release finalized: $RELEASE"

4. Native Crashes: dSYM und ProGuard-Mapping

Native Abstürze entstehen oft in Drittanbieter-Bibliotheken, in nativen Modulen mit Speicherfehlern oder in Bridging-Code zwischen JavaScript und nativer Ebene. Damit Sentry Crash Reporting hier lesbare Stacktraces liefert, statt nur Speicheradressen, muss auf iOS-Seite die dSYM-Datei jedes Builds hochgeladen werden. Sie enthält die Debug-Symbole, die eine Adresse im kompilierten Binärcode einer Funktion und Zeile zuordnen.

Auf Android-Seite übernimmt das ProGuard- beziehungsweise R8-Mapping-File dieselbe Rolle für obfuskierten Code. Ohne dieses Mapping zeigt ein Absturzbericht nur umbenannte Klassen- und Methodennamen wie a.b.c, was die Fehlersuche praktisch unmöglich macht. Der Sentry-Gradle-Plugin lädt das Mapping-File bei jedem Release-Build automatisch hoch, sofern er korrekt in build.gradle eingebunden ist.


// ios/AppDelegate.mm — Sentry native SDK integration point for symbolicated crashes
// Xcode Build Phase "Upload Debug Symbols to Sentry" runs sentry-cli after archiving:
//   sentry-cli debug-files upload --include-sources ./MyApp.xcarchive.dSYM.zip
//
// Ensure Build Settings > Debug Information Format is "DWARF with dSYM File"
// for both Debug and Release configurations, otherwise no dSYM is produced.

Ein Stacktrace allein beantwortet selten die Frage, wie ein Nutzer in den fehlerhaften Zustand gelangt ist. Breadcrumbs protokollieren die letzten Aktionen vor einem Absturz: Navigations-Events, API-Aufrufe, Button-Klicks und Konsolen-Ausgaben. Sentry Crash Reporting sammelt viele dieser Breadcrumbs automatisch, etwa über die React-Navigation-Integration, die jeden Screen-Wechsel protokolliert.

Zusätzlich lassen sich benutzerdefinierte Breadcrumbs und Tags setzen, etwa die Nutzer-ID (pseudonymisiert), das Feature-Flag-Set oder der Warenkorb-Status in einer Shopping-App. Diese Anreicherung verwandelt einen isolierten Stacktrace in eine nachvollziehbare Geschichte: welcher Nutzer, welcher Zustand, welche Aktion unmittelbar vor dem Absturz.


// Enrich crash reports with custom breadcrumbs and user context
import * as Sentry from '@sentry/react-native';

function addToCart(product: Product) {
  Sentry.addBreadcrumb({
    category: 'cart',
    message: `Added product ${product.id} to cart`,
    level: 'info',
  });
  cartStore.add(product);
}

Sentry.setUser({ id: hashUserId(currentUser.id) });
Sentry.setTag('feature_flag.checkout_v2', 'enabled');

6. Release Health und Sessions

Neben einzelnen Abstürzen liefert Sentry Crash Reporting auch aggregierte Kennzahlen: die Crash-Free-Session-Rate zeigt, welcher Prozentsatz der App-Sitzungen ohne Absturz endete, aufgeschlüsselt nach Release-Version. Ein Rückgang dieser Rate nach einem Rollout ist ein zuverlässiges Frühwarnsignal, oft bevor Support-Tickets eintreffen.

Sessions werden automatisch getrackt, sobald enableAutoSessionTracking aktiviert ist. Für schrittweise Rollouts, etwa über Staged Rollouts im Play Store, lässt sich die Crash-Free-Rate pro Rollout-Stufe vergleichen, was eine datengestützte Entscheidung ermöglicht, ob der Rollout gestoppt oder fortgesetzt wird, statt sich auf Bauchgefühl zu verlassen.

7. Performance Tracing über Crash Reporting hinaus

Sentry Crash Reporting und Performance-Monitoring teilen sich dieselbe Infrastruktur. Mit tracesSampleRate aktiviertes Tracing misst App-Start-Zeiten, Navigations-Übergänge und die Dauer von Netzwerk-Requests, ohne zusätzliches SDK. Ein langsamer Screen-Übergang wird oft erst durch diese Traces sichtbar, während er in klassischem Crash Reporting unentdeckt bliebe.

Besonders wertvoll ist die Verknüpfung von Traces mit Fehlerereignissen: Ein Timeout bei einem API-Aufruf, der kurz darauf zu einem Absturz führt, erscheint im selben Dashboard als zusammenhängender Vorgang. Das verkürzt die Ursachenanalyse erheblich, weil Performance-Daten und Fehlerdaten nicht mehr in getrennten Tools zusammengeführt werden müssen.

8. sentry-cli in CI/CD-Pipelines integrieren

Manuelle Source-Map-Uploads und dSYM-Uploads sind fehleranfällig, weil sie leicht vergessen werden. Die robuste Lösung integriert sentry-cli direkt in die Release-Pipeline: Nach jedem erfolgreichen Build wird automatisch ein neues Sentry-Release angelegt, Source Maps und Debug-Symbole hochgeladen und der Release als deployed markiert.

Diese Automatisierung stellt sicher, dass Sentry Crash Reporting ab der ersten Minute nach Rollout vollständige Symbolisierung liefert, statt einer Lücke zwischen App-Store-Freigabe und manuellem Upload. Ein zusätzlicher CI-Schritt kann sogar prüfen, ob für jedes hochgeladene Bundle tatsächlich eine passende Source Map existiert, und den Build fehlschlagen lassen, falls nicht.


{
  "sentryCliConfig": {
    "org": "my-organization",
    "project": "my-app-react-native",
    "urlPrefix": "~/",
    "rewrite": true,
    "ignore": ["node_modules", "android", "ios"]
  }
}

// android/app/build.gradle — Sentry Gradle plugin uploads ProGuard/R8 mapping automatically
// apply plugin: "io.sentry.android.gradle"
//
// sentry {
//     autoUploadProguardMapping = true
//     includeProguardMapping = true
// }
//
// This runs during `./gradlew assembleRelease` and requires SENTRY_AUTH_TOKEN
// to be present as an environment variable in the CI job.

9. Sentry im Vergleich zu Bugsnag und Crashlytics

Sentry ist nicht die einzige Option für Crash Reporting in React Native, aber die Kombination aus offenem Ökosystem, kombiniertem Error- und Performance-Monitoring und ausgereifter React-Native-Integration macht sie zu einer naheliegenden Wahl für Teams, die über reines Crash Reporting hinaus wollen.

Kriterium Sentry Bugsnag Firebase Crashlytics
Performance-Tracing integriert Ja, gleiche Plattform Getrennt, Zusatzprodukt Separates Firebase-Performance-SDK
Self-Hosting möglich Ja, Open Source Nein, nur SaaS Nein, nur Google Cloud
Source-Map-Handling Automatisiert über Metro-Plugin Manuell via CLI Kein natives JS-Sourcemap-Konzept
Kostenmodell Nach Event-Volumen Nach Nutzeranzahl Kostenlos im Basis-Tarif
Breadcrumb-Anreicherung Sehr flexibel, viele Integrationen Solide, weniger Integrationen Eingeschränkt, Logcat-fokussiert

Firebase Crashlytics punktet mit einem kostenlosen Einstieg und tiefer Google-Play-Integration, bleibt aber bei Source-Map-Handling und flexibler Kontext-Anreicherung hinter Sentry Crash Reporting zurück. Bugsnag ist funktional näher an Sentry, verlangt aber ein separates Produkt für Performance-Daten. Für Teams, die Crashs, Performance und Releases in einem Werkzeug zusammenführen wollen, bleibt Sentry meist die pragmatischste Wahl.

Mironsoft

React Native Monitoring, Crash Reporting und Release-Automatisierung

Abstürze finden, bevor Nutzer sie melden?

Wir richten Sentry Crash Reporting in eurer React Native App vollständig ein, inklusive Source Maps, nativer Symbolisierung und CI-Integration, damit jeder Absturz sofort nachvollziehbar ist.

Sentry-Setup

SDK-Integration, Source Maps und native Symbolisierung für iOS und Android

CI/CD-Integration

Automatisierte Releases, sentry-cli-Uploads und Mapping-Verifikation

Monitoring-Beratung

Release Health, Alerting-Regeln und Dashboard-Aufbau für euer Team

10. Zusammenfassung

Sentry Crash Reporting verwandelt unsichtbare Abstürze in nachvollziehbare, priorisierbare Fehlerberichte. Die SDK-Installation mit Sentry.init() fängt JavaScript-Fehler ab, die native Kopplung über sentry-cocoa und sentry-android erweitert die Abdeckung auf native Abstürze. Source Maps und dSYM-Uploads sorgen dafür, dass Stacktraces lesbar bleiben, statt minifizierten Code oder Speicheradressen zu zeigen.

Breadcrumbs und Kontext-Tags machen aus einem isolierten Fehler eine nachvollziehbare Nutzergeschichte, Release Health liefert aggregierte Kennzahlen für Rollout-Entscheidungen, und die Integration von sentry-cli in die CI/CD-Pipeline stellt sicher, dass Symbolisierung ab der ersten Sekunde nach Rollout funktioniert. Wer diese Bausteine konsequent kombiniert, reduziert die Zeit zwischen Absturz und Fix von Tagen auf Minuten.

React Native Crash Reporting mit Sentry — Das Wichtigste auf einen Blick

SDK-Setup

Sentry.init() so früh wie möglich, enableNative: true koppelt JS- und native Crash-Handler.

Symbolisierung

Source Maps für JS, dSYM für iOS, ProGuard/R8-Mapping für Android – ohne diese drei bleiben Stacktraces unlesbar.

Kontext

Breadcrumbs, Tags und Release Health verwandeln einen Stacktrace in eine nachvollziehbare Geschichte.

Automatisierung

sentry-cli in der CI/CD-Pipeline verhindert vergessene Uploads und Symbolisierungslücken.

11. FAQ: React Native Crash Reporting mit Sentry

1Was ist Sentry Crash Reporting?
Die Kombination aus @sentry/react-native SDK und Dashboard, die JS- und native Fehler erfasst, symbolisiert und mit Kontext anreichert.
2Reicht JS-Error-Handling nicht aus?
Nein, native Abstürze in Bibliotheken oder Bridging-Code werden nur mit nativer Sentry-Kopplung erfasst.
3Wie lange dauert das Setup?
Basisinstallation meist unter einer Stunde, vollständige CI-Integration einen halben bis ganzen Tag.
4Warum unlesbare Stacktraces?
Fehlender Source-Map-, dSYM- oder ProGuard-Upload, oder abweichende Release-Kennung zwischen Client und Upload.
5Was sind Breadcrumbs?
Ein chronologisches Protokoll der letzten Nutzeraktionen vor einem Absturz, hilfreich zur Rekonstruktion des Fehlerpfads.
6Was ist Release Health?
Die Crash-Free-Session-Rate pro Release, ein Frühwarnsignal nach jedem Rollout.
7Ersetzt Sentry ein Performance-Tool?
Oft ja, da Performance-Tracing und Crash Reporting dieselbe Plattform teilen.
8Wie schütze ich personenbezogene Daten?
Über beforeSend Felder entfernen und Datenscrubbing in den Sentry-Projekteinstellungen aktivieren.
9Muss sentry-cli manuell laufen?
Nein, immer in der CI/CD-Pipeline automatisieren, um Symbolisierungslücken zu vermeiden.
10Funktioniert es mit Expo?
Ja, über das Sentry Expo Plugin und EAS Build wird der Upload automatisch im Build-Prozess erledigt.