Migrate from iOS 17 Observation to iOS 16-compatible Combine architecture.
Lower deployment target to iOS 16, replace @Observable with ObservableObject, add navigation and UI compatibility shims, and include login smoke UI tests. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
261
suixinkan/App/AppServiceEnvironment.swift
Normal file
261
suixinkan/App/AppServiceEnvironment.swift
Normal file
@ -0,0 +1,261 @@
|
||||
//
|
||||
// AppServiceEnvironment.swift
|
||||
// suixinkan
|
||||
//
|
||||
// Created by Codex on 2026/6/26.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
private enum EnvironmentServiceDefaults {
|
||||
static func apiClient() -> APIClient {
|
||||
APIClient()
|
||||
}
|
||||
}
|
||||
|
||||
private struct APIClientEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: APIClient { EnvironmentServiceDefaults.apiClient() }
|
||||
}
|
||||
|
||||
private struct UploadAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: UploadAPI { UploadAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct PushAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: PushAPI { PushAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct AccountSnapshotStoreEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: AccountSnapshotStore { AccountSnapshotStore() }
|
||||
}
|
||||
|
||||
private struct AuthSessionCoordinatorEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: AuthSessionCoordinator { AuthSessionCoordinator() }
|
||||
}
|
||||
|
||||
private struct AccountContextAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: AccountContextAPI { AccountContextAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct AssetsAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: AssetsAPI { AssetsAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct AuthAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: AuthAPI { AuthAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct InviteAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: InviteAPI { InviteAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct LiveAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: LiveAPI { LiveAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct LocationReportAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: LocationReportAPI { LocationReportAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct MessageCenterAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: MessageCenterAPI { MessageCenterAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct OperatingAreaAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: OperatingAreaAPI { OperatingAreaAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct OrdersAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: OrdersAPI { OrdersAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct OSSUploadServiceEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: OSSUploadService {
|
||||
OSSUploadService(configService: UploadAPI(client: EnvironmentServiceDefaults.apiClient()))
|
||||
}
|
||||
}
|
||||
|
||||
private struct PaymentAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: PaymentAPI { PaymentAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct PilotCertificationAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: PilotCertificationAPI { PilotCertificationAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct ProfileAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: ProfileAPI { ProfileAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct ProjectAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: ProjectAPI { ProjectAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct PunchPointAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: PunchPointAPI { PunchPointAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct ScenicPermissionAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: ScenicPermissionAPI { ScenicPermissionAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct ScenicQueueAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: ScenicQueueAPI { ScenicQueueAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct ScenicSettlementAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: ScenicSettlementAPI { ScenicSettlementAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct ScheduleAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: ScheduleAPI { ScheduleAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct StatisticsAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: StatisticsAPI { StatisticsAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct TaskAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: TaskAPI { TaskAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
private struct WalletAPIEnvironmentKey: EnvironmentKey {
|
||||
static var defaultValue: WalletAPI { WalletAPI(client: EnvironmentServiceDefaults.apiClient()) }
|
||||
}
|
||||
|
||||
extension EnvironmentValues {
|
||||
var apiClient: APIClient {
|
||||
get { self[APIClientEnvironmentKey.self] }
|
||||
set { self[APIClientEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var uploadAPI: UploadAPI {
|
||||
get { self[UploadAPIEnvironmentKey.self] }
|
||||
set { self[UploadAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var pushAPI: PushAPI {
|
||||
get { self[PushAPIEnvironmentKey.self] }
|
||||
set { self[PushAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var accountSnapshotStore: AccountSnapshotStore {
|
||||
get { self[AccountSnapshotStoreEnvironmentKey.self] }
|
||||
set { self[AccountSnapshotStoreEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var authSessionCoordinator: AuthSessionCoordinator {
|
||||
get { self[AuthSessionCoordinatorEnvironmentKey.self] }
|
||||
set { self[AuthSessionCoordinatorEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var accountContextAPI: AccountContextAPI {
|
||||
get { self[AccountContextAPIEnvironmentKey.self] }
|
||||
set { self[AccountContextAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var assetsAPI: AssetsAPI {
|
||||
get { self[AssetsAPIEnvironmentKey.self] }
|
||||
set { self[AssetsAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var authAPI: AuthAPI {
|
||||
get { self[AuthAPIEnvironmentKey.self] }
|
||||
set { self[AuthAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var inviteAPI: InviteAPI {
|
||||
get { self[InviteAPIEnvironmentKey.self] }
|
||||
set { self[InviteAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var liveAPI: LiveAPI {
|
||||
get { self[LiveAPIEnvironmentKey.self] }
|
||||
set { self[LiveAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var locationReportAPI: LocationReportAPI {
|
||||
get { self[LocationReportAPIEnvironmentKey.self] }
|
||||
set { self[LocationReportAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var messageCenterAPI: MessageCenterAPI {
|
||||
get { self[MessageCenterAPIEnvironmentKey.self] }
|
||||
set { self[MessageCenterAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var operatingAreaAPI: OperatingAreaAPI {
|
||||
get { self[OperatingAreaAPIEnvironmentKey.self] }
|
||||
set { self[OperatingAreaAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var ordersAPI: OrdersAPI {
|
||||
get { self[OrdersAPIEnvironmentKey.self] }
|
||||
set { self[OrdersAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var ossUploadService: OSSUploadService {
|
||||
get { self[OSSUploadServiceEnvironmentKey.self] }
|
||||
set { self[OSSUploadServiceEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var paymentAPI: PaymentAPI {
|
||||
get { self[PaymentAPIEnvironmentKey.self] }
|
||||
set { self[PaymentAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var pilotCertificationAPI: PilotCertificationAPI {
|
||||
get { self[PilotCertificationAPIEnvironmentKey.self] }
|
||||
set { self[PilotCertificationAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var profileAPI: ProfileAPI {
|
||||
get { self[ProfileAPIEnvironmentKey.self] }
|
||||
set { self[ProfileAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var projectAPI: ProjectAPI {
|
||||
get { self[ProjectAPIEnvironmentKey.self] }
|
||||
set { self[ProjectAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var punchPointAPI: PunchPointAPI {
|
||||
get { self[PunchPointAPIEnvironmentKey.self] }
|
||||
set { self[PunchPointAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var scenicPermissionAPI: ScenicPermissionAPI {
|
||||
get { self[ScenicPermissionAPIEnvironmentKey.self] }
|
||||
set { self[ScenicPermissionAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var scenicQueueAPI: ScenicQueueAPI {
|
||||
get { self[ScenicQueueAPIEnvironmentKey.self] }
|
||||
set { self[ScenicQueueAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var scenicSettlementAPI: ScenicSettlementAPI {
|
||||
get { self[ScenicSettlementAPIEnvironmentKey.self] }
|
||||
set { self[ScenicSettlementAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var scheduleAPI: ScheduleAPI {
|
||||
get { self[ScheduleAPIEnvironmentKey.self] }
|
||||
set { self[ScheduleAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var statisticsAPI: StatisticsAPI {
|
||||
get { self[StatisticsAPIEnvironmentKey.self] }
|
||||
set { self[StatisticsAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var taskAPI: TaskAPI {
|
||||
get { self[TaskAPIEnvironmentKey.self] }
|
||||
set { self[TaskAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
|
||||
var walletAPI: WalletAPI {
|
||||
get { self[WalletAPIEnvironmentKey.self] }
|
||||
set { self[WalletAPIEnvironmentKey.self] = newValue }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user