
swiftui-mvvm-pattern
by co-labs-co
Central skills repository for ContextHarness - curated agent skills and workflows
SKILL.md
name: swiftui-mvvm-pattern version: 0.1.0 author: cmtzco description: iOS SwiftUI MVVM architectural pattern implementation guide. When to use: when creating new views, implementing data binding between UI and business logic, adding screens to SwiftUI apps, or working with state management in iOS. What problems it solves: provides clear separation of concerns, enables reusable business logic, makes state management predictable with @Published properties, and follows iOS best practices for SwiftUI apps.
SwiftUI MVVM Pattern
Overview
The Model-View-ViewModel (MVVM) pattern is standard architectural approach for SwiftUI applications. This skill guides you through implementing ViewModels that expose @Published properties, Views that use @StateObject to inject ViewModels, and proper data flow between the two layers.
Identified Patterns
The following patterns were identified in this codebase that this skill addresses:
Pattern 1: ObservableObject ViewModel
- Location:
DadBrain/DadBrain/ViewModels/MemoryListViewModel.swift - Description: Class conforming to ObservableObject with @Published properties for state management
- Frequency: Found in 5 ViewModels (MemoryListViewModel, VoiceRecorder, PhotoScanner, KeywordExtractor, MemorySummarizer)
Pattern 2: @StateObject View Injection
- Location:
DadBrain/DadBrain/Views/MemoriesListView.swift - Description: SwiftUI Views using @StateObject to create and own ViewModels
- Frequency: Found in 7 View files using consistent injection pattern
Pattern 3: @Environment Object Dependency Injection
- Location:
DadBrain/DadBrain/Views/MemoriesListView.swift - Description: Using @Environment for shared dependencies like Core Data contexts
- Frequency: Used across multiple views for PersistenceController
TODO: Implementation
This skeleton skill needs Phase 2 refinement. Areas to develop:
Workflow Instructions
- Create ViewModel class with ObservableObject
- Add @Published properties for observable state
- Create View with @StateObject injection
- Bind View UI to ViewModel properties
- Handle user actions in ViewModel methods
Best Practices
- When to use @StateObject vs @ObservedObject
- Dependency injection patterns
- Testing ViewModels in isolation
- Handling async operations in ViewModels
Common Pitfalls
- Memory leaks with improper object lifecycle
- State synchronization issues
- Over-complicating ViewModels with view logic
- Missing @Published on properties that should trigger updates
Suggested Resources
Based on codebase analysis, consider adding:
Scripts (scripts/)
mvvm-viewmodel-generator.swift- Generates ViewModel boilerplate from entity definitionsmvvm-view-generator.swift- Creates View scaffolds with proper StateObject injection
References (references/)
apple-swiftui-data-flow.md- Apple's official documentation on data flowstateobject-vs-observedobject.md- When to use each property wrappermvvm-testing-patterns.md- Testing strategies for ViewModels
Assets (assets/)
viewmodel-templates/- Swift templates for different ViewModel scenariosview-templates/- SwiftUI View templates with MVVM structure
Evidence from Codebase
| File | Pattern | Relevance |
|---|---|---|
DadBrain/DadBrain/ViewModels/MemoryListViewModel.swift | ObservableObject with @Published properties | Core ViewModel pattern example |
DadBrain/DadBrain/ViewModels/VoiceRecorder.swift | Async operations in ViewModel | Shows handling of Speech Framework |
DadBrain/DadBrain/Views/MemoriesListView.swift | @StateObject and @Environment usage | View layer pattern example |
DadBrain/DadBrain/Views/MemoryDetailView.swift | Navigation and data passing | Shows navigation between MVVM screens |
Refinement Priority
Score: 8.4/10 Priority: High
Refinement Tasks
- Research Apple's SwiftUI data flow documentation
- Create mvvm-viewmodel-generator script
- Document state management patterns and property wrappers
- Add examples from MemoryListViewModel and other ViewModels
- Create testing guide for ViewModels
Skeleton generated by ContextHarness /baseline Run Phase 2 skill refinement to complete implementation
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon