dimillian/swiftui-view-refactor

Refactorisez et révisez des fichiers de vues SwiftUI avec des bonnes pratiques strictes : sous-vues dédiées, flux de données MV plutôt que MVVM, arbres de vues stables, injection de dépendances explicite et utilisation correcte d'Observation. À utiliser pour nettoyer une vue SwiftUI, diviser de longs corps, supprimer des actions ou effets de bord en ligne, réduire les helpers `some View` calculés, ou standardiser `@Observable` et les modèles d'initialisation de view model.

Qu'est-ce que swiftui-view-refactor ?

Ce skill pour agent IA (Claude Code, Cursor, etc.) permet de refactoriser et réviser des fichiers de vues SwiftUI en appliquant un ensemble de principes d'architecture forte. Il cible le nettoyage de vues trop longues, le fractionnement en sous-vues dédiées, l'adoption du flux de données MV (Model-View) plutôt que MVVM, la stabilisation de l'arbre de vues, l'injection explicite des dépendances, et l'utilisation correcte du framework Observation. Utile pour supprimer les actions ou effets de bord en ligne dans les vues, réduire les helpers `some View` superflus, et standardiser l'emploi de `@Observable` ainsi que les patterns d'initialisation des view models. Le skill repose sur la documentation SKILL.md qui fournit des guidelines précises, des exemples de code avant/après, et des vérifications à effectuer pour garantir une architecture cohérente et maintenable dans un projet SwiftUI. Il fonctionne avec des agents comme Claude Code, Cursor, ou Codex, et s'intègre aux workflows de développement iOS et macOS.

Compatible avec~Claude Code~Codex CLI~Cursor
Part ofMobile
npx skills add https://github.com/dimillian/skills/tree/main/skills/swiftui-view-refactor

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait swiftui-view-refactor ?

Refactorisez et révisez des fichiers de vues SwiftUI avec des bonnes pratiques strictes pour des sous-vues dédiées de petite taille, un flux de données MV plutôt que MVVM, des arbres de vues stables, une injection de dépendances explicite et une utilisation correcte d'Observation. À utiliser lors du nettoyage d'une vue SwiftUI, pour diviser de longs corps, supprimer des actions ou effets de bord en ligne, réduire les helpers some View calculés, ou standardiser les motifs @Observable et d'initialisation de view model.

Principes

  • Sous-vues dédiées : Extrayez les parties de votre vue en sous-vues nommées et de petite taille. Évitez les vues uniques gigantesques.
  • Flux MV plutôt que MVVM : Préférez le couple Model-View (MV) pour la logique et les données, en évitant la complexité inutile du MVVM.
  • Arbres de vues stables : Assurez-vous que l'arbre de vues reste stable entre les rendus. Évitez les changements conditionnels ou dynamiques qui cassent les transitions et animations.
  • Injection de dépendances explicite : Passez les dépendances (services, configurations) explicitement comme paramètres, évitez les variables globales ou les singletons non nécessaires.
  • Observation correcte : Utilisez @Observable pour les modèles et suivez les règles du framework Observation (propriétés observables, pas de mutations dans les vues).

Étapes de refactorisation

  1. Identifier le problème : Sur quels aspects de la vue souhaitez-vous travailler ? Longueur excessive, modifications d'état en ligne, helpers some View surutilisés, ou initialisation non standard.
  2. Découper en sections : Divisez la vue en parties logiques (titre, contenu, boutons, etc.) et extrayez-les en sous-vues si nécessaire.
  3. Réduire les helpers some View : Transformez les helpers some View en vues séparées, nommées et réutilisables.
  4. Supprimer les actions et effets de bord en ligne : Déplacez la logique dans le modèle ou dans des fonctions dédiées du view model (si vous utilisez cette architecture). Privilégiez le passage de fermetures ou de méthodes.
  5. Standardiser l'initialisation : Si vous utilisez un view model, passez-le en paramètre (@StateObject ou @ObservedObject) et évitez l'initialisation à l'intérieur du body.
  6. Vérifier les @Observable : Assurez-vous que tous les états observables sont marqués avec @Observable ou @Published selon le besoin, et que les vues ne mutent pas directement les observables.

Exemples

Avant refactorisation

struct ContentView: View {
    @State private var count = 0
    @State private var showDetail = false
    var body: some View {
        VStack {
            HStack {
                Text("Titre")
                    .font(.title)
                Spacer()
                Button("Action") {
                    count += 1
                    showDetail.toggle()
                }
            }
            .padding()
            if showDetail {
                VStack {
                    Text("Détail")
                        .font(.body)
                    Text("Compteur : \(count)")
                }
            }
        }
    }
}

Après refactorisation

struct ContentView: View {
    @State private var count = 0
    @State private var showDetail = false

    var body: some View {
        VStack {
            HeaderView(showDetail: $showDetail, count: $count)
            if showDetail {
                DetailView(count: count)
            }
        }
    }
}

struct HeaderView: View {
    @Binding var showDetail: Bool
    @Binding var count: Int

    var body: some View {
        HStack {
            Text("Titre")
                .font(.title)
            Spacer()
            Button("Action") {
                count += 1
                showDetail.toggle()
            }
        }
        .padding()
    }
}

struct DetailView: View {
    let count: Int

    var body: some View {
        VStack {
            Text("Détail")
                .font(.body)
            Text("Compteur : \(count)")
        }
    }
}

Vérifications à faire

  • Chaque sous-vue a-t-elle un nom clair et descriptif ?
  • Les vues ne contiennent-elles pas d'actions ou d'effets de bord dans le body (sauf pour les boutons ou gestes) ?
  • Les helpers some View sont-ils tous extraits en vues séparées ?
  • L'injection de dépendances est-elle explicite (paramètres passés aux vues) ?
  • @Observable ou @Published sont-ils utilisés correctement sans mutations dans les vues ?
  • L'arbre de vues est-il stable (pas de changements conditionnels qui cassent les transitions) ?

Références

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

dimillian/app-store-changelog

Create user-facing App Store release notes by collecting and summarizing all user-impacting changes since the last git tag (or a specified ref). Use when asked to generate a comprehensive release changelog, App Store "What's New" text, or release notes based on git history or tags.

dimillian/ios-debugger-agent

Use XcodeBuildMCP to build, run, launch, and debug the current iOS project on a booted simulator. Trigger when asked to run an iOS app, interact with the simulator UI, inspect on-screen state, capture logs/console output, or diagnose runtime behavior using XcodeBuildMCP tools.

dimillian/macos-spm-app-packaging

Scaffold, build, and package SwiftPM-based macOS apps without an Xcode project. Use when you need a from-scratch macOS app layout, SwiftPM targets/resources, a custom .app bundle assembly script, or signing/notarization/appcast steps outside Xcode.

dimillian/swift-concurrency-expert

Swift Concurrency review and remediation for Swift 6.2+. Use when asked to review Swift Concurrency usage, improve concurrency compliance, or fix Swift concurrency compiler errors in a feature or file. Concrete actions include adding Sendable conformance, applying @MainActor annotations, resolving actor isolation warnings, fixing data race diagnostics, and migrating completion handlers to async/await.

dimillian/swiftui-liquid-glass

Implement, review, or improve SwiftUI features using the iOS 26+ Liquid Glass API. Use when asked to adopt Liquid Glass in new SwiftUI UI, refactor an existing feature to Liquid Glass, or review Liquid Glass usage for correctness, performance, and design alignment.

dimillian/swiftui-performance-audit

Audit and improve SwiftUI runtime performance from code review and architecture. Use for requests to diagnose slow rendering, janky scrolling, high CPU/memory usage, excessive view updates, or layout thrash in SwiftUI apps, and to provide guidance for user-run Instruments profiling when code review alone is insufficient.

dimillian/swiftui-ui-patterns

Best practices and example-driven guidance for building SwiftUI views and components, including navigation hierarchies, custom view modifiers, and responsive layouts with stacks and grids. Use when creating or refactoring SwiftUI UI, designing tab architecture with TabView, composing screens with VStack/HStack, managing @State or @Binding, building declarative iOS interfaces, or needing component-specific patterns and examples.

Skills associés