docs: 更新项目文档与架构说明

This commit is contained in:
AndyChen1024
2026-09-15 14:35:52 +08:00
parent 547ce92050
commit a5c6a6ddfd
5 changed files with 122 additions and 11 deletions

View File

@@ -2,7 +2,9 @@
## 项目概览
SwiftUI + MVVM 单向数据流 + SPM 多 target 模块化的 iOS「打卡/习惯追踪」客户端,架构对齐 Android NIA(`core/*` + `feature/*`)。
SwiftUI + MVVM 单向数据流 + SPM 多 target 模块化的 iOS「打卡/计划管理」客户端,功能对齐 `wechat-clock-mini`(小程序,生产参照)与 `android-client`(Android 端,原生简化参照)。架构对齐 Android NIA(`core/*` + `feature/*`)。
四个主入口 Tab(顺序):**首页 / 打卡 / 计划 / 我的**;另有独立**登录页**(手机号 + 短信验证码)与**提交计划页**(计划 Tab 内推入)。
## 目录结构
@@ -17,7 +19,11 @@ SwiftUI + MVVM 单向数据流 + SPM 多 target 模块化的 iOS「打卡/习惯
- `Sources/CoreDatabase`:SwiftData(`@Model` + `ModelContainer`)
- `Sources/DesignSystem`:设计 tokens
- `Sources/CoreUI`:可复用 SwiftUI 组件
- `Sources/FeatureHome` / `Sources/FeatureAuth`:Feature 模块
- `Sources/FeatureHome`:首页(落地页:Hero + 模块卡 + 产品介绍)
- `Sources/FeatureCheckin`:打卡(状态卡 + 状态 pill + 小组/个人记录)
- `Sources/FeaturePlan`:计划(周/月/年 + 小组统计 + 提交计划页)
- `Sources/FeatureProfile`:我的(资料 + 小组分组 + 退出登录)
- `Sources/FeatureAuth`:登录(手机号 + 短信验证码 + 60s 倒计时)
## 依赖方向(硬约束,违反即编译不过)
@@ -44,7 +50,14 @@ SwiftUI + MVVM 单向数据流 + SPM 多 target 模块化的 iOS「打卡/习惯
| Hilt `@Inject` / AppContainer | 手写 `AppContainer` |
| Retrofit + kotlinx.serialization | URLSession + Codable |
| Room | SwiftData |
| DataStore | `@AppStorage` / UserDefaults |
| DataStore(会话持久化) | Combine `CurrentValueSubject`(进程内 Fake 会话)|
## 会话 / 登录态
- `SessionRepository` 协议(CoreDomain)+ `FakeSessionRepository`(CoreRepository,`final class` + Combine `CurrentValueSubject<Bool, Never>`,默认未登录,**AppContainer 持单例共享**)。
- 登录态驱动页面:`HomeViewModel` 双源切换(已登录 `observeHome()` / 游客 `observeGuestHome()`);checkin/plan/profile 四态含 `loggedOut`。
- flatMapLatest 的 iOS 等价:外层 `Task` 观察 `observeIsLoggedIn()`,登录态变化时取消内层数据 `Task` 并重新订阅。
- 登录 mock 凭据:手机号 `13812341234` + 验证码 `123456`。
## 代码风格
@@ -79,3 +92,11 @@ swiftlint lint --strict
2. 新建 `Sources/FeatureXxx/`:Screen + ViewModel + UiState(enum)。
3. UseCase 放 `CoreDomain`,Repository 实现放 `CoreRepository`。
4. 在 `App` 的 `AppContainer` 装配依赖、`AppRootView` 接入导航。
## 文档地图
| 主题 | 文档 |
|---|---|
| 架构与数据流 | [docs/architecture.md](docs/architecture.md) |
| 工作状态与遗留项 | [docs/progress.md](docs/progress.md) |
| 贡献指南 | [CONTRIBUTING.md](CONTRIBUTING.md) |