ios-projects/docs/system-map/ios/review/01-独立页面基线.md

16 KiB
Raw Blame History

01 独立页面基线

本文件不参考已有系统地图文档,完全基于代码扫描独立建立。 扫描日期2026-06-19 扫描范围AIStudyApp/AIStudyApp/ 目录下全部 .swift 文件(不含 Tests 和 Generated


一、独立盘点统计

统计项 数量
一级模块Tab 4
独立页面(含可路由页面) 32
Sheet / 弹窗 10
确认弹窗Alert/ConfirmationDialog 8
页面内嵌子视图(非独立路由) 2
代码存在但无入口的页面 1
页面功能点(估算) ~180

二、应用根结构

2.1 入口点

  • AIStudyAppApp.swift@main 入口。
  • 使用 WindowGroupUIApplicationSupportsMultipleScenes = false
  • 无 URL Scheme、Universal Link、Deep Link 配置Info.plist 中无相关条目)。
  • 无通知点击路由(未发现 UNUserNotificationCenter delegate 或 onOpenURL)。
  • 无"恢复上次页面"逻辑(每次启动由 AuthManager 状态决定初始页面)。

2.2 会话状态机AuthManager.AppSession

unknown → SplashScreen
unauthenticated → PreLoginFlow (WelcomePage → LoginPage)
authenticating / refreshing → SplashScreen
authenticated → ContentView (if hasCompletedOnboarding) else PostLoginOnboardingFlow
disabled → AccountStatusView (禁用)
deleted → AccountStatusView (注销)
expired → PreLoginFlow

2.3 Tab 根结构ContentView

TabView(selection: $selectedTab)
  ├─ "学习" (tag: "study") → NavigationStack → StudyHomeView
  ├─ "知识库" (tag: "library") → NavigationStack → LibraryHomeView
  ├─ "分析" (tag: "analysis") → NavigationStack → AnalysisHomeView
  └─ "我的" (tag: "profile") → NavigationStack → ProfileView

所有 Tab 使用 NavigationStack + .navigationDestination(for: Route.self) 统一路由。

2.4 条件性入口

条件 影响的页面/行为
hasCompletedOnboarding = false 显示 PostLoginOnboardingFlow (OnboardingPage → GoalSetupPage)
hasCompletedOnboarding = true 直接进入 ContentView
session = .disabled 显示 AccountStatusView禁用
session = .deleted 显示 AccountStatusView注销
session = .expired / .unauthenticated 显示 PreLoginFlow
selectedTab 值变化 StudyHomeView 通过 Binding 接收,可被其他 Tab 修改
有 continueLearning API 数据 学习主页显示"继续上次学习"卡片
reviewCards.count > 0 学习主页显示"今日复习"卡片
quizzes.count > 0 学习主页显示"资料自测"卡片
knowledgeBases.count > 0 学习主页显示"开始学习"卡片
以上全为空 学习主页显示空状态引导
iPhone / iPad AppContext 中记录 deviceType但不影响页面布局
Debug / Release DEBUG 宏仅在 Route.destination 中用于显示页面标签覆盖层

三、完整页面清单(按入口类型分类)

3.1 启动/登录流程页面

序号 页面 Swift 类型 入口方式 是否可路由
P01 启动页 SplashScreen 应用冷启动session = .unknown/.authenticating/.refreshing
P02 欢迎页 WelcomePage PreLoginFlow step 0
P03 登录页 LoginPage PreLoginFlow step 1
P04 账号禁用页 AccountStatusView session = .disabled
P05 账号注销页 AccountStatusView session = .deleted
P06 引导页 OnboardingPage PostLoginOnboardingFlow step 0
P07 目标设置页 GoalSetupPage PostLoginOnboardingFlow step 1
序号 页面 Route 枚举 入口
P08 学习主页 Route.studyHome Tab "学习" 默认
P09 学习会话页 Route.learningSession 资料阅读页工具栏
P10 复习卡片页 Route.reviewCard 学习主页 / AIHomeView
P11 主动回忆页 Route.activeRecall 学习主页底部链接 / AIHomeView
序号 页面 Route 枚举 入口
P12 知识库首页 Tab "知识库" 直接渲染 Tab "知识库"
P13 知识库搜索页 Route.librarySearch 知识库首页搜索图标
P14 知识库详情页 Route.libraryDetail 知识库首页卡片点击
P15 创建知识库页 Route.libraryCreate 知识库首页 + 按钮 / 我的页学习资产
P16 添加知识点页 Route.addKnowledge 知识库详情页操作菜单"添加"
P17 知识点详情页 Route.knowledgeDetail 知识库详情页点击知识点
P18 编辑知识点页 Route.editKnowledge 知识点详情页工具栏菜单
P19 导入资料页 Route.libraryImport 知识库详情页操作菜单"上传"
P20 导入候选审核页 Route.importReview 导入资料完成后
P21 发现公开库页 Route.discoverPublic 我的页"发现公开库"

3.4 分析 Tab 页面

序号 页面 Route 枚举 入口
P22 学习分析页 Tab "分析" 直接渲染 Tab "分析"

3.5 我的 Tab 页面

序号 页面 Route 枚举 入口
P23 个人中心页 Tab "我的" 直接渲染 Tab "我的"
P24 编辑资料页 Route.editProfile 个人中心页资料卡片 / 设置页
P25 设置页 Route.settings 个人中心页设置图标 / 复习提醒行
P26 学习目标设置页 Route.goalSetting 设置页 / 我的页
P27 学习方法偏好页 Route.methodPreference 设置页 / 我的页
P28 通知列表页 Route.notificationList 我的页通知图标 / 消息中心
P29 帮助与反馈页 Route.feedbackForm 我的页 / 设置页

3.6 AI 辅助页面(跨模块 Push

序号 页面 Route 枚举 入口
P30 AI 对话页 Route.aiChat 知识库详情页底部 / 资料阅读页工具栏 / AI 反馈页
P31 每日思考页 Route.dailyThinking AI 反馈页"再来一题" / AIHomeView
P32 AI 反馈页 Route.aiFeedback 主动回忆完成后 / 每日思考提交后
P33 薄弱知识点页 Route.weakPoints 分析页"全部 N 个"链接 / AIHomeView

3.7 测验页面

序号 页面 Route 枚举 入口
P34 测验列表页 Route.quizList 知识库详情页操作菜单"测验"
P35 测验作答页 Route.quizTake 测验列表点击 / 学习主页自我测试
P36 测验结果页 Route.quizResult 测验作答提交后

3.8 资料阅读页面

序号 页面 Route 枚举 入口
P37 资料阅读页 Route.materialReader 学习主页"继续学习" / 分析页"继续阅读" / 来源文件 / 知识点详情
P38 资料详情页 Route.materialDetail 资料阅读页工具栏"信息"按钮

3.9 Sheet / 弹窗(非独立 Push 页面)

序号 名称 类型 所在页面 入口
S01 AI 会话列表 Sheet .sheet (medium/large) AIChatPage 工具栏"会话列表"按钮
S02 快速笔记 Sheet .sheet MaterialReaderView 工具栏笔记按钮
S03 系统预览 (QuickLook) .sheet (QLPreviewController) MaterialReaderView "系统预览"按钮
S04 封面选择 Sheet .sheet (height 220) CreateLibraryPage 封面区域点击
S05 文件夹管理 Sheet .sheet LibraryDetailPage 操作菜单"文件夹管理"
S06 链接导入 Alert .alert (with TextField) ImportPage "链接导入"按钮

3.10 确认弹窗Alert / ConfirmationDialog

序号 名称 类型 所在页面
A01 结束学习确认 ConfirmationDialog LearningSessionView
A02 删除知识库确认 Alert LibraryDetailPage
A03 批量删除确认 Alert LibraryDetailPage
A04 新建文件夹 Alert (with TextField) FolderManageView
A05 重命名文件夹 Alert (with TextField) FolderManageView
A06 退出登录确认 Alert SettingsView
A07 新建分类 Alert (with TextField) FolderManageView
A08 链接导入 Alert (with TextField) ImportPage

3.11 代码存在但无入口的页面

名称 Swift 类型 情况说明
AI 首页 AIHomeView 完整页面代码,含 NavigationLink 到 AIChatPage/ActiveRecallView/WeakPointsPage/ReviewCardView/DailyThinkingPage但 Route 中无对应 case无任何其他页面跳转到此页

四、入口类型检查清单

入口类型 是否检查 发现情况
Tab 4 个:学习、知识库、分析、我的
Push (NavigationLink via Route) 约 25 个路由目标
Sheet 6 个 Sheet
FullScreenCover 未发现
Alert 6 个 Alert
ConfirmationDialog 1 个
Popover 未发现
ContextMenu LibraryDetailPage 知识点行
Menu LibraryDetailPage 工具栏
Deep Link 未配置
Universal Link 未配置
URL Scheme 未配置
通知点击路由 未发现
Debug 页面 仅 DEBUG 标签覆盖层,无专用调试页面
条件渲染页面 基于 session / onboarding / 数据状态的 7 种分支
iPhone/iPad 差异 仅在 AppContext 记录,无布局差异
Feature Flag 未发现
管理员/内部账号 未发现
首次启动 vs 非首次 hasCompletedOnboarding @AppStorage

5.1 Tab 内跳转

源页面 目标页面 Route
StudyHomeView MaterialReaderView .materialReader
StudyHomeView ReviewCardView .reviewCard
StudyHomeView QuizTakerView .quizTake
StudyHomeView QuizListView .quizList
StudyHomeView ActiveRecallView .activeRecall
StudyHomeView 切换到 library Tab selectedTab 绑定
LibraryHomeView LibrarySearchView .librarySearch
LibraryHomeView CreateLibraryPage .libraryCreate
LibraryHomeView LibraryDetailPage .libraryDetail
LibraryDetailPage KnowledgeDetailPage .knowledgeDetail
LibraryDetailPage EditKnowledgePage .editKnowledge
LibraryDetailPage ImportPage .libraryImport
LibraryDetailPage AddKnowledgePage .addKnowledge
LibraryDetailPage QuizListView .quizList
LibraryDetailPage AIChatPage .aiChat
LibraryDetailPage MaterialReaderView .materialReader
LibraryDetailPage FolderManageView (Sheet) -
CreateLibraryPage 封面选择 Sheet -
AddKnowledgePage (文件选择器/相册) 系统组件
KnowledgeDetailPage MaterialReaderView .materialReader
KnowledgeDetailPage QuickLook (Sheet) -
KnowledgeDetailPage QuickNoteSheet -
ImportPage ImportReviewPage .importReview
ImportPage (文件选择器/相册/链接Alert) 系统组件
AnalysisHomeView WeakPointsPage .weakPoints
AnalysisHomeView MaterialReaderView .materialReader
ProfileView EditProfilePage .editProfile
ProfileView GoalSettingDetailView .goalSetting
ProfileView SettingsView .settings
ProfileView MethodPreferenceView .methodPreference
ProfileView FeedbackFormView .feedbackForm
ProfileView CreateLibraryPage .libraryCreate
ProfileView DiscoverView .discoverPublic
ProfileView NotificationListView .notificationList
SettingsView GoalSettingDetailView .goalSetting
SettingsView MethodPreferenceView .methodPreference
SettingsView EditProfilePage .editProfile
SettingsView FeedbackFormView .feedbackForm

5.2 跨模块跳转

源页面 目标页面 触发方式
ActiveRecallView AIFeedbackPageView 提交完所有回答后"查看 AI 分析"
AIFeedbackPageView StudyHomeView "加入待巩固"
AIFeedbackPageView AIChatPage "深入提问"
AIFeedbackPageView DailyThinkingPage "再来一题"
DailyThinkingPage AIFeedbackPageView 提交回答后
MaterialReaderView AIChatPage 工具栏 AI 按钮
MaterialReaderView MaterialDetailView 工具栏信息按钮
MaterialReaderView LearningSessionView 工具栏学习按钮
MaterialReaderView QuickNoteSheet 工具栏笔记按钮
AIHomeView AIChatPage NavigationLink页面自身无入口
AIHomeView ActiveRecallView NavigationLink页面自身无入口
AIHomeView WeakPointsPage NavigationLink页面自身无入口
AIHomeView ReviewCardView NavigationLink页面自身无入口
AIHomeView DailyThinkingPage NavigationLink页面自身无入口

六、API 服务清单(每个对应一组后端端点)

服务类 主要端点 被哪些页面使用
AuthService /auth/apple, /auth/refresh, /auth/logout LoginPage, AuthManager
UserService /users/me (GET/PATCH), /users/me/preferences, /users/me/profile, /users/me/deletion-request, /users/me/devices, /users/me/assets-summary, /users/me/storage ProfileView, EditProfilePage, SettingsView, GoalSettingDetailView, MethodPreferenceView
KnowledgeBaseService /knowledge-bases (CRUD), /knowledge-bases/subscribed, /knowledge-bases/:id/subscribe LibraryHomeView, LibraryDetailPage, CreateLibraryPage, DiscoverView, StudyHomeView
KnowledgeItemService /knowledge-items (CRUD, batch-delete) LibraryDetailPage, AddKnowledgePage, KnowledgeDetailPage, EditKnowledgePage
KnowledgeFolderService /knowledge-bases/:id/folders (CRUD) FolderManageView
KnowledgeSourceService /knowledge-bases/:id/sources (CRUD, parse) LibraryDetailPage, MaterialReaderView
DocumentImportService /imports (create, status) ImportPage
ImportCandidateService /import-candidates (list, accept, reject, batch-accept) ImportReviewPage
QuizService /quizzes (generate, list, detail, start, submit, results, history) QuizListView, QuizTakerView, QuizResultView
RagChatService /rag-chat/sessions (CRUD, messages, stream) AIChatPage
ActiveRecallService /active-recalls (list, submit) ActiveRecallView
AIAnalysisService /ai-analysis (ViewModel 中有调用,但 ActiveRecallView 使用硬编码数据)
ReviewService /reviews (due, submit, generate-cards) ReviewCardView (View 中硬编码ViewModel 调用 API)
FocusItemService /focus-items (list, update, complete) AnalysisHomeView (via ActivityViewModel)
ActivityService /activity (summary, heatmap, trend, streak, recommendations) AnalysisHomeView, ProfileView, StudyHomeView
LearningSessionService /learning-sessions (list, start, end) LearningSessionView, StudyHomeView
ReadingAPIService /learning/reading-events/batch, /materials/:id/reading-progress, /learning/continue, /learning/summary, /learning/trend, /learning/records MaterialReaderView, StudyHomeView, AnalysisHomeView
FileUploadService /files/upload-url, /files/complete, /files/:id CreateLibraryPage, AddKnowledgePage, ImportPage, EditProfilePage
FeedbackService /feedback FeedbackFormView
NotificationService /notifications (list, markRead, markAllRead, preferences, push-token) NotificationListView, SettingsView
WaitlistService /waitlist (API 定义存在iOS 代码中未发现使用入口)

七、免责说明

  • 本基线完全基于对 AIStudyApp/AIStudyApp/ 目录下全部 64 个 .swift 文件的逐文件阅读建立。
  • 未检查 .xcassets、.entitlements、.xcodeproj 中的详细配置。
  • iOS 推送通知的深度链接处理在代码中未发现,但可能在 Capabilities 中配置(未检查 .entitlements 文件全文)。
  • WaitlistService 代码存在但未在任何 View 或 ViewModel 中使用,判定为无 C 端入口。