Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
bighardperson avatar

Swiftui Performance Audit

  • 8 installs
  • 33 repo stars
  • Updated April 26, 2026
  • bighardperson/computer-science-skills-collection

SwiftUI Performance Audit is a Claude Code skill that audits SwiftUI runtime performance from code review and Instruments profiling to fix slow rendering, janky scrolling, and excessive view updates.

About

SwiftUI Performance Audit is a Claude Code skill that reviews SwiftUI code to diagnose slow rendering, janky scrolling, and excessive view updates. It looks for view invalidation storms, unstable list identity, heavy work in body, and layout thrash, then proposes targeted fixes and, when code review is inconclusive, guides the user through Instruments profiling. A developer uses it when a SwiftUI screen scrolls poorly or burns CPU and they need to find the cause.

  • Audits SwiftUI runtime performance from code review and architecture
  • Targets view invalidation storms, unstable list identity, heavy work in body, and layout thrash
  • Guides Instruments profiling (SwiftUI template + Time Profiler) when code review is inconclusive

Swiftui Performance Audit by the numbers

  • 8 all-time installs (skills.sh)
  • Ranked #797 of 1,039 Mobile Development skills by installs in the Skillselion catalog
  • Data as of Jul 30, 2026 (Skillselion catalog sync)
At a glance

swiftui-performance-audit capabilities & compatibility

Capabilities
code review · debugging · refactoring
Use cases
code review · debugging · refactoring · frontend
Platforms
macOS
Pricing
Free
From the docs

What swiftui-performance-audit says it does

Audit and improve SwiftUI runtime performance from code review and architecture.
SKILL.md
Audit SwiftUI view performance end-to-end, from instrumentation and baselining to root-cause analysis and concrete remediation steps.
SKILL.md
Use the SwiftUI template in Instruments (Release build).
SKILL.md
npx skills add https://github.com/bighardperson/computer-science-skills-collection --skill swiftui-performance-audit

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs8
repo stars33
Last updatedApril 26, 2026
Repositorybighardperson/computer-science-skills-collection

What it does

Diagnose and fix slow rendering, janky scrolling, or high CPU in a SwiftUI app.

Who is it for?

Finding the root cause of SwiftUI jank, over-rendering, or high CPU and getting concrete refactors.

Skip if: Non-SwiftUI UI frameworks or general app logic bugs unrelated to view performance.

When should I use this skill?

A SwiftUI screen renders slowly, scrolls with jank, or shows excessive view updates.

What you get

A ranked list of likely root causes with code references and targeted fixes, plus before/after metrics.

  • ranked root-cause list with code references
  • targeted fix recommendations
  • before/after metrics table

By the numbers

  • 6 prioritized SwiftUI culprit categories
  • 4-stage workflow (review, profile, diagnose, remediate)

Files

SKILL.mdMarkdownGitHub ↗

SwiftUI Performance Audit

_Attribution: copied from @Dimillian’s Dimillian/Skills (2025-12-31)._

Overview

Audit SwiftUI view performance end-to-end, from instrumentation and baselining to root-cause analysis and concrete remediation steps.

Workflow Decision Tree

  • If the user provides code, start with "Code-First Review."
  • If the user only describes symptoms, ask for minimal code/context, then do "Code-First Review."
  • If code review is inconclusive, go to "Guide the User to Profile" and ask for a trace or screenshots.

1. Code-First Review

Collect:

  • Target view/feature code.
  • Data flow: state, environment, observable models.
  • Symptoms and reproduction steps.

Focus on:

  • View invalidation storms from broad state changes.
  • Unstable identity in lists (id churn, UUID() per render).
  • Heavy work in body (formatting, sorting, image decoding).
  • Layout thrash (deep stacks, GeometryReader, preference chains).
  • Large images without downsampling or resizing.
  • Over-animated hierarchies (implicit animations on large trees).

Provide:

  • Likely root causes with code references.
  • Suggested fixes and refactors.
  • If needed, a minimal repro or instrumentation suggestion.

2. Guide the User to Profile

Explain how to collect data with Instruments:

  • Use the SwiftUI template in Instruments (Release build).
  • Reproduce the exact interaction (scroll, navigation, animation).
  • Capture SwiftUI timeline and Time Profiler.
  • Export or screenshot the relevant lanes and the call tree.

Ask for:

  • Trace export or screenshots of SwiftUI lanes + Time Profiler call tree.
  • Device/OS/build configuration.

3. Analyze and Diagnose

Prioritize likely SwiftUI culprits:

  • View invalidation storms from broad state changes.
  • Unstable identity in lists (id churn, UUID() per render).
  • Heavy work in body (formatting, sorting, image decoding).
  • Layout thrash (deep stacks, GeometryReader, preference chains).
  • Large images without downsampling or resizing.
  • Over-animated hierarchies (implicit animations on large trees).

Summarize findings with evidence from traces/logs.

4. Remediate

Apply targeted fixes:

  • Narrow state scope (@State/@Observable closer to leaf views).
  • Stabilize identities for ForEach and lists.
  • Move heavy work out of body (precompute, cache, @State).
  • Use equatable() or value wrappers for expensive subtrees.
  • Downsample images before rendering.
  • Reduce layout complexity or use fixed sizing where possible.

Common Code Smells (and Fixes)

Look for these patterns during code review.

Expensive formatters in body

var body: some View {
    let number = NumberFormatter() // slow allocation
    let measure = MeasurementFormatter() // slow allocation
    Text(measure.string(from: .init(value: meters, unit: .meters)))
}

Prefer cached formatters in a model or a dedicated helper:

final class DistanceFormatter {
    static let shared = DistanceFormatter()
    let number = NumberFormatter()
    let measure = MeasurementFormatter()
}

Computed properties that do heavy work

var filtered: [Item] {
    items.filter { $0.isEnabled } // runs on every body eval
}

Prefer precompute or cache on change:

@State private var filtered: [Item] = []
// update filtered when inputs change

Sorting/filtering in body or ForEach

List {
    ForEach(items.sorted(by: sortRule)) { item in
        Row(item)
    }
}

Prefer sort once before view updates:

let sortedItems = items.sorted(by: sortRule)

Inline filtering in ForEach

ForEach(items.filter { $0.isEnabled }) { item in
    Row(item)
}

Prefer a prefiltered collection with stable identity.

Unstable identity

ForEach(items, id: \.self) { item in
    Row(item)
}

Avoid id: \.self for non-stable values; use a stable ID.

Image decoding on the main thread

Image(uiImage: UIImage(data: data)!)

Prefer decode/downsample off the main thread and store the result.

Broad dependencies in observable models

@Observable class Model {
    var items: [Item] = []
}

var body: some View {
    Row(isFavorite: model.items.contains(item))
}

Prefer granular view models or per-item state to reduce update fan-out.

5. Verify

Ask the user to re-run the same capture and compare with baseline metrics. Summarize the delta (CPU, frame drops, memory peak) if provided.

Outputs

Provide:

  • A short metrics table (before/after if available).
  • Top issues (ordered by impact).
  • Proposed fixes with estimated effort.

References

Add Apple documentation and WWDC resources under references/ as they are supplied by the user.

  • Optimizing SwiftUI performance with Instruments: references/optimizing-swiftui-performance-instruments.md
  • Understanding and improving SwiftUI performance: references/understanding-improving-swiftui-performance.md
  • Understanding hangs in your app: references/understanding-hangs-in-your-app.md
  • Demystify SwiftUI performance (WWDC23): references/demystify-swiftui-performance-wwdc23.md

Related skills

FAQ

What does it look for in code?

View invalidation storms, unstable list identity (id churn / UUID() per render), heavy work in body, layout thrash, and unoptimized images.

What if code review is inconclusive?

It guides you to profile with the Instruments SwiftUI template and Time Profiler on a Release build and share the trace.

Mobile Developmentfrontendtesting

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.