Agent skill

iOS Crash Log Debugging

by conorluddy in conorluddy/xclaude-plugin

Walks through retrieving, symbolicating and diagnosing iOS crash logs, turning a cryptic stack trace into the function names that actually failed.

MITAuto-check passedDevelopment

Install iOS Crash Log Debugging

skills CLI
$ npx skills add conorluddy/xclaude-plugin --skill crash-debugging -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install conorluddy/xclaude-plugin crash-debugging --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/conorluddy/xclaude-plugin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/crash-debugging .claude/skills/crash-debugging && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
crash-debugging
GitHub stars
183
Token cost
~4.9k tokens
SKILL.md length
1,321 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
MIT

At a glance

Walks through retrieving, symbolicating and diagnosing iOS crash logs, turning a cryptic stack trace into the function names that actually failed.

  • Works in 5 steps: Identify Crash Type → Locate Crash Point → Analyze Code Path → …
  • Investigating an app crash reported during testing or by TestFlight
  • SKILL.md covers Quick Reference, Overview, When to Use This Skill and Key Concepts, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

A crash log, generated when the app terminates unexpectedly, carries an exception type, a stack trace and register state, and is distinguished from a broader diagnostic report that can also cover spins and hangs; both live under the DiagnosticReports folder, named with the app, timestamp and device, and Console.app can view them live. Simulator crashes land in that same fixed path on disk.

Symbolication turns raw memory-offset stack frames into readable function names using `atos`, and needs a dSYM file matching the build's UUID alongside the binary and the crash log itself, with dSYM files found through Xcode's Organizer or DerivedData. The skill stays scoped to crash analysis specifically, pointing build failures, test assertion failures and UI debugging to other named skills instead.

When your agent uses it

  • Investigating an app crash reported during testing or by TestFlight
  • Symbolicating a production crash log into readable function names
  • Diagnosing a CI pipeline's reported test crash

Example prompts

  • “Symbolicate this crash log using the matching dSYM file.”
  • “Why did the app crash on launch according to this diagnostic report?”
  • “Find the dSYM for this build UUID in DerivedData.”

Requirements

  • Xcode
  • A dSYM file matching the crashing build

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Identify Crash Type
  2. Locate Crash Point
  3. Analyze Code Path
  4. Reproduce Locally
  5. Validate Fix

What it can do on your machine

Read from SKILL.md and the folder at commit 6de4b2c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are bash, swift, objc, json and ruby).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

iOS Crash Log Debugging loads about 4.9k tokens when it runs. Until then it costs about 78 tokens; SKILL.md has 1,321 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~78
When it runs · the whole SKILL.md, loaded when a task matches
~4.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from conorluddy/xclaude-plugin at commit 6de4b2c, republished under its MIT licence (© conorluddy). 1,321 words, ~4,944 tokens.

Download SKILL.mdSave it as .claude/skills/crash-debugging/SKILL.md (or your agent's skills folder).
name
crash-debugging
description
Crash log analysis, symbolication, and debugging workflows for iOS apps. Use when investigating app crashes, analyzing crash reports, symbolicating stack traces, or identifying root causes. Covers crash log retrieval, symbolication with dSYM files, stack trace analysis, and common crash patterns.
version
0.0.1
token_cost
~40

Crash Debugging Skill

Comprehensive guide to iOS crash analysis and debugging

Quick Reference

TaskTool/CommandLocation
View crash logsConsole.appmacOS Application
Retrieve simulator crashes~/Library/Logs/DiagnosticReports/File system
Symbolicate crashatosCommand line
Find dSYM filesXcode Organizer / DerivedDataXcode
Analyze crash typeStack trace patternsCrash log

Overview

Crash debugging transforms cryptic crash logs into actionable insights. This skill covers:

  • Retrieving crash logs from simulators and devices
  • Understanding crash log structure
  • Symbolicating stack traces for readable function names
  • Identifying common crash patterns
  • Determining root causes

When to Use This Skill

Use this skill when:

  • App crashes during testing or development
  • Received crash reports from users or TestFlight
  • CI/CD pipeline reports test crashes
  • Need to symbolicate production crash logs
  • Investigating memory issues or crashes

Don't use for:

  • Build failures (see xcode-workflows)
  • Test assertion failures (see ios-testing-patterns)
  • UI debugging (see ui-automation-workflows)

Key Concepts

Crash Logs vs Diagnostic Reports

Crash Logs:

  • Generated when app terminates unexpectedly
  • Include exception type, stack trace, register state
  • Stored in DiagnosticReports directory
  • Named: AppName_YYYY-MM-DD-HHMMSS_DeviceName.crash

Diagnostic Reports:

  • Broader category including crashes, spins, hangs
  • May include system diagnostics
  • Same location as crash logs
Symbolication Process

Unsymbolicated:

0   MyApp    0x0000000102a3c4f8 0x102a38000 + 17656
1   MyApp    0x0000000102a3d1a4 0x102a38000 + 20900

Symbolicated:

0   MyApp    0x0000000102a3c4f8 ViewController.loginButtonTapped() + 120
1   MyApp    0x0000000102a3d1a4 ViewController.viewDidLoad() + 84

Symbolication Requirements:

  1. dSYM file matching the build UUID
  2. Binary (MyApp.app/MyApp)
  3. Crash log with memory addresses
Stack Traces and Debugging Symbols

Stack Trace:

  • List of function calls leading to crash
  • Ordered from crash point (top) to app entry (bottom)
  • Each line contains: frame number, binary name, address, symbol + offset

Debugging Symbols (dSYM):

  • Separate file containing symbol information
  • Maps memory addresses to function names
  • Generated during build (if "Debug Information Format" = "DWARF with dSYM")
  • Essential for crash analysis
Common Crash Types
Exception TypeMeaningCommon Cause
EXC_BAD_ACCESSInvalid memory accessDangling pointer, use-after-free
SIGABRTProcess abortedAssertion failure, force unwrap nil
EXC_BREAKPOINTBreakpoint hitSwift runtime error, fatal error
SIGILLIllegal instructionCorrupted code, wrong architecture
SIGSEGVSegmentation faultMemory corruption
SIGBUSBus errorUnaligned memory access

Workflows

Workflow 1: Crash Log Retrieval
From Simulator

Step 1: Locate Crash Logs

bash
open ~/Library/Logs/DiagnosticReports/

Directory Structure:

DiagnosticReports/
├── MyApp_2025-11-06-143022_Conors-MacBook.crash
├── MyApp_2025-11-06-140511_Conors-MacBook.crash
└── ...

Step 2: Identify Recent Crash

Sort by date modified, or filter by app name:

bash
ls -lt ~/Library/Logs/DiagnosticReports/ | grep MyApp | head -5

Step 3: Read Crash Log

bash
cat ~/Library/Logs/DiagnosticReports/MyApp_2025-11-06-143022_Conors-MacBook.crash

Step 1: Open Console.app

bash
open -a Console

Step 2: Filter Logs

  • Click "Crash Reports" in sidebar
  • Search for app name
  • Click crash report to view

Advantages:

  • Real-time monitoring
  • Better filtering and search
  • Automatic refresh
From Device (via Xcode)

Step 1: Connect Device

Step 2: Open Devices and Simulators

  • Xcode → Window → Devices and Simulators
  • Select device

Step 3: View Device Logs

  • Click "View Device Logs"
  • Find crash report
  • Right-click → Export
Workflow 2: Symbolication
Automatic Symbolication (Xcode)

Step 1: Locate dSYM

Xcode automatically symbolicates if:

  1. dSYM is in Spotlight index
  2. dSYM UUID matches crash log

Check dSYM UUID:

bash
dwarfdump --uuid /path/to/MyApp.app.dSYM

Check Crash Log UUID:

Binary Images:
0x102a38000 - 0x102a4bfff MyApp arm64  <12345678-1234-1234-1234-123456789abc>

UUIDs must match for symbolication.

Step 2: Import to Xcode

If auto-symbolication fails:

  1. Xcode → Window → Organizer
  2. Select "Crashes" tab
  3. Drag crash log into window
  4. Xcode symbolicates automatically (if dSYM available)
Manual Symbolication (atos)

Step 1: Find Required Files

bash
# App binary
APP_BINARY="/path/to/MyApp.app/MyApp"

# dSYM file
DSYM_FILE="/path/to/MyApp.app.dSYM/Contents/Resources/DWARF/MyApp"

# Load address (from crash log "Binary Images" section)
LOAD_ADDRESS="0x102a38000"

Step 2: Symbolicate Address

bash
atos -arch arm64 -o "$DSYM_FILE" -l "$LOAD_ADDRESS" 0x0000000102a3c4f8

Output:

ViewController.loginButtonTapped() (in MyApp) (ViewController.swift:45)

Step 3: Symbolicate Multiple Addresses

bash
atos -arch arm64 -o "$DSYM_FILE" -l "$LOAD_ADDRESS" \
  0x0000000102a3c4f8 \
  0x0000000102a3d1a4 \
  0x0000000102a3e220
Batch Symbolication (symbolicatecrash)

Symbolicate Entire Crash Log:

bash
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

symbolicatecrash MyApp.crash MyApp.app.dSYM > MyApp_symbolicated.crash

Verify Symbolication:

bash
grep -A 10 "Thread 0 Crashed" MyApp_symbolicated.crash

Should show function names, not just addresses.

Workflow 3: Stack Trace Analysis
Reading a Crash Log

Crash Log Structure:

Incident Identifier: 12345678-1234-1234-1234-123456789ABC
CrashReporter Key:   ABCDEF1234567890
Hardware Model:      iPhone15,2
Process:             MyApp [12345]
Path:                /private/var/containers/Bundle/Application/.../MyApp.app/MyApp
Identifier:          com.example.MyApp
Version:             1.0 (1)
Code Type:           ARM-64
Parent Process:      launchd [1]

Date/Time:           2025-11-06 14:30:22.123 +0000
OS Version:          iOS 17.0 (21A5326a)
Report Version:      104

Exception Type:      EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype:   KERN_INVALID_ADDRESS at 0x0000000000000000
Termination Reason:  SIGNAL 11 Segmentation fault: 11
Terminating Process: exc handler [12345]

Triggered by Thread: 0

Thread 0 Crashed:
0   MyApp              0x0000000102a3c4f8 ViewController.loginButtonTapped() + 120
1   MyApp              0x0000000102a3d1a4 ViewController.viewDidLoad() + 84
2   UIKitCore          0x00000001b2e4c3a0 -[UIViewController loadViewIfRequired] + 928
...

Thread 1:
0   libsystem_kernel.dylib  0x00000001a2b3c4a8 __workq_kernreturn + 8
...

Binary Images:
0x102a38000 - 0x102a4bfff MyApp arm64  <12345678-1234-1234-1234-123456789abc>
...
Key Sections to Analyze

1. Exception Type

Exception Type:      EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype:   KERN_INVALID_ADDRESS at 0x0000000000000000
  • EXC_BAD_ACCESS: Memory access violation
  • KERN_INVALID_ADDRESS: Address doesn't exist (null pointer)
  • 0x0000000000000000: Accessing address zero (dereferencing nil)

2. Crashed Thread

Thread 0 Crashed:
0   MyApp              0x102a3c4f8 ViewController.loginButtonTapped() + 120
1   MyApp              0x102a3d1a4 ViewController.viewDidLoad() + 84
  • Frame 0 is crash location
  • Read from top to bottom (most recent to oldest)
  • Identify last app frame before system frames

3. Binary Images

0x102a38000 - 0x102a4bfff MyApp arm64  <12345678-1234-1234-1234-123456789abc>
  • Load address: 0x102a38000
  • UUID: 12345678-1234-1234-1234-123456789abc
  • Architecture: arm64
Workflow 4: Root Cause Identification
Step 1: Identify Crash Type

Match exception type to common patterns (see below).

Step 2: Locate Crash Point

Find the topmost frame in your app's code:

Thread 0 Crashed:
0   MyApp              0x102a3c4f8 ViewController.loginButtonTapped() + 120  ← START HERE
1   MyApp              0x102a3d1a4 ViewController.viewDidLoad() + 84
Step 3: Analyze Code Path
  1. Open file at crash location (ViewController.swift:45)
  2. Examine function loginButtonTapped()
  3. Check for:
    • Optional unwrapping (! or ?)
    • Array/dictionary access
    • Object references
    • Memory management
Step 4: Reproduce Locally
  1. Set breakpoint at crash location
  2. Follow stack trace path
  3. Inspect variables and state
  4. Identify null/invalid values
Step 5: Validate Fix
  1. Apply fix
  2. Build and test
  3. Verify no regression
  4. Monitor for related crashes

Common Crash Patterns

EXC_BAD_ACCESS (Memory Issues)

Signature:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000

Common Causes:

1. Dereferencing Nil (Swift)

swift
// Crash:
let user: User? = nil
let name = user!.name  // EXC_BAD_ACCESS

// Fix:
if let name = user?.name {
    // Use name safely
}

2. Dangling Pointer (Objective-C)

objc
// Crash:
@property (nonatomic, unsafe_unretained) id delegate;  // Dangerous
[self.delegate callMethod];  // Delegate deallocated → EXC_BAD_ACCESS

// Fix:
@property (nonatomic, weak) id<MyDelegate> delegate;

3. Use-After-Free

swift
// Crash:
var buffer = UnsafeMutablePointer<Int>.allocate(capacity: 10)
buffer.deallocate()
buffer[0] = 42  // EXC_BAD_ACCESS

// Fix:
buffer[0] = 42
buffer.deallocate()

Debugging:

  • Enable Address Sanitizer (Scheme → Diagnostics → Address Sanitizer)
  • Check for weak vs unsafe_unretained references
  • Verify object lifecycle
SIGABRT (Assertion Failures)

Signature:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: Namespace SIGNAL, Code 6 Abort trap: 6

Common Causes:

1. Force Unwrap Nil (Swift)

swift
// Crash:
let value = dictionary["key"]!  // key doesn't exist → SIGABRT

// Stack trace shows:
Fatal error: Unexpectedly found nil while unwrapping an Optional value

// Fix:
if let value = dictionary["key"] {
    // Use value
}

2. Array Index Out of Bounds

swift
// Crash:
let items = [1, 2, 3]
let item = items[10]  // Index out of range → SIGABRT

// Fix:
if items.indices.contains(10) {
    let item = items[10]
}

3. NSException (Objective-C)

objc
// Crash:
[NSException raise:@"InvalidState" format:@"Unexpected condition"];

// Stack trace shows:
*** Terminating app due to uncaught exception 'InvalidState'

Debugging:

  • Read error message in crash log (very descriptive)
  • Check preconditions and assertions
  • Validate input data
EXC_BREAKPOINT (Swift Errors)

Signature:

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x00000001a2b4c8d0

Common Causes:

1. Fatal Error

swift
// Crash:
guard let user = currentUser else {
    fatalError("User must be logged in")  // EXC_BREAKPOINT
}

// Stack trace shows:
Fatal error: User must be logged in

// Fix:
guard let user = currentUser else {
    print("Error: User not logged in")
    return
}

2. Type Cast Failure (as!)

swift
// Crash:
let value = anyValue as! String  // Value is not String → EXC_BREAKPOINT

// Fix:
if let value = anyValue as? String {
    // Use value
}

3. Precondition Failure

swift
// Crash:
precondition(array.count > 0, "Array must not be empty")

// Fix:
if array.count > 0 {
    // Proceed safely
}

Debugging:

  • Read fatal error message in crash log
  • Review force casts (as!)
  • Check preconditions and guards
Show full SKILL.md (524 more words)Show less
Timeout Crashes (Watchdog)

Signature:

Exception Type:  EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d

0x8badf00d = "ate bad food" = Watchdog timeout

Common Causes:

1. Main Thread Blocking

swift
// Crash:
func viewDidLoad() {
    super.viewDidLoad()
    Thread.sleep(forTimeInterval: 30)  // Blocks main thread → Watchdog kills app
}

// Fix:
func viewDidLoad() {
    super.viewDidLoad()
    DispatchQueue.global().async {
        Thread.sleep(forTimeInterval: 30)
    }
}

2. Launch Time Timeout

App takes too long to launch (>20 seconds).

Fix:

  • Defer heavy initialization
  • Use background queues
  • Profile launch time

3. Suspend/Resume Timeout

App doesn't respond to backgrounding/foregrounding.

Fix:

  • Implement applicationDidEnterBackground quickly
  • Move long operations to background

Debugging:

  • Instrument Time Profiler
  • Check main thread operations
  • Review app lifecycle methods
Memory Issues (JETSAM)

Signature:

Exception Type:  EXC_RESOURCE
Exception Subtype: MEMORY
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: Namespace JETSAM, Code 0xdead10cc

Common Causes:

1. Memory Leak

swift
// Leak:
class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            self.doSomething()  // Retain cycle
        }
    }
}

// Fix:
closure = { [weak self] in
    self?.doSomething()
}

2. Large Allocations

swift
// Crash:
let hugeArray = Array(repeating: Data(count: 1_000_000), count: 1000)

// Fix:
// Process in chunks, release memory incrementally

Debugging:

  • Instruments → Allocations
  • Instruments → Leaks
  • Memory Graph Debugger (Xcode)

Troubleshooting

Missing Symbols

Problem: Stack trace shows addresses, not function names

Cause: Missing or mismatched dSYM file

Solutions:

  1. Find Correct dSYM
bash
# List all dSYMs in DerivedData
find ~/Library/Developer/Xcode/DerivedData -name "*.dSYM" -type d

# Check UUID
dwarfdump --uuid /path/to/MyApp.app.dSYM
  1. Match UUID

Compare dSYM UUID with crash log Binary Images UUID. They must match exactly.

  1. Archive dSYMs

Enable "Archive" in scheme settings to preserve dSYMs for releases.

  1. Download from Xcode Organizer

For App Store builds:

  • Xcode → Window → Organizer
  • Select archive
  • Download dSYMs
Partial Stack Traces

Problem: Stack trace incomplete or truncated

Causes:

  • Tail call optimization
  • Inline functions
  • Missing debug symbols

Solutions:

  1. Disable Optimizations

Build Settings:

  • Optimization Level: None [-O0]
  • Debug Information Format: DWARF with dSYM File
  1. Build with Debug Configuration
json
{
  "operation": "build",
  "scheme": "MyApp",
  "configuration": "Debug"
}
  1. Disable Inlining

Add -Xswiftc -Ounchecked to reduce optimizations.

System Framework Crashes

Problem: Crash in UIKit, Foundation, or other system framework

Stack Trace:

Thread 0 Crashed:
0   UIKitCore          0x00001b2e4c3a0 -[UIView layoutSubviews] + 928
1   UIKitCore          0x00001b2e5d1c4 -[UIView setNeedsLayout] + 84
2   MyApp              0x00102a3c4f8 ViewController.updateUI() + 45

Analysis:

  • Frame 2 is your code (start here)
  • System frameworks rarely crash on their own
  • Likely caused by invalid state or parameters from your code

Solutions:

  1. Check Parameters

Before system call, validate:

  • Non-nil objects
  • Valid ranges
  • Correct types
  1. Review Constraints

Auto Layout issues often cause UIKit crashes:

  • Check constraint conflicts
  • Verify view hierarchy
  1. Enable Exception Breakpoint

Xcode → Breakpoints → + → Exception Breakpoint

  • Catches issues before system framework crash
Third-Party Library Crashes

Problem: Crash in external library/framework

Stack Trace:

Thread 0 Crashed:
0   Alamofire          0x00001054a3c4f8 RequestAdapter.adapt() + 120
1   MyApp              0x00102a3c4f8 NetworkManager.fetchData() + 45

Solutions:

  1. Check Library Version

Ensure compatible version:

  • Update to latest stable
  • Check release notes for bug fixes
  1. Review Integration

Verify:

  • Correct API usage
  • Thread safety
  • Initialization order
  1. Enable Library Debug Symbols

In Podfile or SPM:

ruby
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['DEBUG_INFORMATION_FORMAT'] = 'dwarf-with-dsym'
    end
  end
end
  1. Report Issue

If library bug:

  • Create minimal reproduction
  • File GitHub issue
  • Include crash log and steps

Tools & Commands

Console.app Usage

Launch:

bash
open -a Console

Filter by App:

  1. Click "Crash Reports" in sidebar
  2. Enter app name in search
  3. Select crash to view

Export: Right-click crash → "Reveal in Finder" → Copy file

atos for Symbolication

Basic Usage:

bash
atos -arch arm64 \
     -o /path/to/App.app.dSYM/Contents/Resources/DWARF/App \
     -l 0x100000000 \
     0x100001234

Parameters:

  • -arch: Architecture (arm64, x86_64)
  • -o: Path to dSYM or binary
  • -l: Load address from crash log
  • Last argument: Address to symbolicate

Multiple Addresses:

bash
atos -arch arm64 -o MyApp.dSYM -l 0x100000000 \
  0x100001234 0x100002345 0x100003456
Xcode Organizer

Access: Xcode → Window → Organizer

Features:

  • View archives
  • Download dSYMs for App Store builds
  • View crash reports from TestFlight/App Store
  • Automatic symbolication

Crashes Tab:

  • Aggregate crashes from users
  • Group by crash signature
  • Filter by OS version, device
lldb Debugging

Set Breakpoint:

(lldb) breakpoint set --name ViewController.loginButtonTapped
(lldb) breakpoint set --file ViewController.swift --line 45

Examine Variables:

(lldb) po user
(lldb) p user?.name
(lldb) frame variable

Navigate Stack:

(lldb) bt                 # Print backtrace
(lldb) frame select 2     # Switch to frame 2
(lldb) up                 # Move up stack
(lldb) down               # Move down stack

Memory Inspection:

(lldb) memory read 0x100001234
(lldb) register read

Integration with Simulator Workflows

Reproduce Crash in Simulator

Workflow:

1. Build app (xcode-workflows)
2. Boot simulator (simulator-workflows → boot)
3. Install app (simulator-workflows → install)
4. Launch with lldb attached (Xcode → Debug)
5. Reproduce crash
6. Analyze in debugger

Retrieve Logs:

1. Crash occurs in simulator
2. Console.app → Filter by app name
3. Or: ls ~/Library/Logs/DiagnosticReports/ | grep MyApp
4. Read crash log
5. Symbolicate if needed
  • simulator-workflows: App lifecycle and device management
  • xcode-workflows: Building with debug symbols
  • ios-testing-patterns: Preventing crashes through testing
  • xc://reference/crash-types: Complete crash type reference
  • xc://workflows/symbolication: Detailed symbolication guide
  • xc://tools/debugging: LLDB and debugging tools reference

Tip: Enable Address Sanitizer and Undefined Behavior Sanitizer in scheme diagnostics to catch memory issues early.

© conorluddy, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/crash-debugging of conorluddy/xclaude-plugin.

Open the folder on GitHubat commit 6de4b2c

Compare with similar skills

iOS Crash Log Debugging next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

iOS Crash Log Debugging compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
iOS Crash Log Debugging this skillconorluddy/xclaude-plugin183—~4.9kAutomated safety check: PassMIT
Apple Crash Log .NET Symbolicationdotnet/skills5.6k1 repos~2.4kAutomated safety check: PassMIT
Mobile App Debuggingsecondsky/claude-skills227—~513Automated safety check: PassMIT
C Bounds Safetysuperagents-lab/xcode27-skills337—~732Automated safety check: PassNone
Debug Rn Native CrashLedgerHQ/ledger-live621—~1.2kAutomated safety check: PassMIT
Swift Diagnosticsjohnrogers/claude-swift-engineering231—~743Automated safety check: PassMIT

Similar skills

  • Official

    Resolves .NET runtime frames in Apple .ips crash logs to function names, source files and line numbers using dSYM symbols, atos and the Microsoft symbol server.

    5.6k GitHub starsUsed in 1 repo~2.4k tokens
    MobileAuto-check passed
  • Mobile App Debugging

    secondsky/claude-skills

    Mobile app debugging for iOS, Android, cross-platform frameworks.

    227 GitHub stars~513 tokensUpdated 9 days ago
    MobileAuto-check passed
  • C Bounds Safety

    superagents-lab/xcode27-skills

    Guide for the C -fbounds-safety language extension. An agent skill from superagents-lab/xcode27-skills.

    337 GitHub stars~732 tokensUpdated 4 mo ago
    MobileAuto-check passed
  • Debug Rn Native Crash

    LedgerHQ/ledger-live

    Investigate native React Native crashes (Fabric/Hermes/iOS) in ledger-live-mobile when JS error logs are missing or unhelpful.

    621 GitHub stars~1.2k tokensUpdated today
    MobileAuto-check passed
  • Swift Diagnostics

    johnrogers/claude-swift-engineering

    A skill your agent uses when debugging NavigationStack issues (not responding, unexpected pops, crashes), build failures (SPM resolution, "No such module", hanging builds), or memory problems…

    231 GitHub stars~743 tokensUpdated 8 mo ago
    MobileAuto-check passed
  • Debugging Instruments

    dpearson2699/swift-ios-skills

    Debug iOS apps and profile performance using LLDB, the interactive Memory Graph Debugger, and Instruments.

    1.2k GitHub stars~3.6k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed

More from conorluddy/xclaude-plugin

All 8 skills in this repo
  • iOS Accessibility Testing

    conorluddy/xclaude-plugin

    Guides WCAG 2.1 and VoiceOver accessibility testing for iOS apps, working from the accessibility tree and not from screenshots.

    183 GitHub stars~5k tokensUpdated 25 days ago
    Auto-check passed
  • iOS Simulator Workflows

    conorluddy/xclaude-plugin

    Manages iOS Simulator devices and apps through the execute_simulator_command MCP tool instead of raw simctl: boot, create and delete devices, install and launch apps, screenshots and diagnostics.

    183 GitHub stars~3.3k tokensUpdated 25 days ago
    Auto-check passed
  • xc-plugin State Management

    conorluddy/xclaude-plugin

    Teaches how xc-plugin saves tokens with progressive disclosure, cached responses and consistent configuration, so large device lists and build logs arrive as summaries first.

    183 GitHub stars~4k tokensUpdated 25 days ago
    Auto-check passed
  • UI Automation Workflows

    conorluddy/xclaude-plugin

    Accessibility-first UI automation using IDB. An agent skill from conorluddy/xclaude-plugin.

    183 GitHub stars~2.2k tokensUpdated 25 days ago
    Auto-check passed
  • Xcode Build Workflows

    conorluddy/xclaude-plugin

    Directs iOS build, test and clean operations through the execute_xcode_command MCP tool instead of raw xcodebuild in the shell, with parameter-level retries on failure.

    183 GitHub stars~3k tokensUpdated 25 days ago
    Auto-check passed
  • Performance Profiling

    conorluddy/xclaude-plugin

    Instruments integration and performance analysis workflows for iOS apps.

    183 GitHub stars~7.3k tokensUpdated 25 days ago
    Auto-check passed

Works with

Questions about iOS Crash Log Debugging

What does iOS Crash Log Debugging do?

Walks through retrieving, symbolicating and diagnosing iOS crash logs, turning a cryptic stack trace into the function names that actually failed. app can view them live. Simulator crashes land in that same fixed path on disk.

When should I use iOS Crash Log Debugging?

iOS Crash Log Debugging fits situations like: investigating an app crash reported during testing or by TestFlight; symbolicating a production crash log into readable function names; diagnosing a CI pipeline's reported test crash.

How do I install iOS Crash Log Debugging in Claude Code?

Run `npx skills add conorluddy/xclaude-plugin --skill crash-debugging -a claude-code`. Or copy the skill folder (skills/crash-debugging in conorluddy/xclaude-plugin) into .claude/skills/crash-debugging in your project. Claude Code loads it when a task matches its description.

How do I install iOS Crash Log Debugging in Codex?

Run `npx skills add conorluddy/xclaude-plugin --skill crash-debugging -a codex`. Or copy the skill folder (skills/crash-debugging in conorluddy/xclaude-plugin) into .agents/skills/crash-debugging in your project. Codex loads it when a task matches its description.

Can I use iOS Crash Log Debugging in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add conorluddy/xclaude-plugin --skill crash-debugging -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/crash-debugging, .gemini/skills/crash-debugging, .github/skills/crash-debugging and .opencode/skills/crash-debugging in your project.

What does iOS Crash Log Debugging need to run?

SKILL.md names no scripts, command-line tools or credentials: iOS Crash Log Debugging is instructions for the agent only. Our summary lists: Xcode; A dSYM file matching the crashing build.

Does iOS Crash Log Debugging access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is iOS Crash Log Debugging safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does iOS Crash Log Debugging use?

iOS Crash Log Debugging is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does iOS Crash Log Debugging use?

About 4.9k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to iOS Crash Log Debugging?

Skills that share tags, products or a category with iOS Crash Log Debugging: Apple Crash Log .NET Symbolication (dotnet/skills, 5.6k stars), Mobile App Debugging (secondsky/claude-skills, 227 stars), C Bounds Safety (superagents-lab/xcode27-skills, 337 stars) and Debug Rn Native Crash (LedgerHQ/ledger-live, 621 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains iOS Crash Log Debugging?

conorluddy (a GitHub user) maintains it in conorluddy/xclaude-plugin, which has 183 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on September 12, 2026.

Source: conorluddy/xclaude-plugin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.