Skillshub swiftui-expert-skill
Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, macOS-specific APIs, and iOS 26+ Liquid Glass adoption. Use when building new SwiftUI features, refactoring existing views, reviewing code quality, or adopting modern SwiftUI patterns.
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/AvdLee/SwiftUI-Agent-Skill/swiftui-expert-skill" ~/.claude/skills/comeonoliver-skillshub-swiftui-expert-skill && rm -rf "$T"
manifest:
skills/AvdLee/SwiftUI-Agent-Skill/swiftui-expert-skill/SKILL.mdsource content
SwiftUI Expert Skill
Operating Rules
- Consult
at the start of every task to avoid deprecated APIsreferences/latest-apis.md - Prefer native SwiftUI APIs over UIKit/AppKit bridging unless bridging is necessary
- Focus on correctness and performance; do not enforce specific architectures (MVVM, VIPER, etc.)
- Encourage separating business logic from views for testability without mandating how
- Follow Apple's Human Interface Guidelines and API design patterns
- Only adopt Liquid Glass when explicitly requested by the user (see
)references/liquid-glass.md - Present performance optimizations as suggestions, not requirements
- Use
gating with sensible fallbacks for version-specific APIs#available
Task Workflow
Review existing SwiftUI code
- Read the code under review and identify which topics apply
- Flag deprecated APIs (compare against
)references/latest-apis.md - Run the Topic Router below for each relevant topic
- Validate
gating and fallback paths for iOS 26+ features#available
Improve existing SwiftUI code
- Audit current implementation against the Topic Router topics
- Replace deprecated APIs with modern equivalents from
references/latest-apis.md - Refactor hot paths to reduce unnecessary state updates
- Extract complex view bodies into separate subviews
- Suggest image downsampling when
is encountered (optional optimization, seeUIImage(data:)
)references/image-optimization.md
Implement new SwiftUI feature
- Design data flow first: identify owned vs injected state
- Structure views for optimal diffing (extract subviews early)
- Apply correct animation patterns (implicit vs explicit, transitions)
- Use
for all tappable elements; add accessibility grouping and labelsButton - Gate version-specific APIs with
and provide fallbacks#available
Topic Router
Consult the reference file for each topic relevant to the current task:
| Topic | Reference |
|---|---|
| State management | |
| View composition | |
| Performance | |
| Lists and ForEach | |
| Layout | |
| Sheets and navigation | |
| ScrollView | |
| Animations (basics) | |
| Animations (transitions) | |
| Animations (advanced) | |
| Accessibility | |
| Swift Charts | |
| Charts accessibility | |
| Image optimization | |
| Liquid Glass (iOS 26+) | |
| macOS scenes | |
| macOS window styling | |
| macOS views | |
| Deprecated API lookup | |
Correctness Checklist
These are hard rules -- violations are always bugs:
-
properties are@Stateprivate -
only where a child modifies parent state@Binding - Passed values never declared as
or@State
(they ignore updates)@StateObject -
for view-owned objects;@StateObject
for injected@ObservedObject - iOS 17+:
with@State
;@Observable
for injected observables needing bindings@Bindable -
uses stable identity (neverForEach
for dynamic content).indices - Constant number of views per
elementForEach -
always includes the.animation(_:value:)
parametervalue - iOS 26+ APIs gated with
and fallback provided#available -
present in files using chart typesimport Charts
References
-- Read first for every task. Deprecated-to-modern API transitions (iOS 15+ through iOS 26+)references/latest-apis.md
-- Property wrappers, data flow,references/state-management.md
migration@Observable
-- View extraction, container patterns,references/view-structure.md@ViewBuilder
-- Hot-path optimization, update control,references/performance-patterns.md_logChanges()
-- ForEach identity, Table (iOS 16+), inline filtering pitfallsreferences/list-patterns.md
-- Layout patterns, GeometryReader alternativesreferences/layout-best-practices.md
-- VoiceOver, Dynamic Type, grouping, traitsreferences/accessibility-patterns.md
-- Implicit/explicit animations, timing, performancereferences/animation-basics.md
-- View transitions,references/animation-transitions.md
,matchedGeometryEffectAnimatable
-- Phase/keyframe animations (iOS 17+),references/animation-advanced.md
macro (iOS 26+)@Animatable
-- Swift Charts marks, axes, selection, styling, Chart3D (iOS 26+)references/charts.md
-- Charts VoiceOver, Audio Graph, fallback strategiesreferences/charts-accessibility.md
-- Sheets, NavigationSplitView, Inspectorreferences/sheet-navigation-patterns.md
-- ScrollViewReader, programmatic scrollingreferences/scroll-patterns.md
-- AsyncImage, downsampling, cachingreferences/image-optimization.md
-- iOS 26+ Liquid Glass effects and fallback patternsreferences/liquid-glass.md
-- Settings, MenuBarExtra, WindowGroup, multi-windowreferences/macos-scenes.md
-- Toolbar styles, window sizing, Commandsreferences/macos-window-styling.md
-- HSplitView, Table, PasteButton, AppKit interopreferences/macos-views.md