
Swiftui Patterns
If you're building SwiftUI apps targeting iOS 17+, this gives Claude the modern patterns: @Observable instead of ObservableObject, @Bindable for two-way binding, and .task for async work that auto-cancels. It includes a solid decision table for when to use @State vs @Bindable vs @Environment, plus reference guides for MVVM architecture, NavigationStack, UIKit interop, and accessibility. The "Common Mistakes" section is worth the price of admission alone, calling out things like NavigationPath corruption and UIKit memory leaks. Honestly just a well-organized cheat sheet for the iOS 17 SwiftUI rewrite that saves you from Stack Overflow rabbit holes.
- skills.sh installs
- 260
- GitHub stars
- 233
- last updated
- Aug 21, 2026
Install
$ npx -y skills add johnrogers/claude-swift-engineering --skill swiftui-patterns --agent claude-codeInstalls into .claude/skills of the current project.
Files
SwiftUI Patterns (iOS 17+)
SwiftUI 17+ removes ObservableObject boilerplate with @Observable, simplifies environment injection with @Environment, and introduces task-based async patterns. The core principle: use Apple's modern APIs instead of reactive libraries.
Overview
Quick Reference
| Need | Use (iOS 17+) | NOT |
|---|---|---|
| Observable model | @Observable | ObservableObject |
| Published property | Regular property | @Published |
| Own state | @State | @StateObject |
| Passed model (binding) | @Bindable | @ObservedObject |
| Environment injection | environment(_:) | environmentObject(_:) |
| Environment access | @Environment(Type.self) | @EnvironmentObject |
| Async on appear | .task { } | .onAppear { Task {} } |
| Value change | onChange(of:initial:_:) | onChange(of:perform:) |
Core Workflow
Sponsors
Details
- Repository
- github.com/johnrogers/claude-swift-engineering
- Categories
- Code Review & Quality, Mobile Development, Design & UI/UX, Video & Audio Editing
- First seen
- Jun 3, 2026