Apple-skills ios-dev
Start here for any iOS or SwiftUI task. Coordinates best-practice guides, correctness checks, and full Apple API references. Use before navigating to other Apple skills — for building, reviewing, refactoring, or debugging iOS apps.
install
source · Clone the upstream repo
git clone https://github.com/vabole/apple-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/vabole/apple-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/ios-dev" ~/.claude/skills/vabole-apple-skills-ios-dev && rm -rf "$T"
manifest:
skills/ios-dev/SKILL.mdsource content
iOS Development
Start here. This skill coordinates the Apple skills collection — it tells you which skill to use and when, so you get opinionated guidance and full API references together.
Operating Rules
- Do not bridge UIKit/AppKit when SwiftUI has a native solution — bridging adds state-sync bugs, breaks SwiftUI composition (animations, environment), and complicates lifecycle management
- Do not enforce specific architectures (MVVM, VIPER, MV, TCA, etc.) — encourage separating business logic from views without mandating how
- Liquid Glass is the default iOS 26+ design system — use system glass behaviors naturally, but add custom
modifiers only when they serve the UI, not for decorationGlassEffect - Present performance optimizations as suggestions backed by reasoning, not blanket requirements
- When you need exact API details, grep the framework reference skills — they contain full Apple documentation
Task Workflows
Review existing code
- Read the code and identify which topics apply
- Run the Correctness Checklist below — violations are bugs
- Use the Topic Router to load the relevant guide for each topic
- For API correctness, grep the matching framework reference skill
Improve existing code
- Run the correctness checklist first
- For performance issues: use
guide-swiftui-performance-audit - For view structure / long bodies: use
guide-swiftui-view-refactor - For navigation, state, or pattern questions: use
guide-swiftui-ui-patterns - For visual quality: use
ios-ui-craft - For API details: grep the matching framework reference skill
Build a new feature
- Design data flow first — identify owned vs. injected state
- For UI patterns and app wiring: use
guide-swiftui-ui-patterns - For API details: grep the matching framework reference skill
- Structure views for optimal diffing — extract subviews early
- Run the correctness checklist before finishing
- For visual polish: use
ios-ui-craft
Topic Router
The Guide column has opinionated, short pattern guides. The API Reference column has full Apple documentation as grepable Markdown — use
apple-docs-index to find which framework has what.
| Topic | Guide | API Reference |
|---|---|---|
| State management | | (state.md, binding.md, observation.md, environment.md) |
| View composition | | (view-protocol.md) |
| Performance | | — |
| Navigation | | (navigationstack.md, navigationsplitview.md, navigationlink.md) |
| Sheets & modals | | (sheet.md, inspector.md, alert.md, confirmationdialog.md) |
| Lists & ForEach | | (list.md) |
| ScrollView | | (scrollview.md) |
| Forms & input | — | (form.md, textfield.md, picker.md, toggle.md, slider.md) |
| Charts | | (chart.md, charts-overview.md) |
| Animations | | (swiftui-overview.md) |
| Layout | | (geometryreader.md, grid.md, hstack.md, vstack.md, zstack.md, spacer.md) |
| TabView | | (tabview.md) |
| Liquid Glass | | |
| Visual design | | |
| Accessibility | | |
| macOS apps | | , |
| Data persistence | | |
| Testing | | , |
| Concurrency | | |
| In-app purchases | — | |
| Maps | — | |
| Health data | — | |
| Notifications | — | |
| App Intents / Siri | — | |
| Widgets | — | |
| App Store metadata | | — |
| Finding docs | | — |
Correctness Checklist
These are hard rules — violations are always bugs:
-
properties are@Stateprivate -
only where a child needs to mutate parent state@Binding - Values passed in are never declared as
— they silently ignore updates@State - Use
with@State
classes — not@Observable
or@StateObjectObservableObject - Use
for injected observables that need bindings@Bindable -
uses stable identity — neverForEach
on dynamic content.indices - Each
element produces a constant number of viewsForEach -
always includes the.animation(_:value:)
parametervalue: -
properties are@FocusStateprivate -
classes are@Observable
— Swift 6 strict concurrency requires it@MainActor - Property wrappers (
,@AppStorage
,@SceneStorage
) inside@Query
classes are marked@Observable
— they conflict with the macro and cause compiler errors@ObservationIgnored - No business logic in
— usebody
,.task
, or methods.onChange - No
unless truly unavoidable — fix with better compositionAnyView
Related Skills
Design trio:
— Build visually striking interfaces (produces code)/ios-ui-craft
— Design advice and rationale (no code)/ios-design-consultant
— Liquid Glass API reference/ios-liquid-glass
Workflow guides:
— Navigation, state, sheets, component patterns/guide-swiftui-ui-patterns
— Implicit/explicit animation, transitions, keyframes/guide-swiftui-animations
— Marks, axes, selection, styling, accessibility/guide-swiftui-charts
— View structure, extraction, MV patterns/guide-swiftui-view-refactor
— Diagnose and fix performance issues/guide-swiftui-performance-audit
— Swift Testing patterns, async tests, common agent mistakes/guide-swift-testing
— Concurrency patterns, actors, diagnostics, bug patterns/guide-swift-concurrency
— SwiftData patterns, predicates, CloudKit constraints/guide-swiftdata
— Build macOS apps with SwiftPM/guide-macos-spm-packaging
Utilities:
— Find the right Apple documentation/apple-docs-index
— Simulator screenshots and device management/simulator-utils
— App Store Optimization/apple-aso