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:
2026-06-26 10:16:35 +08:00
parent c32a610ee0
commit 26f4d0e671
127 changed files with 2320 additions and 1465 deletions

View File

@ -7,22 +7,21 @@
import CoreImage.CIFilterBuiltins
import Foundation
import Observation
import Combine
import UIKit
/// ViewModel
@MainActor
@Observable
final class PhotographerInviteViewModel {
private(set) var loading = false
private(set) var inviteCode = ""
private(set) var inviteUrl = ""
private(set) var rules: [String] = []
private(set) var qrImage: UIImage?
var errorMessage: String?
final class PhotographerInviteViewModel: ObservableObject {
@Published private(set) var loading = false
@Published private(set) var inviteCode = ""
@Published private(set) var inviteUrl = ""
@Published private(set) var rules: [String] = []
@Published private(set) var qrImage: UIImage?
@Published var errorMessage: String?
@ObservationIgnored private let qrContext = CIContext()
@ObservationIgnored private let qrFilter = CIFilter.qrCodeGenerator()
private let qrContext = CIContext()
private let qrFilter = CIFilter.qrCodeGenerator()
///
func reload(api: any InviteServing) async {
@ -72,21 +71,20 @@ final class PhotographerInviteViewModel {
/// ViewModel
@MainActor
@Observable
final class InviteRecordViewModel {
var tab: InviteRecordTab = .invite
private(set) var totalRewardText = "¥ 0.00"
private(set) var withdrawableText = "¥ 0.00"
private(set) var displayRows: [InviteDisplayRow] = []
private(set) var loading = false
private(set) var loadingMore = false
private(set) var hasMore = false
var errorMessage: String?
final class InviteRecordViewModel: ObservableObject {
@Published var tab: InviteRecordTab = .invite
@Published private(set) var totalRewardText = "¥ 0.00"
@Published private(set) var withdrawableText = "¥ 0.00"
@Published private(set) var displayRows: [InviteDisplayRow] = []
@Published private(set) var loading = false
@Published private(set) var loadingMore = false
@Published private(set) var hasMore = false
@Published var errorMessage: String?
private var inviteRows: [InviteDisplayRow] = []
private var rewardRows: [InviteDisplayRow] = []
private var invitePage = 1
private var rewardPage = 1
@Published private var inviteRows: [InviteDisplayRow] = []
@Published private var rewardRows: [InviteDisplayRow] = []
@Published private var invitePage = 1
@Published private var rewardPage = 1
private let invitePageSize = 20
private let rewardPageSize = 10