主要改动: - 移除调试导出功能(exportToDocuments 及相关 UI) - EditorView 添加封面帧预览和关键帧时间选择 - 新增 Analytics.swift 基础埋点模块(使用 os.Logger) - 创建 Live Photo 风格应用图标(SVG → PNG) - 优化 LivePhotoCore:简化代码结构,修复宽高比问题 - 添加单元测试资源文件 metadata.mov - 更新 TASK.md 进度追踪 M1 MVP 闭环已完成: ✅ 5个核心页面(Home/Editor/Processing/Result/WallpaperGuide) ✅ 时长裁剪 + 封面帧选择 ✅ 完整生成管线 + 相册保存 + 系统验证 ✅ 壁纸设置引导(iOS 16/17+ 差异化文案) ✅ 基础埋点事件追踪 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.1 KiB
5.1 KiB
TASK|to-live-photo
说明:本清单按阶段拆解研发事项,默认最低支持 iOS/iPadOS 16+,先完成 MVP 闭环,再逐步完善。
M0|技术预研 / POC(以"系统可识别 Live Photo"为第一目标)✅
- 建立 Xcode 工程骨架(SwiftUI 优先),设置 Deployment Target = iOS/iPadOS 18.0
- 补齐权限与 Info.plist 文案:
- NSPhotoLibraryUsageDescription
- NSPhotoLibraryAddUsageDescription
- POC:最小链路跑通(不做复杂编辑)
- 从相册导入视频(PHPicker,视频过滤)
- 以默认参数(~0.917s、1080x1920、60fps 策略)生成 photo + pairedVideo
- 写入相册(PHAssetCreationRequest 同时写入 .photo 与 .pairedVideo)
- 校验:保存后按 assetId 取回并验证 Live 识别(相册 Live 标识 + 长按可播 + 可设置为动态壁纸)
- 约束与策略确认(写入代码常量/配置):
- 时长限制:标准化为 ~0.917s(与 iPhone 原生 Live Photo 一致)
- 分辨率上限:竖屏 1080x1920,横屏 1920x1080
- 帧率策略:统一转换为 60fps
- HDR 策略:默认转 SDR(ExportParams.hdrPolicy = .toneMapToSDR)
- 编码策略:默认 H.264(ExportParams.codecPolicy = .fallbackH264)
- 设计基础设施:
- WorkItem / ExportParams 数据模型(与 TECHSPEC 对齐)
- CacheManager:按 workId 建目录
- Logger:LivePhotoLogger 阶段化日志
M0 完成定义
- 能在至少 1 台 iPhone + 1 台 iPad 上生成并保存 Live Photo,且系统相册可识别(有 Live 标识,长按可播放)。
- 额外达成:生成的 Live Photo 可设置为动态壁纸,动态效果正常。
M1|MVP(导入→编辑→生成→保存→引导)
1) UI 页面闭环
- HomeView:首页导入入口(最近作品功能移至 M2)
- EditorView:时长裁剪、预览(比例裁剪/封面帧选择移至下方编辑能力)
- ProcessingView:进度条 + 阶段文案 + 返回重试
- ResultView:保存到相册、进入壁纸引导、继续制作
- WallpaperGuideView:按系统版本展示步骤卡片、FAQ、打开照片 App、完成确认
2) 编辑能力(MVP 版)
- 比例模板:iPhone 锁屏 / 全面屏 / 4:3 等(先做 2~3 个核心模板)
- 裁剪手势:缩放 + 拖拽,保持比例
- 时长裁剪:slider(1~1.5s 范围)
- 封面帧:滑杆选择 keyFrameTime,实时刷新封面预览
3) 生成与保存(与 TECHSPEC 阶段枚举对齐)
- 生成管线:normalize → extractKeyFrame → writePhotoMetadata → writeVideoMetadata → saveToAlbum → validate
- 取消策略:取消时终止任务并清理未写入相册的中间文件
- 错误码与可行动建议:覆盖 LPB-001/101/201/301/401/901
4) 引导内容(MVP 版)
- 版本检测:iOS/iPadOS 16 显示"系统限制/不支持锁屏 Live 动效"的明确文案
- iOS/iPadOS 17+:展示步骤卡片(照片 App → 分享 → 用作壁纸 → 开启 Live)
- FAQ:Motion not available、低电量模式、找不到 Live 按钮等
5) 基础埋点(可先打印日志,后续再接 SDK)
- home_import_video_click / import_video_success
- editor_generate_click / build_livephoto_start / build_livephoto_fail
- save_album_success / save_album_fail
- guide_open / guide_complete
6) MVP QA(手工为主)
- 测试矩阵:iPhone 1~2 台 + iPad 1 台;iOS/iPadOS 17+ 与 16 各至少 1 台
- 素材覆盖:H.264/HEVC、30/60fps、竖/横、SDR/HDR
- 验收点:生成成功率、保存成功率、相册识别率、引导文案准确性
M1 完成定义
- 按 PRD 的 MVP 验收标准打通闭环:生成 Live Photo → 保存相册可识别 → 可进入引导并在不同系统版本下给出正确提示。
M2|完善(体验提升 + 失败率降低)
- 兼容模式开关(UI 可见):降分辨率/30fps/H.264/SDR
- 自动诊断与建议:根据素材参数提示"建议缩短/建议兼容模式/建议转 SDR"等
- iPad 编辑页布局优化:左右分栏(预览/参数)
- 最近作品列表完善:持久化(仅存参数与缩略图/assetId,不重复存媒体)
- 设置页(可选):权限状态、清理缓存、反馈入口
- 错误反馈包导出(可选):builder.log + 参数(不包含媒体内容)
M3|稳定性 / 上线准备
- 性能与内存优化:大视频处理、峰值内存控制
- 崩溃与异常收敛:日志脱敏、错误归因完善(按 stage 统计)
- App Store 合规检查:权限文案、引导表述(不承诺一键设置壁纸)、隐私说明
- 产出核心文档补齐(按需要最小化):
- 测试文档:MVP 测试矩阵与用例
- 用户手册:导入/生成/保存/设置引导与常见问题
决策备忘(后续需要你拍板)
- HDR 默认策略:默认转 SDR vs 首次提示用户选择
- 编码兜底策略:完全自动兜底 vs 失败后提示开启兼容模式
- 高级合成(照片+视频)进入哪个阶段(建议 M2)