Back to list
nguyennamkkb

ios-architecture

by nguyennamkkb

0🍴 0📅 Jan 9, 2026

SKILL.md


name: ios-architecture description: SwiftUI project structure. Use when creating new projects, new features, new screens, file placement, file naming, folder organization, code refactoring, ViewModel separation, standard directory structure, MVVM, Clean Architecture. allowed-tools: Read, Grep, Glob, Bash

SwiftUI MVVM Structure

Table of Contents


1. Directory Structure

ProjectName/
├── App/
│   └── ProjectNameApp.swift
├── Core/
│   ├── Extensions/
│   ├── Utilities/
│   └── Network/
├── Features/
│   └── FeatureName/
│       ├── Views/
│       ├── ViewModels/
│       ├── Models/
│       └── Services/
├── Shared/
│   ├── Components/
│   ├── Styles/
│   └── Modifiers/
├── Resources/
└── Tests/

Folder Purposes

FolderPurpose
App/App entry point, app-level configuration
Core/Shared code across app (Extensions, Network, Utilities)
Features/Feature modules (Authentication, Home, Profile...)
Shared/Reusable UI components (Buttons, Cards, Modifiers)
Resources/Assets, Localizable, Info.plist
Tests/Unit tests, UI tests

2. Naming Conventions

Folder Naming

  • Features/ - Feature modules by functionality
  • Core/ - App-wide shared code
  • Shared/ - Reusable UI components
  • Services/ - Business logic, API services
  • Resources/ - Assets, Localizable, Info.plist

File Naming

TypeConventionExample
View[Feature]View.swiftLoginView.swift
ViewModel[Feature]ViewModel.swiftLoginViewModel.swift
Model[EntityName].swiftUser.swift
Service[Name]Service.swiftAuthService.swift
Extension[Type]+Extensions.swiftString+Extensions.swift
Component[DescriptiveName].swiftPrimaryButton.swift
Protocol[Name]Protocol.swiftAuthServiceProtocol.swift

Component Naming

TypeLocationExample
ButtonShared/Components/Buttons/PrimaryButton.swift
InputShared/Components/Inputs/PrimaryTextField.swift
CardShared/Components/Cards/ItemCard.swift
ModalShared/Components/Modals/ConfirmationModal.swift
FeedbackShared/Components/Feedback/LoadingView.swift

3. Organization Rules

MVVM Responsibilities

LayerResponsibilityContains
ViewUI only, no logicSwiftUI views, layout, styling
ViewModelState + business logic@Published properties, methods
ModelData structure onlyStructs, Codable, Identifiable
ServiceAPI + data persistenceNetwork calls, local storage

Rules

  1. Each feature is a separate folder in Features/
  2. Each feature has subfolders: Views/, ViewModels/, Models/, Services/
  3. View contains UI only, no business logic
  4. ViewModel contains state and business logic
  5. Model is data structure only
  6. Service handles API and data persistence
  7. Components in Shared/ are reusable across features

Dependencies Direction

View → ViewModel → Service → Model
  ↓         ↓          ↓
  UI      Logic      Data
  • View depends on ViewModel
  • ViewModel depends on Service
  • Service depends on Model
  • Model has no dependencies

4. Feature Example

Authentication Feature

Features/
└── Authentication/
    ├── Views/
    │   ├── LoginView.swift
    │   ├── RegisterView.swift
    │   └── Components/
    │       ├── AuthHeader.swift
    │       └── SocialLoginButtons.swift
    ├── ViewModels/
    │   ├── LoginViewModel.swift
    │   └── RegisterViewModel.swift
    ├── Models/
    │   ├── User.swift
    │   ├── LoginRequest.swift
    │   └── LoginResponse.swift
    └── Services/
        ├── AuthService.swift
        └── AuthServiceProtocol.swift

File Contents Overview

FileContains
LoginView.swiftUI layout, bindings to ViewModel
LoginViewModel.swift@Published state, login(), validate()
User.swiftUser struct with Codable
AuthService.swiftAPI calls for login, register

Checklist

When creating new feature:

  • Create folder in Features/[FeatureName]/
  • Create subfolders: Views/, ViewModels/, Models/, Services/
  • Follow naming conventions
  • Keep View logic-free
  • Keep Model data-only

When creating new screen:

  • Create [Name]View.swift in Views/
  • Create [Name]ViewModel.swift in ViewModels/
  • Create models if needed in Models/
  • Add Preview for View

When creating reusable component:

  • Place in Shared/Components/[Type]/
  • Make it configurable via parameters
  • Add Preview
  • Document usage

Score

Total Score

50/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon