Agent Skills: Swift/SwiftUI Refactor (Modular MVVM-C)

Swift and SwiftUI refactoring patterns aligned with the iOS 26 / Swift 6.2 clinic modular MVVM-C architecture (Airbnb + OLX SPM layout). Enforces @Observable ViewModels/coordinators, App-target `DependencyContainer` + route shells, Domain repository/coordinator/error-routing protocols, and Data-owned I/O with stale-while-revalidate plus optimistic queued sync boundaries. Use when refactoring existing SwiftUI code into the clinic architecture.

UncategorizedID: pproenca/dot-skills/swift-refactor

Install this agent skill to your local

pnpm dlx add-skill https://github.com/pproenca/dot-skills/tree/HEAD/skills/.experimental/swift-refactor

Skill Files

Browse the full folder contents for swift-refactor.

Download Skill

Loading file tree…

skills/.experimental/swift-refactor/SKILL.md

Skill Metadata

Name
swift-refactor
Description
Swift and SwiftUI refactoring patterns aligned with the iOS 26 / Swift 6.2 clinic modular MVVM-C architecture (Airbnb + OLX SPM layout). Enforces @Observable ViewModels/coordinators, App-target `DependencyContainer` + route shells, Domain repository/coordinator/error-routing protocols, and Data-owned I/O with stale-while-revalidate plus optimistic queued sync boundaries. Use when refactoring existing SwiftUI code into the clinic architecture.

Swift/SwiftUI Refactor (Modular MVVM-C)

Comprehensive refactoring guide for migrating Swift/SwiftUI code to modular MVVM-C with local SPM package boundaries and App-target composition root wiring.

Mandated Architecture Stack

┌───────────────────────────────────────────────────────────────┐
│ App target: DependencyContainer, Coordinators, Route Shells   │
├───────────────────────────────────────────────────────────────┤
│ Feature modules: View + ViewModel (Domain + DesignSystem deps)│
├───────────────────────────────────────────────────────────────┤
│ Data package: repositories, remote/local stores, sync, retry  │
├───────────────────────────────────────────────────────────────┤
│ Domain package: models, repository/coordinator/error protocols │
└───────────────────────────────────────────────────────────────┘

Dependency Rule: Feature modules never import Data and never import sibling features.

Clinic Architecture Contract (iOS 26 / Swift 6.2)

All guidance in this skill assumes the clinic modular MVVM-C architecture:

  • Feature modules import Domain + DesignSystem only (never Data, never sibling features)
  • App target is the convergence point and owns DependencyContainer, concrete coordinators, and Route Shell wiring
  • Domain stays pure Swift and defines models plus repository, *Coordinating, ErrorRouting, and AppError contracts
  • Data owns SwiftData/network/sync/retry/background I/O and implements Domain protocols
  • Read/write flow defaults to stale-while-revalidate reads and optimistic queued writes
  • ViewModels call repository protocols directly (no default use-case/interactor layer)

When to Apply

Reference these guidelines when:

  • Migrating from deprecated SwiftUI APIs (ObservableObject, NavigationView, old onChange)
  • Restructuring state management to use @Observable ViewModels
  • Adding @Equatable diffing to views for performance
  • Decomposing large views into 10-node maximum bodies
  • Refactoring navigation to coordinator + route shell pattern
  • Refactoring to Domain/Data/Feature/App package boundaries
  • Setting up dependency injection through DependencyContainer
  • Improving list/collection scroll performance
  • Replacing manual Task management with .task(id:) and cancellable loading

Non-Negotiable Constraints (iOS 26 / Swift 6.2)

  • @Observable ViewModels/coordinators, ObservableObject / @Published never
  • NavigationStack is owned by App-target route shells and coordinators
  • @Equatable macro on every view, AnyView never
  • Domain defines repository/coordinator/error-routing protocols; no framework-coupled I/O
  • No dedicated use-case/interactor layer; ViewModels call repository protocols directly
  • Views never access repositories directly

Rule Categories by Priority

| Priority | Category | Impact | Prefix | Rules | |----------|----------|--------|--------|-------| | 1 | View Identity & Diffing | CRITICAL | diff- | 4 | | 2 | API Modernization | CRITICAL | api- | 7 | | 3 | State Architecture | CRITICAL | state- | 6 | | 4 | View Composition | HIGH | view- | 7 | | 5 | Navigation & Coordination | HIGH | nav- | 5 | | 6 | Layer Architecture | HIGH | layer- | 5 | | 7 | Architecture Patterns | HIGH | arch- | 5 | | 8 | Dependency Injection | MEDIUM-HIGH | di- | 2 | | 9 | Type Safety & Protocols | MEDIUM-HIGH | type- | 4 | | 10 | List & Collection Performance | MEDIUM | list- | 4 | | 11 | Async & Data Flow | MEDIUM | data- | 3 | | 12 | Swift Language Fundamentals | MEDIUM | swift- | 8 |

Quick Reference

1. View Identity & Diffing (CRITICAL)

2. API Modernization (CRITICAL)

3. State Architecture (CRITICAL)

4. View Composition (HIGH)

5. Navigation & Coordination (HIGH)

6. Layer Architecture (HIGH)

7. Architecture Patterns (HIGH)

8. Dependency Injection (MEDIUM-HIGH)

9. Type Safety & Protocols (MEDIUM-HIGH)

10. List & Collection Performance (MEDIUM)

11. Async & Data Flow (MEDIUM)

12. Swift Language Fundamentals (MEDIUM)

How to Use

Read individual reference files for detailed explanations and code examples:

Reference Files

| File | Description | |------|-------------| | references/_sections.md | Category definitions and ordering | | assets/templates/_template.md | Template for new rules |