Advance UIKit rewrite with AMap integration and core UI modules.

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>
This commit is contained in:
2026-06-26 15:16:12 +08:00
parent 9edf993432
commit d99a5b1bf8
124 changed files with 5195 additions and 1536 deletions

View File

@ -12,6 +12,7 @@ final class FeaturePlaceholderViewController: UIViewController {
private let pageTitle: String
private let uri: String
///
init(title: String, uri: String) {
self.pageTitle = title
self.uri = uri
@ -23,6 +24,7 @@ final class FeaturePlaceholderViewController: UIViewController {
fatalError("init(coder:) has not been implemented")
}
/// UI
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor(hex: 0xF5F7FA)

View File

@ -8,6 +8,7 @@
import Kingfisher
import UIKit
/// `UIImageView` Kingfisher
extension UIImageView {
/// 使 Kingfisher 退
func loadRemoteImage(
@ -68,11 +69,13 @@ extension UIImageView {
kf.cancelDownloadTask()
}
/// dURLString
private func normalizedURLString(from urlString: String?) -> String? {
let text = urlString?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
return text.isEmpty ? nil : text
}
/// avatarPlaceholder
private static func avatarPlaceholder(
systemImageName: String,
iconSize: CGFloat,
@ -98,6 +101,7 @@ extension UIImageView {
}
}
/// `UIImageView`
extension UIImageView {
///
func refreshRemoteAvatarCornerRadius() {

View File

@ -23,6 +23,7 @@ private final class ViewModelBindingToken {
private weak var owner: AnyObject?
private let handler: () -> Void
///
init(owner: AnyObject, handler: @escaping () -> Void) {
self.owner = owner
self.handler = handler
@ -33,17 +34,22 @@ private final class ViewModelBindingToken {
}
}
/// `UIViewController` UI
extension UIViewController {
/// 访
var appServices: AppServices { AppServices.shared }
/// Toast
func showToast(_ message: String) {
appServices.toastCenter.show(message)
}
/// Loading
func showGlobalLoading(_ message: String = "") {
appServices.globalLoading.show(message: message)
}
/// GlobalLoading
func hideGlobalLoading() {
appServices.globalLoading.hide()
}