crash-instrumentation
Set up crash instrumentation with actionable context. Use when configuring crash capture, error boundaries, or breadcrumb…
Configure crash symbolication for readable stack traces. Use when setting up dSYMs (iOS), ProGuard/R8 mappings (Android), or source maps (React Native).
$ npx -y skills add nexus-labs-automation/mobile-observability --skill symbolication-setup --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/symbolication-setupContext preview
The summary Claude sees to decide when to auto-load this skill.
Configure crash symbolication for readable stack traces. Use when setting up dSYMs (iOS), ProGuard/R8 mappings (Android), or source maps (React Native).
name: symbolication-setup description: Configure crash symbolication for readable stack traces. Use when setting up dSYMs (iOS), ProGuard/R8 mappings (Android), or source maps (React Native). triggers: - "configure dSYMs" - "crash symbols" - "ProGuard mappings" - "readable stack traces" - "set up symbolication" - "source maps upload" priority: 1
Make crash stack traces readable instead of memory addresses or minified code.
Without symbolication:
0x104a3b2c8 <redacted> + 123
With symbolication:
PaymentViewController.processPayment() line 47
**Unsymbolicated crashes are useless for debugging.**
**Xcode Build Phase Script:**
# Add to Build Phases → New Run Script Phase
if [ "${CONFIGURATION}" = "Release" ]; then
# Sentry
sentry-cli upload-dif --include-sources "${DWARF_DSYM_FOLDER_PATH}"
# Or Crashlytics
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" \
-gsp "${PROJECT_DIR}/GoogleService-Info.plist" \
-p ios "${DWARF_DSYM_FOLDER_PATH}"
fi**Find missing dSYMs:**
# Recent archives find ~/Library/Developer/Xcode/Archives -name "*.dSYM" -mtime -7 # Verify UUID matches dwarfdump --uuid MyApp.app.dSYM
**build.gradle.kts:**
android {
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}
// Sentry auto-upload
sentry {
autoUploadProguardMapping.set(true)
uploadNativeSymbols.set(true)
}
// Or manual upload in CI
// sentry-cli upload-proguard --android-manifest app/build/.../AndroidManifest.xml mapping.txt**Keep rules for crash reporting:**
# proguard-rules.pro
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile
# Keep Sentry classes
-keep class io.sentry.** { *; }**Expo (app.json):**
{
"expo": {
"plugins": [
["@sentry/react-native/expo", {
"organization": "your-org",
"project": "your-project"
}]
],
"hooks": {
"postPublish": [{
"file": "sentry-expo/upload-sourcemaps"
}]
}
}
}**Bare React Native (CI):**
# After build
sentry-cli releases files $VERSION upload-sourcemaps \
--dist $BUILD_NUMBER \
./build/sourcemaps**Hermes bytecode:**
# Hermes requires source maps - verify with: sentry-cli sourcemaps explain <event-id>
| Symptom | Cause | Fix | |---------|-------|-----| | `<redacted>` in stack | Missing dSYM | Upload dSYM for that build | | Line numbers wrong | Source map mismatch | Verify release/dist strings match | | Only framework symbols | App dSYM missing | Check archive includes app dSYM | | `<unknown>` in RN | Hermes without source maps | Configure Hermes source map generation |
| Vendor | Verify Upload | |--------|---------------| | Sentry | `sentry-cli debug-files check <UUID>` | | Crashlytics | Firebase Console → Crashlytics → Missing dSYMs | | Bugsnag | `bugsnag-cli upload` with `--dry-run` | | Datadog | Dashboard → Error Tracking → Symbol Files | | bitdrift | Dashboard or CLI for dSYM, Gradle plugin for ProGuard | | New Relic | iOS dSYM via build script or `newrelic-cli`; Android ProGuard auto-uploaded by NR Gradle plugin |
Teaches Claude how to instrument mobile apps correctly — what to measure, what context to attach, and what mistakes to avoid.
Set up crash instrumentation with actionable context. Use when configuring crash capture, error boundaries, or breadcrumb…
Plan what to measure in mobile apps. Use when starting observability, prioritizing instrumentation, or asking "what should I…
Measure time from user tap to action completion. Use when tracking button response times, form submissions, add-to-cart, or any…
Measure time from navigation tap to screen fully loaded and interactive. Use when tracking screen transitions, deep links, or tab…
Instrument API requests with spans and distributed tracing. Use when tracking request latency, correlating client-backend traces,…
Set up session replay for visual debugging. Use when implementing screen recording, replay features, or visual debugging tools.