# iOS Widget（高层规范）

## 1. 背景与目标

当前客户端仅在设置页展示了“小组件说明文案”，并未实现真正的 iOS 桌面小组件。

本需求用于实现**真正的 iOS 小组件**（WidgetKit Extension），使用户可以在 iOS 桌面添加小组件并看到“情绪文字/正念短句”等内容。

### 目标

- **可添加到桌面**：支持在 iOS 桌面添加小组件（WidgetKit）
- **V1（本期）写死内容**：小组件展示一段美观文案（先写死，不做数据同步/更新）
- **可点击跳转**：点击小组件可跳转回 App 指定页面（默认 Home）

### 非目标（本阶段不做）

- 不承诺严格准点刷新（受 iOS 系统调度限制）
- 不做复杂的小组件交互配置（如需可后续拆分）
- 不要求 Android Widget（仅 iOS）
- **V1 不做数据更新**：不做 App -> Widget 数据共享与更新触发（App Group 留到后续版本）

## 2. 关键结论与约束（必须接受）

- **Expo Go 不支持 WidgetKit**：必须使用 **Development Build / 预构建后的原生工程 / EAS Build** 才能安装带小组件扩展的 App
- **需要原生扩展**：iOS 小组件必须创建 **WidgetKit Extension（SwiftUI）**
- **V1 不需要 App Group**：因为内容写死在 Widget 内部；后续做数据共享时再引入 App Group

## 3. 小组件功能需求（高层）

### 3.1 展示内容

- 展示一段“情绪文字/正念短句”
- 背景支持：
  - 纯色或渐变（优先）
  - 图片（可选，后续）
- 文案需“美观可读”，适配暗色模式（可选）

### 3.2 尺寸支持

- 支持 iOS 常见尺寸：
  - Small
  - Medium
  - Large

### 3.3 更新策略

V1：不做更新策略（内容写死）。后续版本可扩展：

- 固定间隔更新（例如每天/每小时）
- App 驱动更新：App 写入新内容，Widget 触发 reload（系统仍可能延迟）

### 3.4 点击跳转

- 点击小组件可打开 App 并跳转到指定页面：
  - 默认：Home
  - 可选：Favorites

## 4. 数据共享与持久化（高层）

V1：不做数据共享与持久化（写死文案）。

后续版本（V2）再引入 App Group（共享 UserDefaults）与数据来源策略：

- `widget.text`、`widget.updatedAt`、`widget.lang`、`widget.theme` 等
- 数据来源可选：Home 当前/最近 Like/随机 mock

## 5. 多语言（与 App 一致）

- 语言码沿用客户端：`zh-CN/en/es/pt/zh-TW`
- V1：Widget 内可先写死单语（例如中文）或做最小的本地化（可选）
- V2：建议由 App 端选择语言并写入共享数据，降低 Widget 端 i18n 复杂度

## 6. 验收标准

- 可以在 iOS 桌面搜索并添加小组件
- 小组件能显示一段美观文案（至少支持 Small）
- 点击小组件能打开 App 并进入预期页面

## 7. 风险与注意事项

- iOS 刷新频率限制：不可承诺“每分钟刷新”等高频
- App Group / Bundle ID 配置错误会导致 Widget 读不到数据
- Dev Build / EAS 证书配置成本较高，需要在计划阶段明确落地路径

