1. 立项背景和目标
FocusTrap 是一款面向深度工作者的专注力管理应用,旨在解决现代人手机成瘾、注意力分散的问题。区别于传统番茄钟的冰冷计时器,本项目通过赛博朋克视觉风格和 AI 人格陪伴系统,将专注过程游戏化,让用户在沉浸式体验中培养专注习惯。目标用户为学生、程序员、创作者等需要长时间深度工作的群体。
2. 核心功能模块
专注计时系统:支持倒计时和自由计时双模式,可设置工作/学习/健身/休息等任务类别,配合白噪音场景(海滩、森林、雨声等)营造沉浸氛围。
屏幕时间管控:集成 iOS FamilyControls API,专注期间可屏蔽指定应用,支持白名单管理和紧急解锁机制,从系统层面阻断干扰。
AI 人格系统:内置 Zero、LuXiao、Thea 等多个 AI 角色,每个角色拥有独特性格和对话风格。通过好感度系统,用户专注表现会影响角色态度,解锁更多互动内容。
战报与数据分析:自动生成每日战术报告,包含专注时长、任务分布、心流评级(S/A/B/C)、专注 vs 娱乐时间对比等可视化数据,支持导出分享。
3. 业务流程
用户启动应用 → 选择 AI 人格 → 创建任务指令(或自由模式)→ 开始专注 → 系统屏蔽干扰应用 → AI 实时对话陪伴 → 完成/中断专注 → 获得经验值和好感度变化 → 查看战报分析 → 解锁新场景/角色内容。中途离开应用会触发"逃跑惩罚"机制,AI 会根据角色性格给出不同反应。
1. 整体架构和设计思路
项目采用 SwiftUI + MVVM 架构,分为 Views(视图层)、Services(业务逻辑层)、Modals(数据模型层)三层。数据持久化使用 SwiftData 框架,管理 FocusSession、DailyReport、TaskDirective 三个核心实体。状态管理通过 @StateObject 和 @ObservedObject 实现响应式更新,AppState 作为全局状态容器管理场景切换、屏蔽状态等跨页面数据。
UI 组件采用原子化设计,Components 目录包含 30+ 可复用组件(如 BreathingGlow 呼吸光效、RadarChartView 雷达图、CyberBarcodeView 条形码动画等),通过组合构建复杂界面。屏幕时间管控集成 FamilyControls 框架,RealBlockingManager 封装授权请求和应用屏蔽逻辑。
2. 负责模块和结果
AI 对话系统:设计 TheaterDialogueManager 剧场式对话管理器,支持多幕剧本播放。为 Zero、LuXiao、Thea 三个角色编写 500+ 条差异化台词,覆盖问候、鼓励、逃跑惩罚、完成庆祝等 12 种场景触发器。通过好感度阶段(1-5 级)动态调整语气风格。
战报系统:实现 TacticalReportView 战术报告页,包含能量环、任务甜甜圈图、赛博条形码、战斗天平等可视化组件。TacticalMetricsCalculator 负责计算心流评级(基于中断频率)、战斗结果(专注/娱乐时间比)等指标。支持 ImageExporter 导出为分享图片。
属性测试:编写 15+ 个 Property-Based Tests,覆盖对话脚本格式校验、时长格式化、状态序列化往返等核心逻辑。
3. 遇到的难点和解决方案
FamilyControls 授权时序问题:首次启动时授权弹窗与 UI 渲染竞争导致崩溃。解决方案:将授权请求移至 .task 修饰符中异步执行,并添加授权状态检查防止重复请求。
SwiftUI 编译超时:ContentView 超过 1200 行导致类型推断超时。解决方案:将 MainActionButton、DirectiveHubView 等复杂组件提取为独立文件,使用 @ViewBuilder 拆分条件渲染逻辑。
对话脚本维护困难:多角色多场景台词散落各处难以管理。解决方案:设计统一的 TheaterScript 协议,每个角色独立 Scripts 文件,通过 Property-Based Testing 自动校验格式一致性。