Skip to content
Back to skills

Symbolication Setup

ASecurity

Configure crash symbolication for readable stack traces. Use when setting up dSYMs (iOS), ProGuard/R8 mappings (Android), or source maps (React Native).

  • 116 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added February 7, 2026
developmentgokotlinbashreactdebugging

Works with

  • cli

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add nexus-labs-automation/mobile-observability --skill symbolication-setup --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Symbolication Setup?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Symbolication Setup
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nexus-labs-automation-symbolication-setup/badge)](https://www.skillsdirectory.com/skills/nexus-labs-automation-symbolication-setup)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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
---

# Symbolication Setup

Make crash stack traces readable instead of memory addresses or minified code.

## Why It Matters

Without symbolication:
```
0x104a3b2c8 <redacted> + 123
```

With symbolication:
```
PaymentViewController.processPayment() line 47
```

**Unsymbolicated crashes are useless for debugging.**

## Platform Setup

### iOS (dSYMs)

**Xcode Build Phase Script:**
```bash
# 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:**
```bash
# Recent archives
find ~/Library/Developer/Xcode/Archives -name "*.dSYM" -mtime -7

# Verify UUID matches
dwarfdump --uuid MyApp.app.dSYM
```

### Android (ProGuard/R8)

**build.gradle.kts:**
```kotlin
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
# proguard-rules.pro
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile

# Keep Sentry classes
-keep class io.sentry.** { *; }
```

### React Native (Source Maps)

**Expo (app.json):**
```json
{
  "expo": {
    "plugins": [
      ["@sentry/react-native/expo", {
        "organization": "your-org",
        "project": "your-project"
      }]
    ],
    "hooks": {
      "postPublish": [{
        "file": "sentry-expo/upload-sourcemaps"
      }]
    }
  }
}
```

**Bare React Native (CI):**
```bash
# After build
sentry-cli releases files $VERSION upload-sourcemaps \
    --dist $BUILD_NUMBER \
    ./build/sourcemaps
```

**Hermes bytecode:**
```bash
# Hermes requires source maps - verify with:
sentry-cli sourcemaps explain <event-id>
```

## Verification Checklist

- [ ] Release builds upload symbols automatically
- [ ] CI pipeline includes symbol upload step
- [ ] Test crash shows readable stack trace
- [ ] Source maps include original source (not just line numbers)
- [ ] Build numbers match between app and uploaded symbols

## Common Issues

| 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 Commands

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

## Related Skills

- See `skills/crash-instrumentation` for breadcrumb strategies and crash context
- Symbolication is Tier 1 in `skills/instrumentation-planning`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.