diff --git a/app.md b/app.md index b6fc19f..90a67ce 100644 --- a/app.md +++ b/app.md @@ -1,69 +1,85 @@ -# 构建 iOS 原生应用 "私密管家" (SecretKeeper) +# Role Definition +你是一位拥有 10 年经验的 iOS 专家,精通 SwiftUI、SwiftData、CryptoKit 和 LocalAuthentication。 +你的任务是基于我提供的《需求文档》,在当前的 Xcode 项目 "TopSafe" 中,从零构建核心功能。 -## 具体功能模块实现细节: +# 📂 Context: 需求文档 (App Requirements) +""" +# 构建 iOS 原生应用 "私密管家" (SecretKeeper / TopSafe) -**任务:** -请根据以下详细的功能描述和字段定义,开发一个名为“超级保险库”的原生 iOS 应用。 - -### 一、 详细页面与录入字段定义 +## 一、 详细页面与录入字段定义 #### 1. 账号保险库 (Account Vault) - -**界面要求:** 顶部有 Segmented Control 切换按钮:**全部 / APP/ 网站/邮箱/其它**。 - -**列表页:** 按字母 A-Z 分组,显示项目名称、用户名/邮箱、所属地区标签。 +**界面要求:** 顶部有 Segmented Control 切换按钮:全部 / APP / 网站 / 邮箱 / 其它。 +**列表页:** 按字母 A-Z 分组,显示项目名称、用户名/邮箱、所属地区标签。 **录入/编辑页字段:** - -- 账号名称 **(Name):** 必填。 -- **用户名 (Username):** 常用账号标识。 -- **邮箱地址 (Email):** 支持自动填充。 -- **手机号 (Phone):** 数字键盘。 -- **登录密码 (Password):** **核心字段**,需加密存储。需实时显示强度条(0-100分)。 -- **网站地址 (URL):** URL 格式校验。 -- **所属地区 (Region):** 默认为“中国”。 -- **所属分类 (Category):** 从预设分类(APP、网站、邮箱、其它)中选择,分类头像可选择默认的图标。 -- **详细备注 (Notes):** 多行文本,记录补充信息。 -- 每个账号提供头像的选择功能,app默认提供40个扁平化彩色图标让用户选择 -- 账号列表页顶部有 Segmented Control 切换按钮进行分类的筛选 +- 账号名称 (Name): 必填。 +- 用户名 (Username): 常用账号标识。 +- 邮箱地址 (Email): 支持自动填充。 +- 手机号 (Phone): 数字键盘。 +- 登录密码 (Password): **核心字段**,需加密存储。需实时显示强度条(0-100分)。 +- 网站地址 (URL): URL 格式校验。 +- 所属地区 (Region): 默认为“中国”。 +- 所属分类 (Category): App/Web/Email/Other,提供默认图标选择。 +- 详细备注 (Notes): 多行文本。 +- 图标选择: 提供 40 个预设扁平化图标。 #### 2. 银行卡包 (Bank Cards) - -**列表页:** 3D 仿真卡片视图,显示银行名称、卡号末四位、CVV码和持卡人。 - -**界面要求:** 顶部有 Segmented Control 切换按钮: **“全部” / “银行卡” / “信用卡”** 。 -**录入/编辑页字段:** - -- **卡片类型:** Segmented Control - 储蓄卡 / 信用卡。 -- **银行名称 (Bank Name):** TextField - 必填。 -- **银行卡号 (Card Number):** TextField - 数字键盘,格式化显示(4位一空格),​**加密存储**。 -- **持卡人 (Card Holder):** TextField - 自动大写。 -- **有效期 (Expiry Date):** TextField - 格式 MM/YY。 -- **安全码 (CVV):** SecureField - 3位数字,​**加密存储**。 -- **支付密码 (Pay Password):** SecureField - 6位数字,用于在线支付,​**加密存储**。 -- **提款密码 (Withdraw Password):** SecureField - ATM 密码,​**加密存储**。 -- **卡面颜色:** Color Picker - 提供预设的 5 种渐变色方案。 +**界面要求:** 顶部 Segmented Control:全部 / 银行卡 / 信用卡。 +**列表页:** **3D 仿真卡片视图**,显示银行名称、卡号末四位、CVV、持卡人。 +**字段细节:** +- 卡号、CVV、支付密码、提款密码:必须 **加密存储** (Encrypted)。 +- 卡面颜色: 提供 5 种渐变色方案。 #### 3. 媒体库 (Media Vault) - -**界面要求:** 顶部有 Segmented Control 切换按钮:​ **“全部” / “照片” / “视频”** ​。 -**录入逻辑:** - -- **数据源:** 调用 PhotosPicker。 -- 功能要求 **:** 提供在系统相册中导入功能,导入成功后根据用户需要删除系统相册中的相同内容 -- 导出 **:** 提供导出到系统相册的功能 +**界面要求:** Segmented Control:全部 / 照片 / 视频。 +**功能:** +- 调用 PhotosPicker 导入系统相册内容。 +- 导入后询问是否删除系统原图。 +- 支持导出回系统相册。 +*技术提示:大文件请存储在 App 的 Document Directory,数据库只存文件路径。* #### 4. 安全与设置 (Settings) +- 主密码设置 (Master Password)。 +- 生物识别 (FaceID) 开关。 +- 数据导入导出 (JSON)。 +- 主题切换。 -- **主密码设置:** 首次启动强制设置6位数字密码,派生加密根密钥。 -- **生物识别开关:** 开启后,App 进入后台自动加锁,唤起时优先使用 FaceID。 -- **iCloud 同步:** 进提供给内购用户,此功能预留。 -- **数据重置:** 一键清空数据库及沙盒文件。 -- 暗黑/明亮/自动跟随系统主题选择。 -- 数据导入导出:提供本地/远程加密json文件的导入导出 +## 二、 交互与安全 +- 密码强度低于 60 分显示红色警告。 +- 复制敏感信息时触发触感反馈 (Haptic Feedback)。 +""" ---- +# 🛠 Technical Architecture (技术架构) -### 二、 交互逻辑要求 +1. **Data Models (SwiftData)**: + - 创建 `/Models/AccountItem.swift`: 包含上述账号字段。 + - 创建 `/Models/BankCard.swift`: 包含银行卡字段,敏感字段应设为 String,但在 ViewModel 层进行加密处理。 + - 创建 `/Models/MediaItem.swift`: 存储 `filePath` (String) 和 `type` (Enum)。不要直接把图片 Data 存入数据库。 -- **安全审计:** 列表页对于强度分低于 60 的密码,显示红色警告图标。 -- **触感反馈:** 点击“复制”按钮时,触发震动反馈。 \ No newline at end of file +2. **Security Service (Crypto & Auth)**: + - 创建 `/Services/SecurityService.swift`: + - 使用 `LocalAuthentication` 处理 FaceID。 + - 使用 `CryptoKit` 提供 `encrypt(string:)` 和 `decrypt(data:)` 方法,用于处理密码和CVV字段。 + +3. **UI Implementation (SwiftUI)**: + - **Tab架构**: 使用 `TabView` 分为:账号、银行卡、私密媒体、设置。 + - **3D Card**: 在 `BankCardView` 中使用 `Rotation3DEffect` 实现翻转或透视效果。 + - **Forms**: 使用原生 `Form` 和 `Section` 构建录入页。 + +# 🚀 Execution Workflow (执行步骤) + +**Phase 1: 数据层建设** +- 优先创建 SwiftData 的 Model 类。 +- 定义 `Category` 和 `CardType` 枚举 (Enum)。 + +**Phase 2: 核心功能与 UI** +- 生成 `AccountListView` 和 `AccountEditView` (含密码强度计算逻辑)。 +- 生成 `BankCardListView` (3D卡片 UI) 和录入页。 +- 生成 `MediaVaultView` (集成 PhotosUI)。 + +**Phase 3: 入口重构** +- 重写 `ContentView`,添加 TabView 导航。 +- 添加 App 启动时的 FaceID 验证遮罩层 (LockView)。 + +# Action +请先分析需求,然后**直接写入/生成**上述所有文件。请确保代码可以直接在 Xcode 16+ 环境编译通过。 \ No newline at end of file