Skip to content

代码实现

技术选型:(10min)

基础框架

  • 编程语言:Swift 6
  • UI框架:SwiftUI
  • 数据持久化:SwiftData

开发工具链

  • IDE:Xcode 16
  • 版本控制:Git
  • 数据库测试工具:DB Browser for SQLite
  • 图标 / UI设计:Figma
  • Mockup:Shots
  • 文档编写:Material for MkDocs
  • 文本编辑器:VSCode,Sublime Text
  • 代码托管:GitHub
  • 模型托管:Hugging Face
  • 网站部署:Vercel / Cloudflare
  • DNS管理:Cloudflare
  • AI辅助开发:ChatGPT

App内主要技术与组件

系统功能

  • 通知调度:UNUserNotificationCenter
  • 应用评分:StoreKit
  • 文件处理:FileManager
  • 网页集成:Safari Services

数据与储存

  • 网络请求 / 下载:URLSession
  • JSON解析:JSONDecoder
  • 偏好设置存储:AppStorage
  • 数据加密 / 校验:CryptoKit

UI与交互

  • 分享功能:ShareLink,UIActivityViewController
  • 图像渲染:ImageRenderer
  • 提示组件:TipKit
  • 触感反馈:UIImpactFeedbackGenerator

架构与代码设计

  • 架构模式:数据驱动UI(MVVM)
  • 状态管理:@State / @StateObject / @Environment / @EnvironmentObject
  • 异步调用:Swift Concurrency(MainActor / Task / async/await)
  • 事件监听:NotificationCenter
  • UIKit整合:UIViewControllerRepresentable
  • UI组件复用:自定义ViewModifier

推理模型

  • LLM 模型:Foundation Models / Qwen3
  • 推理引擎:llama.cpp

MVP代码实现:(90min)

  1. 新建一个iOS项目
  2. 创建主界面MainView,整合TabView,管理打卡,回顾,设置页面
  3. 创建Model:挑战,习惯,记录

  4. 搭建开始页面,用来开始新挑战 或者 回到当前挑战
  5. 搭建打卡页面,使用List显示7个习惯,并实现打卡功能
  6. 搭建回顾页面,使用Grid展示50天 * 7个习惯的完整打卡情况
  7. 搭建设置页面,包含技术支持与隐私政策页面的外部链接

  8. 实现挑战归档,完成挑战历史与挑战详细页面的展示
  9. 构建挑战完成后的开始页面与重开挑战流程

已完成功能(v1.1~v2.0 实现)

  • 更改日期功能(补打卡)✅
  • 添加打卡备注说明✅
  • 计算连续打卡天数✅
  • 自定义习惯✅
  • 自定义挑战周期✅
  • 打卡提醒✅
  • 分享挑战成果✅
  • UI/UX优化✅

待开发 / 拟扩展功能

  • 开始日期的编辑
  • 奖励机制(满足条件解锁徽章)
  • 多语言支持(英语,日语)

测试:(30min)

  1. 主要功能流程测试:开始 -> 打卡/回顾/设置 -> 结束 -> 再次开始
  2. 挑战生命周期测试
编号 测试动作 期待结果 备注
1-1 首次打开APP 展示开始页面
1-2 点击开始挑战 跳转进入打卡页面 显示Day1以及7个习惯
1-3 点击Tab栏 可在打卡,回顾,设置3页面之前自由跳转
1-4 点击若干习惯 习惯切换为打卡状态 再次点击后可取消打卡状态
1-5 切换至回顾页面 正确展示打卡状态 显示Day1/50以及7组习惯,每组50个记录
1-6 切换至设置页面 显示设置菜单
1-7 点击挑战一览 挑战一览页面中显示当前挑战
1-8 点击当前挑战 进入挑战详细页面 挑战数据正确展示
1-9 返回设置页面并结束当前挑战 返回至开始页面
1-10 再次点击开始挑战 开启新的挑战 在挑战一览页面中显示之前结束的挑战以及当前新的挑战
1-11 修改打卡记录后关闭APP再重新进入 修改后数据依然正确展示
2-1 用数据库工具手动修改当前挑战的开始日期至50天前 展示完成挑战后的开始页面
2-2 再次点击开始挑战 开启新的挑战 在挑战一览页面中显示之前结束的挑战以及当前新的挑战

追加测试 [v1.3]

    3. 跨日期自动变更测试
编号 测试前提 测试动作 期待结果
3-1 当前为挑战倒数第2天 显示打卡页,App 保持前台直到 0 点 日期自动更新为次日
3-2 同上 显示过往日期,App 保持前台直到 0 点 显示日期保持不变
3-3 同上 显示今日,切换至回顾页并保持前台直到 0 点 显示天数自动更新
3-4 同上 显示过往日期,切换至回顾页并保持前台直到 0 点 显示天数自动更新
3-5 同上 显示今日,App 切至后台,0 点后重新打开 日期自动更新为次日
3-6 同上 显示过往日期,App 切至后台,0 点后重新打开 显示日期保持不变
3-7 同上 显示今日,切换至回顾页,App 切至后台,0 点后重新打开 显示天数自动更新
3-8 同上 显示过往日期,切换至回顾页,App 切至后台,0 点后重新打开 显示天数自动更新
3-9 当前为挑战倒数第1天 显示打卡页,App 保持前台直到 0 点 自动跳转至挑战结束页面
3-10 同上 显示过往日期,App 保持前台直到 0 点 自动跳转至挑战结束页面
3-11 同上 显示今日,切换至回顾页并保持前台直到 0 点 自动跳转至挑战结束页面
3-12 同上 显示过往日期,切换至回顾页并保持前台直到 0 点 自动跳转至挑战结束页面
3-13 同上 显示今日,App 切至后台,0 点后重新打开 自动跳转至挑战结束页面
3-14 同上 显示过往日期,App 切至后台,0 点后重新打开 自动跳转至挑战结束页面
3-15 同上 显示今日,切换至回顾页,App 切至后台,0 点后重新打开 自动跳转至挑战结束页面
3-16 同上 显示过往日期,切换至回顾页,App 切至后台,0 点后重新打开 自动跳转至挑战结束页面