174 lines
8.7 KiB
Markdown
174 lines
8.7 KiB
Markdown
# 知习 ZhiXi — iOS App
|
||
|
||
AI-first 系统化学习 App,SwiftUI + 深色主题。
|
||
|
||
## 导航关系
|
||
|
||
```
|
||
Splash(2s 自动跳转)
|
||
↓
|
||
Welcome(欢迎页)→ 已有账号 → Login
|
||
↓ 开始使用
|
||
Login(手机号/邮箱登录)
|
||
↓ 登录成功
|
||
Onboarding(4 步引导:输入知识 / 主动输出 / AI 分析 / 掌握知识)
|
||
↓ 下一步
|
||
GoalSetup(学习目标 / 方法 / 时间)
|
||
↓ 开始学习
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ 5-Tab 主界面 │
|
||
│ │
|
||
│ [AI] [知识库] [学习] [分析] [我的] │
|
||
│ │ │ │ │ │ │
|
||
│ ├─ 开始回答 ├─ 卡片点击 ├─ 任务点击 │ │ │
|
||
│ │ → Daily │ → Detail │ → Recall │ │ │
|
||
│ │ Thinking │ │ / Feedbk │ │ │
|
||
│ │ ├─ 创建 │ │ │ │
|
||
│ ├─ 快捷操作 │ → Create │ │ │ │
|
||
│ │ → Recall │ │ │ │ │
|
||
│ │ / Weak │ ┌ 知识点 │ │ │ │
|
||
│ │ │ ├ Detail │ │ │ │
|
||
│ └─ 互动列表 │ │ → KnwlD │ │ │ │
|
||
│ → AIChat │ ├ Add │ │ │ │
|
||
│ │ ├ Import │ │ │ │
|
||
│ │ └ Edit │ │ │ │
|
||
└──────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 页面清单(对照 React 原型 22 页)
|
||
|
||
| # | 页面 | 文件 | 状态 |
|
||
|---|------|------|------|
|
||
| 1 | Splash 启动页 | `AIStudyAppApp.swift` → `SplashPage` | ✅ |
|
||
| 2 | Welcome 欢迎页 | `AIStudyAppApp.swift` → `WelcomePage` | ✅ |
|
||
| 3 | Login 登录页 | `AIStudyAppApp.swift` → `LoginPage` | ✅ |
|
||
| 4 | Onboarding 引导页 | `AIStudyAppApp.swift` → `OnboardingPage` | ✅ |
|
||
| 5 | GoalSetup 目标设置 | `AIStudyAppApp.swift` → `GoalSetupPage` | ✅ |
|
||
| 6 | AIHome AI 首页 | `Features/AI/AIHomeView.swift` | ✅ |
|
||
| 7 | LibraryHome 知识库首页 | `Features/Library/LibraryHomeView.swift` | ✅ |
|
||
| 8 | StudyHome 学习工作台 | `Features/Study/StudyHomeView.swift` | ✅ |
|
||
| 9 | AnalysisHome 学习分析 | `Features/Analysis/AnalysisHomeView.swift` | ✅ |
|
||
| 10 | Profile 我的 | `Features/Profile/ProfileView.swift` | ✅ |
|
||
| 11 | AIChat AI 对话 | `Features/AI/AIChatPage.swift` | ✅ |
|
||
| 12 | DailyThinking 今日思考 | `Features/AI/DailyThinkingPage.swift` | ✅ |
|
||
| 13 | RecallTest 回忆测试 | `Features/AI/RecallTestPage.swift` | ✅ |
|
||
| 14 | WeakPoints 薄弱点分析 | `Features/AI/WeakPointsPage.swift` | ✅ |
|
||
| 15 | AIFeedback AI 反馈 | `Features/AI/AIFeedbackPageView.swift` | ✅ |
|
||
| 16 | Settings 设置 | `Features/Profile/SettingsView.swift` | ✅ |
|
||
| 17 | GoalSetting 学习目标 | `Features/Profile/GoalSettingDetailView.swift` | ✅ |
|
||
| 18 | MethodPreference 方法偏好 | `Features/Profile/MethodPreferenceView.swift` | ✅ |
|
||
| 19 | FeedbackForm 帮助反馈 | `Features/Profile/FeedbackFormView.swift` | ✅ |
|
||
| 20 | EditProfile 编辑资料 | `Features/Profile/ProfileView.swift` → `EditProfilePage` | ✅ |
|
||
| 21 | NotificationList 通知 | `Features/Profile/ProfileView.swift` → `NotificationListView` | ✅ |
|
||
| 22 | LibrarySearch 搜索知识库 | `Features/Library/LibraryHomeView.swift` | ✅ |
|
||
| 23 | LibraryDetail 知识库详情 | `Features/Library/LibrarySubpages.swift` | ✅ |
|
||
| 24 | AddKnowledge 添加知识点 | `Features/Library/LibrarySubpages.swift` | ✅ |
|
||
| 25 | KnowledgeDetail 知识点详情 | `Features/Library/LibrarySubpages.swift` | ✅ |
|
||
| 26 | EditKnowledge 编辑知识点 | `Features/Library/LibrarySubpages.swift` | ✅ |
|
||
| 27 | CreateLibrary 创建知识库 | `Features/Library/LibrarySubpages.swift` | ✅ |
|
||
| 28 | Import 导入资料 | `Features/Library/LibrarySubpages.swift` | ✅ |
|
||
| 29 | ActiveRecall 回忆测试 | `Features/Study/StudyHomeView.swift` → `ActiveRecallView` | ✅ |
|
||
| 30 | ReviewCard 间隔复习 | `Features/Study/ReviewCardView.swift` | ✅ |
|
||
| 31 | LearningSession 学习会话 | `Features/Study/LearningSessionView.swift` | ✅ |
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
AIStudyApp/
|
||
├── AIStudyAppApp.swift # 根路由 + Splash/Welcome/Login/Onboarding/GoalSetup
|
||
├── ContentView.swift # 5-Tab 主界面 + ZXTabBar + ZXIconBtn + ZXScoreBox + ZXAIInputBar
|
||
├── Core/
|
||
│ ├── DesignSystem/
|
||
│ │ ├── DesignTokens.swift # 颜色 / 渐变 / 圆角 / 间距 / 字号 / zxFontScaled
|
||
│ │ └── ZXAnimations.swift # ZXPressModifier / ZXPullToRefresh / ZXLoadingView
|
||
│ ├── Models/
|
||
│ │ └── APIModels.swift # KnowledgeItem 等数据模型
|
||
│ └── Navigation/
|
||
│ └── Route.swift # 统一路由枚举 + navigationDestination 映射
|
||
└── Features/
|
||
├── AI/
|
||
│ ├── AIHomeView.swift # AI 首页
|
||
│ ├── DailyThinkingPage.swift # 今日思考
|
||
│ ├── AIChatPage.swift # AI 对话
|
||
│ ├── RecallTestPage.swift # 回忆测试
|
||
│ ├── WeakPointsPage.swift # 薄弱点分析
|
||
│ └── AIFeedbackPageView.swift # AI 反馈
|
||
├── Library/
|
||
│ ├── LibraryHomeView.swift # 知识库首页 + 搜索
|
||
│ └── LibrarySubpages.swift # 创建/详情/添加/导入/知识点详情/编辑
|
||
├── Study/
|
||
│ ├── StudyHomeView.swift # 学习工作台
|
||
│ ├── ReviewCardView.swift # 间隔复习卡片
|
||
│ └── LearningSessionView.swift # 学习会话
|
||
├── Analysis/
|
||
│ └── AnalysisHomeView.swift # 学习分析
|
||
└── Profile/
|
||
├── ProfileView.swift # 我的页 + EditProfilePage + NotificationListView
|
||
├── SettingsView.swift # 设置
|
||
├── GoalSettingDetailView.swift # 学习目标设置
|
||
├── MethodPreferenceView.swift # 学习方法偏好
|
||
└── FeedbackFormView.swift # 帮助与反馈
|
||
```
|
||
|
||
## 设计系统
|
||
|
||
| 类别 | Token | 值 |
|
||
|------|-------|-----|
|
||
| 主背景 | `Color.zxBg0` | `#0F0F1A` |
|
||
| 页面渐变 | `ZXGradient.page` | `#0F0F1A → #12122A` |
|
||
| 品牌紫 | `Color.zxPurple` | `#7C6EFA` |
|
||
| 品牌橙 | `Color.zxOrange` | `#F97316` |
|
||
| 文字主色 | `Color.zxF0` | `#F0F0FF` |
|
||
| 卡片圆角 | `ZXRadius.xl3` | `20` |
|
||
| 按钮高度 | `ZXSize.buttonH` | `42` |
|
||
| 页面水平间距 | `ZXSpacing.pageHPadding` | `20` |
|
||
| 状态栏高度 | `ZXSpacing.statusBarH` | `44` |
|
||
| TabBar 高度 | `ZXSpacing.tabBarH` | `83` |
|
||
|
||
以上全部从 React 原型 1:1 像素级提取。
|
||
|
||
## 运行
|
||
|
||
Xcode 打开 `AIStudyApp.xcodeproj`,选择 iPhone 17 Pro 模拟器,`Cmd+R`。
|
||
|
||
```
|
||
Clean Build 之前先:
|
||
rm -rf ~/Library/Developer/Xcode/DerivedData/AIStudyApp-*
|
||
```
|
||
|
||
## 最近修复记录
|
||
|
||
### 2026-05-19 — NavigationStack 迁移 + Dynamic Type
|
||
|
||
- **路由系统重构**:全部 `NavigationLink(destination:)` → `NavigationLink(value: Route)`,新增 `Core/Navigation/Route.swift` 统一路由枚举
|
||
- **Dynamic Type 支持**:新增 `zxFontScaled` ViewModifier,基于 `@ScaledMetric`
|
||
- **手势冲突修复**:`ZXPressModifier` 从 `DragGesture` 改为 `onLongPressGesture(minimumDuration: .infinity)` 解决与 ScrollView 冲突
|
||
- **触控目标放大**:`ZXIconBtn` 36pt → 44pt
|
||
- **大文件拆分**:从 `DailyThinkingPage.swift` 拆出 4 个子页面,从 `SettingsView.swift` 拆出 3 个子页面
|
||
- **TabBar 胶囊指示器**:选中 Tab 上方紫色 Capsule 替代旧圆形指示器
|
||
- **ZXSTask 颜色模型**:`Color` → hex `String`,支持 Hashable 路由参数
|
||
- **ZXAIInputBar 重构**:提取为共享组件,padding 由调用方控制
|
||
|
||
---
|
||
|
||
## For AI Agents
|
||
|
||
### 负责 Agent
|
||
|
||
iOS Agent(`@ios-agent`),配置在 `.claude/agents/ios-agent.md`。
|
||
|
||
### 关键规则
|
||
|
||
- 所有导航必须使用 `NavigationLink(value: Route)`,禁止 `NavigationLink(destination:)`
|
||
- 颜色使用 DesignTokens 定义,禁止硬编码
|
||
- 不引入新第三方依赖(除非 Global Agent 确认)
|
||
|
||
### 工作台
|
||
|
||
`ios-projects/AI_IOS_WORKSPACE.md` — 仅跨模块多 Agent 任务时填写,小任务跳过。
|
||
|
||
### 禁止
|
||
|
||
- 不能修改 api-server
|
||
- 不能自行发明后端接口,接口缺失时在 WORKSPACE 写"需要后端支持"
|