Integrate高德 SDK with simulator-safe build flags, add map views for operating area and punch points, refactor main tabs and key feature screens to UIKit with Diffable lists, and document Swift concurrency defaults in AGENTS.md. Co-authored-by: Cursor <cursoragent@cursor.com>
96 lines
3.2 KiB
Swift
96 lines
3.2 KiB
Swift
//
|
||
// AppUITestRouteDriver.swift
|
||
// suixinkan
|
||
//
|
||
// Created by Codex on 2026/6/26.
|
||
//
|
||
|
||
#if DEBUG
|
||
import UIKit
|
||
|
||
/// UI Test 专用路由直达器,通过启动参数打开目标页,绕开 Tab 切换与 push 链路。
|
||
@MainActor
|
||
enum AppUITestRouteDriver {
|
||
private static var didApply = false
|
||
|
||
/// 根据启动参数跳转到指定首页菜单或个人中心页面。
|
||
static func applyIfNeeded(services: AppServices = .shared) async {
|
||
guard AppUITestLaunchState.isRunningUITests, !didApply else { return }
|
||
guard AppUITestLaunchState.pendingMenuTitle != nil
|
||
|| AppUITestLaunchState.pendingProfileRouteRawValue != nil else { return }
|
||
|
||
didApply = true
|
||
try? await Task.sleep(nanoseconds: 1_200_000_000)
|
||
|
||
if let menuTitle = AppUITestLaunchState.pendingMenuTitle {
|
||
openHomeMenu(title: menuTitle, services: services)
|
||
return
|
||
}
|
||
|
||
if let rawValue = AppUITestLaunchState.pendingProfileRouteRawValue {
|
||
openProfileRoute(rawValue: rawValue, services: services)
|
||
}
|
||
}
|
||
|
||
/// 打开首页调试目录中的指定菜单。
|
||
private static func openHomeMenu(title: String, services: AppServices) {
|
||
let resolvedTitle = resolveMenuTitle(title)
|
||
guard let item = HomeMenuRouter.debugAllMenuItems().first(where: { $0.title == resolvedTitle }) else {
|
||
return
|
||
}
|
||
|
||
services.appRouter.reset()
|
||
let resolved = HomeMenuRouter.resolve(uri: item.uri, title: item.title)
|
||
switch resolved {
|
||
case .tab(let tab):
|
||
services.appRouter.select(tab)
|
||
case .orders(let entry):
|
||
services.appRouter.selectOrders(entry: entry)
|
||
case .destination(let homeRoute):
|
||
services.appRouter.navigateHome(homeRoute, animated: false)
|
||
case .unsupported(let uri, let title, _):
|
||
services.appRouter.navigateHome(.modulePlaceholder(uri: uri, title: title), animated: false)
|
||
case .placeholder(let uri, let title):
|
||
services.appRouter.navigateHome(.modulePlaceholder(uri: uri, title: title), animated: false)
|
||
}
|
||
}
|
||
|
||
/// 打开个人中心二级页面。
|
||
private static func openProfileRoute(rawValue: String, services: AppServices) {
|
||
let route: ProfileRoute?
|
||
switch rawValue {
|
||
case "settings":
|
||
route = .settings
|
||
case "realNameAuth":
|
||
route = .realNameAuth
|
||
case "accountSwitch":
|
||
route = .accountSwitch
|
||
case "debugHomeMenus":
|
||
route = .debugHomeMenus
|
||
case "agreement.about":
|
||
route = .agreement(.about)
|
||
case "agreement.userAgreement":
|
||
route = .agreement(.userAgreement)
|
||
case "agreement.privacyPolicy":
|
||
route = .agreement(.privacyPolicy)
|
||
default:
|
||
route = nil
|
||
}
|
||
|
||
guard let route else { return }
|
||
services.appRouter.reset()
|
||
services.appRouter.navigateProfile(route, animated: false)
|
||
}
|
||
|
||
/// 将 UI Test 用例菜单名映射为调试目录标题。
|
||
private static func resolveMenuTitle(_ title: String) -> String {
|
||
switch title {
|
||
case "系统设置":
|
||
return "设置中心"
|
||
default:
|
||
return title
|
||
}
|
||
}
|
||
}
|
||
#endif
|