Add CYLTabBarController with a global scan entry, promote MainTabBarController to the window root after login, replace RouterPath-based navigation with AppNavigator, and fix Profile diffable cell reconfiguration crashes. Co-authored-by: Cursor <cursoragent@cursor.com>
134 lines
6.0 KiB
Markdown
134 lines
6.0 KiB
Markdown
# 功能同步 Checklist(UIKit 工程)
|
||
|
||
更新时间:2026-06-26
|
||
工程:[`suixinkan_ios_new_uikit`](.)(Swift + UIKit + SnapKit)
|
||
参考:[`../suixinkan_ios_new`](../suixinkan_ios_new)(SwiftUI)
|
||
|
||
## 同步进度摘要
|
||
|
||
| 维度 | 状态 |
|
||
| --- | --- |
|
||
| 代码同步(阶段 0–5) | **完成** — Core / 登录 / 四 Tab / 子业务模块均有 UIKit 实现 |
|
||
| 单元测试 | **完成** — `xcodebuild test` 全绿 |
|
||
| 高德地图 | **完成(真机)** — Pod 已接入;模拟器自动降级 |
|
||
| 推送 | **完成** — `PushNotificationManager` + `AppDelegate` APNs 回调 |
|
||
| UI 视觉还原 | **部分完成** — 功能对齐,细节待逐页走查 |
|
||
| XCUITest | **未开始** — 可选后续补充 |
|
||
|
||
## 状态说明
|
||
|
||
- **完成**:UIKit 页面、ViewModel、必要单测已同步,编译与测试通过。
|
||
- **部分完成**:主流程可用,但与参考工程在 UI 细节或平台能力上仍有差距。
|
||
- **未开始**:UIKit 工程尚无对应实现。
|
||
- **不迁移**:参考工程已明确不纳入 iOS 范围。
|
||
|
||
---
|
||
|
||
## 基础架构
|
||
|
||
| 状态 | 模块 | UIKit 实现 | 剩余事项 |
|
||
| --- | --- | --- | --- |
|
||
| 完成 | App 根结构 | `RootViewController` 监听登录阶段;登录后 `MainTabBarController` 作为 window 根控制器 | 持续随路由扩展 |
|
||
| 完成 | Tab 导航 | CYLTabBarController 四 Tab + 中间扫码按钮 + 独立 `TabNavigationController`;push 子页隐藏 TabBar。 | 后续新增真实子页面时继续复用 `AppRoute`。 |
|
||
| 完成 | 全局状态 | `AppServices.shared` 注入 Session / Context / Router / Toast / Loading | 避免新增 monolith 状态 |
|
||
| 完成 | 登录态缓存 | Keychain token + UserDefaults 快照 / 偏好 + 冷启动恢复 | — |
|
||
| 完成 | 网络框架 | `APIClient` / `APIEnvelope` / 统一错误与 token | — |
|
||
| 完成 | OSS 上传 | `UploadAPI` + `OSSUploadService` | — |
|
||
| 完成 | 网络图片 | `UIImageView` + Kingfisher 扩展 | — |
|
||
| 完成 | 设计常量 | `AppDesign`(UIColor)+ `AppMetrics` | 新页继续复用 |
|
||
| 完成 | 文档规范 | `AGENTS.md` + 各 Feature 模块 `.md` | 新模块同步补文档 |
|
||
|
||
---
|
||
|
||
## 平台能力
|
||
|
||
| 状态 | 模块 | UIKit 实现 | 剩余事项 |
|
||
| --- | --- | --- | --- |
|
||
| 完成 | Core/Map | CocoaPods 高德 SDK;`OperatingAreaMapView` 围栏 polygon;`PunchPointMapPickerView` 点选 + 逆地理;模拟器坐标摘要兜底 | 在 `Info.plist` 填写 `AMapAPIKey` 后真机验证 |
|
||
| 完成 | Core/Push | `PushNotificationManager`;`AppDelegate` 注册 token 与远程通知 | 真机验证 APNs 与后端联调 |
|
||
| 完成 | Core/Queue | `ScenicQueueRuntime` WebSocket + 叫号 | 真机验证语音播报策略 |
|
||
| 部分完成 | Core/Validation | `AppFormValidator` + 各表单页内联校验 | 未单独抽离全部校验规则 |
|
||
| 完成 | Lottie Loading | SPM `Lottie` + `GlobalLoadingOverlayView` | — |
|
||
| 不迁移 | 旧 UIKit 兼容页 | — | 参考工程 legacy UIKit 目录不迁移 |
|
||
|
||
---
|
||
|
||
## 登录与账号
|
||
|
||
| 状态 | 模块 | UIKit 实现 | 剩余事项 |
|
||
| --- | --- | --- | --- |
|
||
| 完成 | 登录页 | `LoginViewController` | — |
|
||
| 完成 | 多账号选择 | `AccountSelectionViewController` | — |
|
||
| 完成 | 账号上下文 | `AccountContext` / `PermissionContext` / `ScenicSpotContext` | — |
|
||
| 完成 | 权限菜单 | `HomeMenuRouter` URI 映射 | 未知 URI 进占位页并记录诊断 |
|
||
|
||
---
|
||
|
||
## 四 Tab 主功能
|
||
|
||
| Tab | 状态 | UIKit 入口 | 备注 |
|
||
| --- | --- | --- | --- |
|
||
| 首页 | 完成 | `HomeViewController` | 权限菜单、常用应用、景区选择 |
|
||
| 订单 | 完成 | `OrdersViewController` | 含扫码、详情、押金、退款、尾片等 |
|
||
| 数据 | 完成 | `StatisticsViewController` | 时间段 + 汇总 + 日明细 |
|
||
| 我的 | 完成 | `ProfileViewController` | 头像 OSS、改密、实名、设置、协议 |
|
||
|
||
---
|
||
|
||
## 首页子业务模块
|
||
|
||
| 状态 | 模块 | UIKit ViewController |
|
||
| --- | --- | --- |
|
||
| 完成 | 钱包 | `WalletViewControllers` |
|
||
| 完成 | 提现审核 | `WithdrawalAuditViewController` |
|
||
| 完成 | 消息中心 | `MessageCenterViewController` |
|
||
| 完成 | 排队管理 | `QueueManagementViewControllers` |
|
||
| 完成 | 立即收款 | `PaymentCollectionViewController` |
|
||
| 完成 | 任务 / 发布任务 | `TaskViewControllers` |
|
||
| 完成 | 日程管理 | `ScheduleViewControllers` |
|
||
| 完成 | 打卡点管理 | `PunchPointViewControllers`(含地图选点) |
|
||
| 完成 | 项目管理 / 店铺项目 | `ProjectViewControllers` |
|
||
| 完成 | 相册 / 云盘 / 素材 / 样片 | `AssetsViewControllers` |
|
||
| 完成 | 直播 / 直播相册 | `LiveViewControllers` |
|
||
| 完成 | 景区 / 权限 / 结算 | `ScenicPermissionViewControllers` / `ScenicSettlementViewControllers` |
|
||
| 完成 | 运营区域 | `OperatingAreaViewController`(含围栏地图) |
|
||
| 完成 | 位置上报 | `LocationReportViewControllers` |
|
||
| 完成 | 注册邀请 | `InviteViewControllers` |
|
||
| 完成 | 飞手认证 | `PilotCertificationViewController` |
|
||
| 不迁移 | 飞控 / DJI | `HomeMenuRouter` 标记 unsupported |
|
||
|
||
---
|
||
|
||
## 已知差异(相对 SwiftUI 参考工程)
|
||
|
||
| 项目 | 说明 |
|
||
| --- | --- |
|
||
| UI 视觉 | UITableView 功能型布局,非 SwiftUI 像素级还原 |
|
||
| 直播推流 | 无真 RTMP SDK,外部 `push_url` + 诊断层(与参考工程一致) |
|
||
| 订单尾片 | 无独立尾片审核进度接口 |
|
||
| 高德 Key | 需在 `Info.plist` → `AMapAPIKey` 填入控制台 Key(Bundle ID: `com.hanqiu.suixinkan-ios`) |
|
||
|
||
---
|
||
|
||
## 验证命令
|
||
|
||
```bash
|
||
# 编译(模拟器)
|
||
xcodebuild -workspace suixinkan_ios.xcworkspace -scheme suixinkan_ios \
|
||
-destination 'generic/platform=iOS Simulator' build
|
||
|
||
# 单元测试
|
||
xcodebuild test -workspace suixinkan_ios.xcworkspace -scheme suixinkan_ios \
|
||
-destination 'platform=iOS Simulator,name=iPhone 17'
|
||
```
|
||
|
||
最近验证:**BUILD SUCCEEDED** / **TEST SUCCEEDED**(2026-06-26)
|
||
|
||
---
|
||
|
||
## 后续可选
|
||
|
||
1. 真机填入 `AMapAPIKey` 并验证运营区域围栏、打卡点地图选点。
|
||
2. 逐页 UI 走查,对齐 SwiftUI 参考工程视觉与交互细节。
|
||
3. 新增 `suixinkan_iosUITests` 做关键流程自动化。
|