【大前端】【iOS】iOS 真实项目可落地目录结构方案

一套 iOS 真实项目可落地目录结构方案 ,包含 模块拆分、命名规范、协作约束、演进路线

目标:

✅ 新人 1 天能上手

✅ 3--10 人并行开发不冲突

✅ 支持后期组件化 / Swift Package


一、真实项目推荐总目录(MVVM + 模块化)

复制代码
MyApp
├── App
│   ├── AppDelegate.swift
│   ├── SceneDelegate.swift
│   ├── AppCoordinator.swift
│   ├── AppConfig.swift
│   └── Environment.swift
│
├── Modules                  # 业务模块(核心)
│   ├── Home
│   │   ├── HomeViewController.swift
│   │   ├── HomeViewModel.swift
│   │   ├── HomeModel.swift
│   │   ├── HomeService.swift
│   │   ├── HomeCoordinator.swift
│   │   └── HomeContracts.swift
│   │
│   ├── Login
│   ├── Profile
│   └── Settings
│
├── Base
│   ├── BaseViewController.swift
│   ├── BaseViewModel.swift
│   ├── BaseTableViewCell.swift
│   └── BaseCollectionViewCell.swift
│
├── Components               # 通用 UI 组件
│   ├── Alert
│   │   ├── AlertView.swift
│   │   └── AlertConfig.swift
│   │
│   ├── Loading
│   └── EmptyState
│
├── Network
│   ├── API
│   │   ├── UserAPI.swift
│   │   └── HomeAPI.swift
│   │
│   ├── NetworkManager.swift
│   ├── Request.swift
│   ├── Response.swift
│   └── NetworkError.swift
│
├── Storage
│   ├── KeychainManager.swift
│   ├── UserDefaultsStore.swift
│   └── CacheManager.swift
│
├── Utils
│   ├── Extensions
│   │   ├── UIView+Layout.swift
│   │   ├── String+Safe.swift
│   │   └── UIColor+Hex.swift
│   │
│   ├── Logger.swift
│   └── Constants.swift
│
├── Resources (Folder Reference)
│   ├── Assets.xcassets
│   ├── Fonts
│   ├── Localizable
│   │   ├── zh-Hans.strings
│   │   └── en.strings
│   └── LaunchScreen.storyboard
│
└── SupportingFiles
    ├── Info.plist
    └── PrivacyInfo.xcprivacy

二、模块内部「真实写法」详解(重点)

1️⃣ Home 模块拆解(真实项目)

复制代码
Home
├── HomeViewController.swift   # 只负责 UI & 事件
├── HomeViewModel.swift        # 状态、业务逻辑
├── HomeModel.swift            # 数据结构
├── HomeService.swift          # 网络 / 本地数据
├── HomeCoordinator.swift      # 页面跳转
└── HomeContracts.swift        # 协议定义

职责边界(避免后期失控)

文件 只允许做什么
VC 渲染 UI、绑定 ViewModel
VM 业务逻辑、状态管理
Service API / DB / Cache
Model struct / enum
Coordinator push / present
Contracts protocol

👉 绝不允许:

  • VC 里写网络请求

  • ViewModel 里 push 页面

  • Base 引入业务判断


三、命名规范(落地必备)

1️⃣ 文件命名

复制代码
模块名 + 职责
HomeViewController
HomeViewModel
HomeService

2️⃣ 协议命名(面试 & 架构感)

复制代码
protocol HomeViewModelInput
protocol HomeViewModelOutput
protocol HomeServiceProtocol

四、真实项目协作规则(非常重要)

1️⃣ 模块自治原则

  • 模块 不允许互相 import

  • 只能通过:

    • Protocol

    • Coordinator

    • 公共组件

2️⃣ Git 冲突最小化

  • 每人一个模块

  • 不共享 VC

  • 公共修改走 PR


五、网络层真实封装示例

复制代码
enum HomeAPI {
    case list
}

extension HomeAPI: APIProtocol {
    var path: String { "/home/list" }
    var method: HTTPMethod { .get }
}

final class HomeService {
    func fetchList() async throws -> [HomeModel] {
        try await NetworkManager.request(HomeAPI.list)
    }
}

六、Base & Components 的边界(真实踩坑总结)

Base 只做三件事:

  • 生命周期兜底

  • 通用能力(loading、toast)

  • 统一风格

Components:

  • 独立展示

  • 可单独测试

  • 可拆成 Pod / SPM


七、从单体到组件化的演进路线

阶段 1:单工程模块化

复制代码
Modules/Home
Modules/Login

阶段 2:内部组件化

复制代码
Components/Alert
Components/Loading

阶段 3:Swift Package

复制代码
MyApp
├── Packages
│   ├── HomeModule
│   ├── NetworkKit
│   └── UIComponents

👉 目录设计不变,迁移成本极低


八、真实项目「一页总结版」

iOS 真实项目目录落地三原则:

  1. 业务一定进 Modules

  2. Base 只放能力,不放业务

  3. 能拆的迟早都会拆

相关推荐
夏幻灵2 小时前
HTML5里最常用的十大标签
前端·html·html5
Mr Xu_2 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
未来龙皇小蓝2 小时前
RBAC前端架构-01:项目初始化
前端·架构
程序员agions3 小时前
2026年,微前端终于“死“了
前端·状态模式
万岳科技系统开发3 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
2501_915106323 小时前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
程序员猫哥_3 小时前
HTML 生成网页工具推荐:从手写代码到 AI 自动生成网页的进化路径
前端·人工智能·html
龙飞053 小时前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
2501_915106323 小时前
使用 Sniffmaster TCP 抓包和 Wireshark 网络分析
网络协议·tcp/ip·ios·小程序·uni-app·wireshark·iphone
我爱加班、、3 小时前
Websocket能携带token过去后端吗
前端·后端·websocket