前言
构建一个可以复用的iOS项目结构,要求方便测试方便扩展,组件化,主要构建思想为clean architecure, swiftject 进行解耦,通过spm 拆分组件。详细项目地址为Demo
🛠 技术架构
| Technology | Purpose |
|---|---|
| Swift 5 | Language |
| SwiftUI | UI Framework (iOS 15+) |
| Swift Package Manager | Modular dependency management |
| RxSwift 6.x / RxCocoa | Reactive programming (Domain, Data, Networking) |
| Combine | Reactive UI bindings (Presentation layer only) |
| Swinject 2.x | Dependency Injection container |
| WKWebView | Web content embedding + JS bridge |
| URLSession | HTTP networking (via RxSwift wrappers) |
📁 项目结构
MyEcommerce/
├── MyEcommerce/ # App entry point
│ ├── MyEcommerceApp.swift # @main — DI registration + navigation
│ ├── Routing/
│ │ └── AppWebRouteFactory.swift # Composition root for WebContainer routing
│ └── Assets.xcassets/ # App icons, colors, resources
│
├── Packages/ # ★ All business logic as SPM packages
│ ├── Abstraction/ # Pure protocol layer
│ ├── Domain/ # Use case implementations
│ ├── Data/ # Repository + service implementations
│ ├── Presentation/ # SwiftUI feature packages
│ │ ├── LoginFeature/ # LoginView + LoginViewModel
│ │ ├── ProductsFeature/ # ProductList + ItemDetail
│ │ ├── BasketFeature/ # BasketView + BasketViewModel
│ │ └── WebContainerFeature/ # WKWebView embedding + JS bridge
│ └── Utilities/ # Cross-cutting utilities
│ ├── Networking/API/ # HTTP client, mock provider, environment
│ ├── Utils/ # RxSwift → Combine bridge
│ └── Analytics/ # Event tracking wrapper
│
├── MyEcommerceTests/ # Unit test scaffold
├── MyEcommerceUITests/ # UI test scaffold
│
├── CLAUDE.md # AI coding assistant instructions
├── docs/
│ ├── architecture.md # Architecture documentation (Chinese)
│ └── plans/ # Implementation plans
│
└── .claude/ # Claude Code configuration