YwxMobileApp-iOS/Shared/DevUrlSettings.swift

78 行
2.4 KiB
Swift

import SwiftUI
private let kDevUrlKey = "dev_custom_start_url"
/// Debug-only URL switcher. Mirrors Android's DevUrlSettingsActivity.
/// Production builds should never show or use this.
enum DevUrlSettings {
static var effectiveStartUrl: String? {
#if DEBUG
return UserDefaults.standard.string(forKey: kDevUrlKey)?.nonEmpty
#else
return nil
#endif
}
static func save(_ url: String) {
UserDefaults.standard.set(url.trimmingCharacters(in: .whitespaces), forKey: kDevUrlKey)
}
static func clear() {
UserDefaults.standard.removeObject(forKey: kDevUrlKey)
}
}
#if DEBUG
struct DevUrlSettingsSheet: View {
@Environment(\.dismiss) private var dismiss
@State private var input: String = DevUrlSettings.effectiveStartUrl ?? ""
var body: some View {
NavigationStack {
Form {
Section {
TextField("自定义 URL留空使用默认", text: $input, axis: .vertical)
.keyboardType(.URL)
.autocorrectionDisabled()
.textInputAutocapitalization(.never)
.lineLimit(4)
} header: {
Text("调试用后端地址")
} footer: {
Text("设置后重启 App 生效。留空则使用 AppConfig.startUrl。")
}
Section {
Button("使用默认地址") {
input = ""
}
.foregroundStyle(.secondary)
}
}
.navigationTitle("开发环境设置")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .confirmationAction) {
Button("保存") {
let trimmed = input.trimmingCharacters(in: .whitespaces)
if trimmed.isEmpty {
DevUrlSettings.clear()
} else {
DevUrlSettings.save(trimmed)
}
dismiss()
}
}
ToolbarItem(placement: .cancellationAction) {
Button("取消") { dismiss() }
}
}
}
}
}
#endif
private extension String {
var nonEmpty: String? { isEmpty ? nil : self }
}