Skip to main content
skill CX Codex

ios-dev — Claude Code skill: what it does, how to install

Entry point for iOS and SwiftUI tasks. Coordinates pattern guides, correctness checks, and Apple framework references for code reviews and feature development.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add Prisma-Labs-Dev/apple-skills --skill ios-dev -a claude-code
Open on GitHub

What ios-dev does

The skill coordinates the Apple skills collection. Instead of searching through separate references manually, it tells the agent which guide or framework documentation to pull for state management or navigation. Both SwiftUI and UIKit are treated as first-class tools without enforcing architectures like TCA or MVVM.

It defines clear workflows for reviewing code and building new features. A mandatory correctness checklist catches critical bugs: missing @MainActor on @Observable classes in Swift 6, @Binding misuse, unconstrained ForEach identities, and property wrapper conflicts.

Placing @AppStorage or @Query inside an @Observable model requires @ObservationIgnored, or the compiler macro will fail. Enforcing this rule early prevents silent runtime state desyncs.

What it helps with

  • coordinate relevant Apple framework references and pattern guides
  • audit SwiftUI code against a strict correctness checklist
  • structure state management before building new views
  • resolve Swift 6 concurrency and observation macro conflicts

Example prompts for the agent

  • Review this SwiftUI view against the ios-dev correctness checklist
  • Plan the data flow and subviews for a new settings screen
  • Find the recommended guide and references for SwiftUI navigation and sheets

How to install ios-dev

1Skills CLI (Vercel)

npx skills add Prisma-Labs-Dev/apple-skills --skill ios-dev -a claude-code

2Manually: put the files in place

~/.claude/skills/ios-dev/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/ios-dev/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about ios-dev

How do I install ios-dev in Claude Code?

Run npx skills add Prisma-Labs-Dev/apple-skills --skill ios-dev -a claude-code. The skill file will be placed in ~/.claude/skills/ios-dev/SKILL.md.

What does the ios-dev skill do?

It acts as the coordinator for iOS development tasks. The skill guides agents through structured workflows, routes questions to specific framework guides, and enforces rules for SwiftUI state and Swift 6 concurrency.

Does ios-dev enforce a specific app architecture?

No, it avoids mandating architectures such as MVVM, VIPER, or TCA. It encourages separating view code from business logic while leaving structural patterns to your discretion.

Source text

SKILL.md · MIT
---
name: ios-dev
user-invocable: true
description: "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."
---

# 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

- SwiftUI and UIKit are both first-class — pick whichever fits the task. UIKit is a valid choice whenever it gives more control or flexibility; when bridging the two, watch state sync, lifecycle, and animation/environment boundaries.
- Do not enforce specific architectures (MVVM, VIPER, MV, TCA, etc.) — encourage separating business logic from views without mandating how
- Hold a high bar for UI craft: apps should feel current-generation — fluid, design-forward, alive. Sweat the tiny details. Custom components, novel interactions, and custom Metal shaders are all in-bounds when they serve the experience; system defaults are a floor, not a ceiling.
- Do not prescribe how that craft is delivered — no house style, no "Apple-approved" gatekeeping, no aesthetic checklists. Design direction is your own judgment call, made per app. The `hig` and `ios-liquid-glass` skills document what the system provides; they are references, not style mandates. **When the task is designing a screen or making it look good, there is no doc to route to** — design from your own taste; grep references only when you need API mechanics or a factual minimum (e.g. hit-target sizes).
- 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

1. Read the code and identify which topics apply
2. Run the **Correctness Checklist** below — violations are bugs
3. Use the **Topic Router** to load the relevant guide for each topic
4. For API correctness, grep the matching framework reference skill

### Improve existing code

1. Run the correctness checklist first
2. For performance issues: use `guide-swiftui-performance-audit`
3. For navigation, state, or pattern questions: use Apple's `swiftui-specialist` (shipped with Xcode 27; exported to the user skills dir), then the `swiftui` API reference
4. For API details: grep the matching framework reference skill

### Build a new feature

1. Design data flow first — identify owned vs. injected state
2. For UI patterns and app wiring: use Apple's `swiftui-specialist`, then the `swiftui` API reference
3. For API details: grep the matching framework reference skill
4. Structure views for optimal diffing — extract subviews early
5. Run the correctness checklist before finishing

## 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 | `swiftui-specialist` (Apple, Xcode 27) | `swiftui` (state.md, binding.md, observation.md, environment.md) |
| View composition | — | `swiftui` (view-protocol.md) |
| Performance | `guide-swiftui-performance-audit` | — |
| Navigation | `swiftui-specialist` (Apple, Xcode 27) | `swiftui` (navigationstack.md, navigationsplitview.md, navigationlink.md) |
| Sheets & modals | `swiftui-specialist` (Apple, Xcode 27) | `swiftui` (sheet.md, inspector.md, alert.md, confirmationdialog.md) |
| Lists & ForEach | `swiftui-specialist` (Apple, Xcode 27) | `swiftui` (list.md) |
| ScrollView | `swiftui-specialist` (Apple, Xcode 27) | `swiftui` (scrollview.md) |
| Forms & input | — | `swiftui` (form.md, textfield.md, picker.md, toggle.md, slider.md) |
| Charts | `guide-swiftui-charts` | `swiftui` (chart.md, charts-overview.md) |
| Animations | `swiftui-specialist` (Apple, Xcode 27) | `swiftui` (swiftui-overview.md) |
| Layout | `swiftui-specialist` (Apple, Xcode 27) | `swiftui` (geometryreader.md, grid.md, hstack.md, vstack.md, zstack.md, spacer.md) |
| TabView | `swiftui-specialist` (Apple, Xcode 27) | `swiftui` (tabview.md) |
| Liquid Glass | — | `ios-liquid-glass` |
| Accessibility | `swiftui-specialist` (Apple, Xcode 27) | `hig` (a11y/ergonomic facts) |
| macOS apps | `guide-macos-spm-packaging` | `swiftui`, `uikit` |
| Data persistence | `guide-swiftdata` | `swiftdata` |
| Testing | `guide-swift-testing` | `swift-testing`, `xcuitest` |
| Concurrency | `guide-swift-concurrency` | `swift-concurrency` |
| In-app purchases | — | `storekit` |
| Maps | — | `mapkit` |
| Health data | — | `healthkit` |
| Notifications | — | `usernotifications` |
| App Intents / Siri | `app-intents-specialist`, `app-intents-whats-new-27` (Apple, Xcode 27) | — |
| Widgets | — | `widgetkit` |
| App Store metadata | `apple-aso` | — |
| Finding docs | `apple-docs-index` | — |

## Correctness Checklist

These are hard rules — violations are always bugs:

- [ ] `@State` properties are `private`
- [ ] `@Binding` only where a child needs to mutate parent state
- [ ] Values passed in are never declared as `@State` — they silently ignore updates
- [ ] Use `@State` with `@Observable` classes — not `@StateObject` or `ObservableObject`
- [ ] Use `@Bindable` for injected observables that need bindings
- [ ] `ForEach` uses stable identity — never `.indices` on dynamic content
- [ ] Each `ForEach` element produces a constant number of views
- [ ] `.animation(_:value:)` always includes the `value:` parameter
- [ ] `@FocusState` properties are `private`
- [ ] `@Observable` classes are `@MainActor` — Swift 6 strict concurrency requires it
- [ ] Property wrappers (`@AppStorage`, `@SceneStorage`, `@Query`) inside `@Observable` classes are marked `@ObservationIgnored` — they conflict with the macro and cause compiler errors
- [ ] No business logic in `body` — use `.task`, `.onChange`, or methods
- [ ] No `AnyView` unless truly unavoidable — fix with better composition

## Related Skills

**System API reference:**
- `/ios-liquid-glass` — Liquid Glass API reference

**Workflow guides:**
- `/swiftui-specialist` — Apple's SwiftUI best practices (Xcode 27): structure, data flow, environment, ForEach identity, localization, soft deprecations
- `/swiftui-whats-new-27` — iOS 27 SwiftUI changes (@State macro, @ContentBuilder, reorderable, toolbar overflow)
- `/guide-swiftui-charts` — Marks, axes, selection, styling, accessibility
- `/guide-swiftui-performance-audit` — Diagnose and fix performance issues
- `/guide-swift-testing` — Swift Testing patterns, async tests, common agent mistakes
- `/guide-swift-concurrency` — Concurrency patterns, actors, diagnostics, bug patterns
- `/guide-swiftdata` — SwiftData patterns, predicates, CloudKit constraints
- `/guide-macos-spm-packaging` — Build macOS apps with SwiftPM

**Utilities:**
- `/apple-docs-index` — Find the right Apple documentation
- `/apple-aso` — App Store Optimization

© Prisma-Labs-Dev · MIT · Prisma-Labs-Dev/apple-skills

Similar skills

Everything for Mobile →

From the same set22

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor