AX

axiom-ios-performance

Provides strategies to identify and fix performance bottlenecks, memory leaks, and battery drain in iOS apps.

Install

mkdir -p .claude/skills/axiom-ios-performance && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/5668" && unzip -o skill.zip -d .claude/skills/axiom-ios-performance && rm skill.zip

Installs to .claude/skills/axiom-ios-performance

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Use when app feels slow, memory grows, battery drains, or diagnosing ANY performance issue. Covers memory leaks, profiling, Instruments workflows, retain cycles, performance optimization.
187 chars✓ has a “when” trigger
Advanced

Key capabilities

  • Diagnose memory leaks and retain cycles
  • Profile CPU and energy performance
  • Analyze app launch regressions
  • Capture runtime console output
  • Inspect runtime state via LLDB

How it works

It routes performance issues to specific diagnostic workflows, including Instruments profiling, memory leak scanning, and energy auditing.

Inputs & outputs

You give it
Performance symptom or profiling request
You get back
Diagnostic report or profiling data

When to use axiom-ios-performance

  • Diagnosing memory leaks
  • Reducing battery consumption
  • Profiling app CPU performance
  • Fixing retain cycles

About this skill

Performance

You MUST use this skill for ANY performance issue including memory leaks, slow execution, battery drain, or profiling.

<!-- AXIOM_AUDITOR_INLINE_BEGIN — auto-maintained by scripts/build-inlined-auditors.ts; do not hand-edit -->

Not on Claude Code? Where this router says "Launch some-auditor agent", read that auditor's file in this suite and follow it inline — the same procedure, needing only file search and read.

Available here: skills/energy-auditor.md, skills/memory-auditor.md, skills/swift-performance-analyzer.md.

Agents that need Bash — builds, tests, simulators, crash symbolication — stay Claude Code-only; there is no inline equivalent for those.

<!-- AXIOM_AUDITOR_INLINE_END -->

When to Use

Use this router when:

  • App feels slow or laggy
  • Memory usage grows over time
  • Battery drains quickly
  • Device gets hot during use
  • High energy usage in Battery Settings
  • Diagnosing performance with Instruments
  • Memory leaks or retain cycles
  • App crashes with memory warnings

Routing Logic

Memory Issues

Memory leaks (Swift) → See skills/memory-debugging.md

  • Systematic leak diagnosis
  • 5 common leak patterns
  • Instruments workflows
  • deinit not called

Memory leak scan → Launch memory-auditor agent or /axiom:audit memory (5-phase semantic audit: maps resource ownership, detects 6 leak patterns, reasons about missing cleanup, correlates compound risks, scores lifecycle health)

Memory leaks (Objective-C blocks) → See skills/objc-block-retain-cycles.md

  • Block retain cycles
  • Weak-strong pattern
  • Network callback leaks

Performance Profiling

Performance profiling (GUI) → See skills/performance-profiling.md

  • Time Profiler (CPU), incl. Top Functions mode for scattered overhead (OS27)
  • Allocations (memory growth)
  • Core Data profiling (N+1 queries)
  • Decision trees for tool selection
  • Instruments 27 Run Comparisons, Swift executors instrument, Foundation Models instrument; Xcode 27 Organizer (Storage/hitches metrics, Metric Goals, Generate Recommendations)

Automated profiling (CLI) → See skills/xctrace-ref.md

  • Headless xctrace profiling
  • CI/CD integration patterns
  • Command-line trace recording
  • Programmatic trace analysis

Run automated profile → Use performance-profiler agent or /axiom:profile

  • Records trace via xctrace
  • Exports and analyzes data
  • Reports findings with severity

Compare two traces / detect regressions → See skills/trace-comparison.md or /axiom:compare-traces

  • Did this change slow down a hot path? Function-level CPU-share deltas
  • CI gating with xcprof compare --fail-on-regression (non-zero exit)
  • Regressions vs improvements, severity ranking, exit-code semantics

Hang/Freeze Issues

App hangs or freezes → See skills/hang-diagnostics.md

  • UI unresponsive for >1 second
  • Main thread blocked (busy or waiting)
  • Decision tree: busy vs blocked diagnosis
  • Time Profiler vs System Trace selection
  • 8 common hang patterns with fixes
  • Watchdog terminations

Corpus/aggregate hang triage (Sentry, ASC)axiom-shipping (skills/production-triage.md) + triage-analyzer agent

  • Multiple grouped hang reports from an aggregator, not a single .ips file
  • Classify anr_idle_runloop vs anr_main_thread_block across the corpus
  • Flag suspension/idle-runloop false-positives (the #1 hang by user count is often noise)
  • Cluster into root-cause families and rank by impact

App Launch

Slow app launch → See skills/app-launch.md

  • Slow first frame, frozen first screen, launch regression in Organizer
  • Launch-phase model (pre-main / main→first frame / extended launch)
  • Cold vs warm vs hot/resume vs notification launch — how to reproduce each
  • App Launch instrument workflow, dyld Activity, measurement hygiene
  • Pre-main fixes: linkage strategy (static vs dynamic vs mergeable, MERGED_BINARY_TYPE/MERGEABLE_LIBRARY), +load, main-thread deferral, priority inversion
  • XCTApplicationLaunchMetric regression test, MXAppLaunchMetric field histograms, custom "app is interactive" signpost
  • Push-notification launch path (tap→first pixel / tap→interactive targets)

Energy Issues

Battery drain, high energy → See skills/energy.md

  • Power Profiler workflow
  • Subsystem diagnosis (CPU/GPU/Network/Location/Display)
  • Anti-pattern fixes
  • Background execution optimization

Symptom-based diagnosis → See skills/energy-diag.md

  • "App at top of Battery Settings"
  • "Device gets hot"
  • "Background battery drain"
  • Time-cost analysis for each path

API reference with code → See skills/energy-ref.md

  • Complete WWDC code examples
  • Timer, network, location efficiency
  • BGContinuedProcessingTask (iOS 26)
  • MetricKit setup

Energy scan → Launch energy-auditor agent or /axiom:audit energy (8 anti-patterns: timer abuse, polling, continuous location, animation leaks, background mode misuse, network inefficiency, GPU waste, disk I/O)

Timer Safety

Timer crash patterns (DispatchSourceTimer) → See axiom-integration (skills/timer-patterns.md)

  • 4 crash scenarios causing EXC_BAD_INSTRUCTION
  • RunLoop mode gotcha (Timer stops during scroll)
  • SafeDispatchTimer wrapper
  • Timer vs DispatchSourceTimer decision

Timer API reference → See axiom-integration (skills/timer-patterns-ref.md)

  • Timer, DispatchSourceTimer, Combine, AsyncTimerSequence APIs
  • Lifecycle diagrams
  • Platform availability

Swift Performance

Swift performance optimization → See skills/swift-performance.md

  • Value vs reference types, copy-on-write
  • ARC overhead, generic specialization
  • Collection performance

Swift performance scan → Launch swift-performance-analyzer agent or /axiom:audit swift-performance (unnecessary copies, ARC overhead, unspecialized generics, collection inefficiencies, actor isolation costs, memory layout)

Modern Swift idioms → See axiom-swift (skills/swift-modern.md)

  • Outdated API patterns (Date(), CGFloat, DateFormatter)
  • Foundation modernization (URL.documentsDirectory, FormatStyle)
  • Claude-specific hallucination corrections

MetricKit Integration

MetricKit API reference → See skills/metrickit-ref.md

  • New Swift-first API (OS27): MetricManager AsyncSequence streams, typed MetricResult metrics (incl. Metal frame rate, storage), typed diagnostics with termination categories, launch-task tracking
  • Per-state metrics (StateReporting framework, OS27): split hitch/hang/memory metrics by tab, mode, or experiment
  • Crash reporter extensions (CrashReportExtension framework, OS27): process crashes at crash time with in-extension symbolication (Part 10)
  • MXMetricPayload / MXDiagnosticPayload parsing (legacy, iOS 13–26)
  • Field performance data collection
  • Integration with crash reporting

Runtime Console Capture

Capture simulator console output/axiom:console

  • Capture print(), os_log(), Logger output from simulator
  • Structured JSON with level, subsystem, category
  • Bounded collection with --timeout and --max-lines
  • Filter by subsystem or regex

Runtime State Inspection

LLDB interactive debugging → See axiom-build (skills/lldb.md)

  • Set breakpoints, inspect variables at runtime
  • Crash reproduction from crash logs
  • Thread state analysis for hangs
  • Swift value inspection (po vs v)

LLDB command reference → See axiom-build (skills/lldb-ref.md)

  • Complete command syntax
  • Breakpoint recipes
  • Expression evaluation patterns

Decision Tree

  1. Memory climbing + UI stutter/jank? → memory-debugging FIRST (memory pressure causes GC pauses that drop frames), then performance-profiling if memory is fixed but stutter remains
  2. Memory leak (Swift)? → memory-debugging
  3. Memory leak (Objective-C blocks)? → objc-block-retain-cycles
  4. App hang/freeze — is UI completely unresponsive (can't tap, no feedback)?
    • YES → hang-diagnostics (busy vs blocked diagnosis)
    • NO, just slow → performance-profiling (Time Profiler)
    • First launch only? → Also check for synchronous I/O or lazy initialization in hang-diagnostics
    • Multiple grouped hang reports from Sentry/ASC (corpus, not single file)? → axiom-shipping (skills/production-triage.md) + triage-analyzer
  5. Slowdown when multiple async operations complete at once? → Cross-route to axiom-concurrency (callback contention, not profiling)
  6. Slow app launch / slow first frame / launch regression / slow after push tap? → app-launch
  7. Battery drain (know the symptom)? → energy-diag
  8. Battery drain (need API reference)? → energy-ref
  9. Battery drain (general)? → energy
  10. MetricKit setup/parsing? → metrickit-ref 10a. Metrics split by app state (per-tab hitch rate, experiment arms) or StateReporting? → metrickit-ref (Part 1) 10b. Profiling agentic/LLM features (Foundation Models instrument, token metrics)? → performance-profiling, then axiom-ai 10c. Building a crash reporter extension (process crashes at crash time)? → metrickit-ref (Part 10)
  11. Profile with GUI (Instruments)? → performance-profiling
  12. Profile with CLI (xctrace)? → xctrace-ref
  13. Run automated profile now? → performance-profiler agent
  14. General slow/lag? → performance-profiling 14a. Slow GRDB/SQLite queries (EXPLAIN QUERY PLAN, index design, cursors)? → See axiom-data (skills/grdb-performance.md)
  15. Want proactive memory leak scan? → memory-auditor (Agent)
  16. Want energy anti-pattern scan? → energy-auditor (Agent)
  17. Want Swift performance audit (ARC, generics, collections)? → swift-performance-analyzer (Agent)
  18. Need to inspect variable/thread state at runtime? → See axiom-build (skills/lldb.md)
  19. Need exact LLDB command syntax? → See axiom-build (skills/lldb-ref.md)
  20. Timer stops during scrolling? → timer-patterns (RunLoop mode)
  21. EXC_BAD_INSTRUCTION crash with DispatchSourceTimer? → timer-patterns (4 crash patterns)
  22. Choosing between Timer, DispatchSourceTimer, Combine timer, async timer? → timer-patterns
  23. Need timer API syntax/lifecycle? → timer-patterns-ref
  24. Code review for

Content truncated.

When not to use it

  • General feature development
  • Non-performance related debugging

Limitations

  • Requires specific diagnostic tools for full analysis
  • Profiling results depend on reproduction accuracy
  • MetricKit integration requires specific setup

How it compares

It provides a systematic, symptom-based diagnostic framework rather than ad-hoc performance tuning.

Compared to similar skills

axiom-ios-performance side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
axiom-ios-performance (this skill)11moNo flagsAdvanced
chrome-devtools417moReviewIntermediate
python-performance-optimization272moNo flagsIntermediate
analyzing-logs1427dReviewBeginner

Try saying

Example prompts that trigger this skill in your AI assistant.

More by CharlesWiltgen

View all by CharlesWiltgen

axiom-ios-build

CharlesWiltgen

Use when ANY iOS build fails, test crashes, Xcode misbehaves, or environment issue occurs before debugging code. Covers build failures, compilation errors, dependency conflicts, simulator problems, environment-first diagnostics.

332

axiom-ios-accessibility

CharlesWiltgen

Use when fixing or auditing ANY accessibility issue - VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance, App Store accessibility review.

13

axiom-ios-ai

CharlesWiltgen

Use when implementing ANY Apple Intelligence or on-device AI feature. Covers Foundation Models, @Generable, LanguageModelSession, structured output, Tool protocol, iOS 26 AI integration.

10

axiom-ios-data

CharlesWiltgen

Use when working with ANY data persistence, database, axiom-storage, CloudKit, migration, or serialization. Covers SwiftData, Core Data, GRDB, SQLite, CloudKit sync, file storage, Codable, migrations.

10

axiom-networking

CharlesWiltgen

Use when implementing Network.framework connections, debugging connection failures, migrating from sockets/URLSession streams, or adopting structured concurrency networking patterns - prevents deprecated API usage, reachability anti-patterns, and thread-safety violations with iOS 12-26+ APIs

11

axiom-vision

CharlesWiltgen

subject segmentation, VNGenerateForegroundInstanceMaskRequest, isolate object from hand, VisionKit subject lifting, image foreground detection, instance masks, class-agnostic segmentation, VNRecognizeTextRequest, OCR, VNDetectBarcodesRequest, DataScannerViewController, document scanning, RecognizeDocumentsRequest

01

You might also like

chrome-devtools

mrgoonie

Browser automation, debugging, and performance analysis using Puppeteer CLI scripts. Use for automating browsers, taking screenshots, analyzing performance, monitoring network traffic, web scraping, form automation, and JavaScript debugging.

41157

python-performance-optimization

wshobson

Profile and optimize Python code using cProfile, memory profilers, and performance best practices. Use when debugging slow Python code, optimizing bottlenecks, or improving application performance.

27131

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

redis-inspect

civitai

Inspect Redis cache keys, values, and TTLs for debugging. Supports both main cache and system cache. Use for debugging cache issues, checking cached values, and monitoring cache state. Read-only by default.

646

obsidian-performance-tuning

jeremylongshore

Optimize Obsidian plugin performance for smooth operation. Use when experiencing lag, memory issues, or slow startup, or when optimizing plugin code for large vaults. Trigger with phrases like "obsidian performance", "obsidian slow", "optimize obsidian plugin", "obsidian memory usage".

640

obsidian-observability

jeremylongshore

Set up comprehensive logging and monitoring for Obsidian plugins. Use when implementing debug logging, tracking plugin performance, or setting up error reporting for your Obsidian plugin. Trigger with phrases like "obsidian logging", "obsidian monitoring", "obsidian debug", "track obsidian plugin".

534

Search skills

Search the agent skills registry