80 lines
3.7 KiB
Markdown
80 lines
3.7 KiB
Markdown
# iOS Widget(任务清单,V1 写死文案)
|
||
|
||
> 说明:本清单根据 `plan.md` 拆解,要求“可执行、可验收、可标记”。
|
||
> 标记规则:执行完成后将对应项从 `- [ ]` 改为 `- [x]`,并把“状态”改为 **已完成**;进行中改为 **进行中**;阻塞写明原因与解除条件。
|
||
|
||
## 0. 清单状态说明
|
||
|
||
- **状态**:未开始 / 进行中 / 已完成 / 阻塞
|
||
- **阻塞**:必须写明阻塞点与解除条件
|
||
|
||
## 1. 预构建 iOS 原生工程(必须)
|
||
|
||
- [x] **执行 prebuild 生成 `ios/` 目录**
|
||
- **状态**:已完成(已执行 `npx expo prebuild -p ios --no-install`,已生成 `client/ios/`)
|
||
- **命令**:
|
||
|
||
```bash
|
||
cd client
|
||
npx expo prebuild -p ios
|
||
```
|
||
|
||
- **产出**:`client/ios/`(包含 Xcode 工程)
|
||
- **验收**:`client/ios/` 目录存在,并能在 Xcode 打开
|
||
|
||
## 2. 创建 WidgetKit Extension(Xcode 操作)
|
||
|
||
- [x] **在 Xcode 新建 Widget Extension(WidgetKit)**
|
||
- **状态**:已完成(已创建 Target:情绪小组件;下一步把 Swift 文件加入该 Target 并跑模拟器验证)
|
||
- **操作**:
|
||
- 打开 `client/ios/*.xcworkspace`(优先 workspace)
|
||
- `File -> New -> Target... -> Widget Extension`
|
||
- 名称建议:`MindfulnessWidget`(或你喜欢的命名)
|
||
- **验收**:工程里新增 Widget target,能编译通过
|
||
- **下一步(必须做)**:
|
||
- 把 `client/ios/MindfulnessWidget/MindfulnessWidget.swift` 加入 Target Membership:`情绪小组件`
|
||
- 如果 Xcode 自动生成了同类的 Widget 主文件(例如 `情绪小组件.swift` / `*_Bundle.swift`),请确保最终只有一个 `@main struct ...: Widget` 入口(避免重复入口导致编译失败)
|
||
|
||
## 3. 实现写死文案(3 个尺寸都要)
|
||
|
||
- [x] **实现 Small/Medium/Large 三种尺寸布局**
|
||
- **状态**:已完成(已提供 `client/ios/MindfulnessWidget/MindfulnessWidget.swift` 写死文案 + 三尺寸布局代码骨架)
|
||
- **文案(写死)**:可先用一条默认文案,例如:`你已经很努力了,今天也值得被温柔对待。`
|
||
- **要求**:
|
||
- Small:一行标题 + 主文案(可截断)
|
||
- Medium:主文案更完整(可多行)
|
||
- Large:增加留白与排版层次(例如标题 + 文案 + 小注脚)
|
||
- **验收**:三种尺寸均显示美观,无溢出/遮挡
|
||
|
||
## 4. 点击跳转到 Home(Deep Link)
|
||
|
||
- [x] **为 Widget 配置点击跳转 URL**
|
||
- **状态**:已完成(代码骨架已使用 `.widgetURL(URL(string: \"client:///(app)/home\")!)`)
|
||
- **URL**:`client:///(app)/home`
|
||
- **实现**:在 Widget 中设置 `.widgetURL(URL(string: \"client:///(app)/home\")!)`
|
||
- **验收**:点击小组件能打开 App 并进入 Home
|
||
|
||
## 5. 本地验证
|
||
|
||
- [ ] **在 iOS 模拟器运行并添加桌面小组件**
|
||
- **状态**:阻塞(需要本机 Xcode Run 安装后在模拟器桌面添加 Widget 验证)
|
||
- **步骤**:
|
||
- Xcode Scheme 选择主 App(一般是 `client`),选择模拟器,点击 Run 安装 App
|
||
- 回到桌面长按 -> “+” -> 搜索小组件 -> 添加 Small/Medium/Large
|
||
- **验收**:小组件显示正确,点击跳转正确
|
||
- **排查**:
|
||
- 桌面搜索不到:通常是没有 Run 安装过主 App,或 Widget target 未加入编译
|
||
- 点击不跳转:确认 Widget 里 `widgetURL` 为 `client:///(app)/home`,且 `app.json` 的 `scheme` 为 `client`
|
||
|
||
## 6. 文档补充(可选但建议)
|
||
|
||
- [x] **在 `client/README.md` 增加“小组件开发(V1 写死文案)”说明**
|
||
- **状态**:已完成
|
||
- **内容**:
|
||
- Expo Go 不支持
|
||
- prebuild 命令
|
||
- Xcode 创建 Widget Extension 的步骤
|
||
- deep link:`client:///(app)/home`
|
||
- **验收**:新同学照 README 可复现
|
||
|