mcpField
S
swift-refactor

swift-refactor

github.com/pproencaDevelopment218278 installsUpdated 11w ago
Repository

About swift-refactor

A reference skill for refactoring Swift and SwiftUI apps into modular MVVM-C with Domain, Data, Feature, and App boundaries. It is intended for developers modernizing APIs, state, navigation, and performance under its iOS 26 / Swift 6.2 architecture contract.

Key features

  1. 01Modular MVVM-C package guidance
  2. 02SwiftUI API modernization rules
  3. 03Observable ViewModel and state guidance
  4. 04Coordinator-based navigation patterns
  5. 05View identity and list performance rules

Use cases

  1. 01Migrating legacy SwiftUI navigation and state APIs
  2. 02Splitting an app into Domain, Data, Feature, and App modules
  3. 03Refactoring views and lists for better diffing
  4. 04Replacing manual task handling with cancellable loading

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/pproenca/dot-skills --skill swift-refactor

After installing, type/swift-refactorin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

metadata.json
assets/templates/
_template.md
references/
_sections.md
api-alert-confirmation-dialog.md
api-environment-object-removal.md
api-list-foreach-identifiable.md
api-navigationstack-migration.md
api-observable-macro.md
api-onchange-signature.md
api-toolbar-migration.md
arch-environment-key-injection.md
arch-feature-module-extraction.md
arch-model-view-separation.md
arch-protocol-dependencies.md
arch-viewmodel-elimination.md
data-cancellation.md
data-error-loadable.md
data-task-modifier.md
di-container-composition.md
di-mock-testing.md
diff-closure-skip.md
diff-equatable-views.md
diff-identity-stability.md
diff-printchanges-debug.md
layer-dependency-rule.md
layer-no-view-repository.md
layer-repository-protocol.md
layer-usecase-protocol.md
layer-viewmodel-boundary.md
list-constant-viewcount.md

Details

From the project README

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

PriorityCategoryImpactPrefixRules
1View Identity & DiffingCRITICALdiff-4
2API ModernizationCRITICALapi-7
3State ArchitectureCRITICALstate-6
4View CompositionHIGHview-7
5Navigation & CoordinationHIGHnav-5
6Layer ArchitectureHIGHlayer-5
7Architecture PatternsHIGHarch-5
8Dependency InjectionMEDIUM-HIGHdi-2
9Type Safety & ProtocolsMEDIUM-HIGHtype-4
10List & Collection PerformanceMEDIUMlist-4
11Async & Data FlowMEDIUMdata-3
12Swift Language FundamentalsMEDIUMswift-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

FileDescription
references/_sections.mdCategory definitions and ordering
assets/templates/_template.mdTemplate for new rules

Comments

Markdown supported