docs(plans): K1-verify 回执与留痕(真机验证交回用户,标注未验证)
This commit is contained in:
1 parent
53ac5d60d1
commit
2d70858887
2 files changed
+142
-1
No files matched your search
+65
-1
@@ -20,7 +20,7 @@
|
||||
|
||||
---
|
||||
|
||||
## [待处理] 2026-10-16 20:30 | K1-verify:用**正确地址**重做真机验证(设备侧取证)
|
||||
## [已交接 · 未验证(真机验证改由用户执行)] 2026-10-16 20:30 | K1-verify:用**正确地址**重做真机验证(设备侧取证)
|
||||
|
||||
**用户指令(2026-10-16 20:20)**:「让 Codex 用正确地址重做一次真机验证」。
|
||||
|
||||
@@ -500,3 +500,67 @@ $ flutter test test/integration/live_watch_flow_test.dart → All tests passed!
|
||||
这是接口模型决定的,不是顺手重构;`clampResumePosition` 等本地工具函数保留。
|
||||
4. **未登录时**进度与收藏接口一律不发(匿名浏览/试看不受影响),收藏按钮沿用"先引导登录"。
|
||||
5. 禅道里仍**没有 K1 任务**(项目 2 下只有 S0/S1、A1–A6、B1/B2、C1–C3),未动任何既有任务状态。
|
||||
|
||||
---
|
||||
|
||||
### 回执(Codex,2026-10-16):K1-verify —— **未验证(真机验证由用户执行,Codex 未执行)**
|
||||
|
||||
**结论先说**:按用户 20:45 指令「codex 不用跑测试 我来执行」,本批的**真机验证状态 = 未验证**,
|
||||
由用户执行后以其结果为准。我**没有**执行任何最终真机验证,也**没有**用任何"开发机 curl"当作设备可达证据。
|
||||
|
||||
**交付物(ReelShort `develop`,已推)**
|
||||
- `pubspec.yaml`:dev_dependencies 加 `integration_test`(sdk)—— 唯一的新依赖
|
||||
- `integration_test/app_backend_test.dart`(新增,首行 `// Author: fruit.com.cn`):两个设备侧用例
|
||||
1. 在手机进程里请求 `/app/home/feed` 与 `/app/dramas/{id}`,断言列表非空、详情 id 与卡片一致;
|
||||
2. 用**真 App**(真网络、真目录控制器)启动,轮询到首页底部标签栏出现 —— 即"剧目列表加载成功",
|
||||
也就是用户在真机上遇到的「剧目列表加载失败」是否消失。
|
||||
- 该文件**按用户要求保持原样,不再改动**。
|
||||
|
||||
**当前机器状态(交接前已清理)**
|
||||
- 我起的 `flutter run` / `xcodebuild` / lsof 轮询进程**已全部终止**(`pgrep -fl "flutter_tools|xcodebuild"` 只剩 IDE 常驻 daemon,非构建)。
|
||||
- `build/` 里留着我被叫停那次构建的半成品 → **用户从 `flutter clean && flutter pub get` 起跑即可清掉**。
|
||||
- 后端 8080 / 8081 仍在跑(`admin=200` / `app=200`)。
|
||||
|
||||
**用户可直接复制执行的命令(⚠️ 本项目 iOS 用 SPM,没有 Podfile,不要跑 `pod install`)**
|
||||
```bash
|
||||
# 0) 起点:清掉残留构建产物(我被打断的那次留下的)
|
||||
cd /Users/jianghaifeng/Desktop/ReelShort/ReelShort
|
||||
flutter clean && flutter pub get
|
||||
|
||||
# 1) 取开发机真实局域网地址(不要硬编码;换网络会变)
|
||||
IP=$(ipconfig getifaddr en0) && echo "API_BASE_URL=http://$IP:8081"
|
||||
|
||||
# 2) 设备侧集成测试(最硬的证据,跑在手机进程里)
|
||||
flutter test integration_test -d 00008101-000875813E42001E --dart-define=API_BASE_URL=http://$IP:8081
|
||||
|
||||
# 2b) 只想跑网络那一条
|
||||
flutter test integration_test/app_backend_test.dart -d 00008101-000875813E42001E \
|
||||
--plain-name "should_fetch_home_feed_and_drama_detail_when_device_reaches_backend" \
|
||||
--dart-define=API_BASE_URL=http://$IP:8081
|
||||
|
||||
# 3) 真机手动看 App(可选,验证首页列表与交互)
|
||||
flutter run -d 00008101-000875813E42001E --dart-define=API_BASE_URL=http://$IP:8081
|
||||
```
|
||||
(本次实测 `ipconfig getifaddr en0` = **192.168.31.187**;若换网络请以命令输出为准。)
|
||||
|
||||
**前置条件**
|
||||
1. 手机与开发机在**同一局域网**(例如都在 192.168.31.x)。
|
||||
2. iPhone 已授权「**本地网络**」权限:设置 → 隐私与安全性 → 本地网络 → 打开本项目(App 名 **FruitShorts**)。
|
||||
没授权时 App 请求局域网会失败;`Info.plist` 里 `NSLocalNetworkUsageDescription` 与
|
||||
`NSAllowsLocalNetworking` 都已配好(上一批加的),所以系统应当会弹权限询问。
|
||||
3. 同一时刻**只跑一个** flutter 构建(并发写同一个 `build/` 会互相破坏产物 —— 这正是本次
|
||||
`video_player_avfoundation…bundle: No such file or directory` 的疑似成因)。
|
||||
|
||||
**设备侧证据看什么(红线第 10 条)**
|
||||
- 测试输出里必须出现**由手机进程打印**的:
|
||||
- `[device] API_BASE_URL=http://192.168.31.187:8081`(证明手机上用的是局域网地址,不是开发机环回/VPN 地址)
|
||||
- `[device] 首页分区=4 剧目=3` / `[device] 详情 id=5 剧集=3`(证明设备真的拿到了数据)
|
||||
- `[device] 首页剧目列表已渲染:API_BASE_URL=http://192.168.31.187:8081`(证明真 App 首页列表出内容)
|
||||
- 最后一行 `All tests passed!`
|
||||
- 若失败:`reason` 里会带上 `API_BASE_URL=…`,据此区分"地址不对"还是"设备连不上/权限未授权"。
|
||||
|
||||
**如实说明(失败与历史记录,详见 PROGRESS 的 K1-verify 段)**
|
||||
- 我在 17:56 跑过一次,**那次是设备侧输出且全过**(上面那几行 `[device]` 就是它的原始输出)。
|
||||
- 随后两次执行失败:17:59 那次 `The Dart VM Service was not discovered after 60 seconds`(app 没 attach,我也没抓到任何手机→8081 的连接);
|
||||
18:03 那次 `flutter run` 构建完成后 PM 报产物缺失(`video_player_avfoundation…bundle: No such file or directory`)并叫停。
|
||||
- 因此**在用户重跑之前,本批一律按「未验证」计**;上面那次的历史输出只作参考,不作为结论。
|
||||
Reference in new issue
Block a user