diff --git a/StikDebug/Device/DeviceConnectionContext.swift b/StikDebug/Device/DeviceConnectionContext.swift index 7a43687e..5401323 100644 --- a/StikDebug/Device/DeviceConnectionContext.swift +++ b/StikDebug/Device/DeviceConnectionContext.swift @@ -11,6 +11,12 @@ enum DeviceConnectionContext { static let defaultTargetIPAddress = "10.7.0.1" static var targetIPAddress: String { - defaultTargetIPAddress + let stored = UserDefaults.standard + .string(forKey: UserDefaults.Keys.targetDeviceIP)? + .trimmingCharacters(in: .whitespacesAndNewlines) + guard let stored, !stored.isEmpty else { + return defaultTargetIPAddress + } + return stored } } diff --git a/StikDebug/Services/TunnelManager.swift b/StikDebug/Services/TunnelManager.swift index 0249202..2d0c83a 100644 --- a/StikDebug/Services/TunnelManager.swift +++ b/StikDebug/Services/TunnelManager.swift @@ -103,16 +103,11 @@ final class TunnelManager: ObservableObject { } private func handleInvalidPairingFile() { - do { - try PairingFileStore.remove() - LogManager.shared.addInfoLog("Removed invalid pairing file") - } catch { - LogManager.shared.addErrorLog("Failed to remove invalid pairing file: \(error.localizedDescription)") - } + LogManager.shared.addInfoLog("Pairing file reported invalid; keeping existing file") showAlert( title: "Invalid Pairing File", - message: "The pairing file is invalid or expired. Please select a new pairing file.", + message: "The pairing file may be invalid or expired. You can import a new pairing file to replace it.", showOk: true, showTryAgain: false, primaryButtonText: "Select New File" diff --git a/StikDebug/Support/UserDefaults+Keys.swift b/StikDebug/Support/UserDefaults+Keys.swift index c0ededa..85487e0 100644 --- a/StikDebug/Support/UserDefaults+Keys.swift +++ b/StikDebug/Support/UserDefaults+Keys.swift @@ -14,5 +14,6 @@ extension UserDefaults { static let bundleScriptMap = "BundleScriptMap" static let defaultScriptName = "DefaultScriptName" static let defaultScriptNameValue = "" + static let targetDeviceIP = "TunnelDeviceIP" } } diff --git a/StikDebug/Views/SettingsView.swift b/StikDebug/Views/SettingsView.swift index bfa4043..b2ef6a0 100644 --- a/StikDebug/Views/SettingsView.swift +++ b/StikDebug/Views/SettingsView.swift @@ -18,6 +18,7 @@ struct SettingsView: View { @AppStorage(UserDefaults.Keys.confirmExternalJITRequests) private var confirmExternalJITRequests = true @AppStorage("keepAliveAudio") private var keepAliveAudio = true @AppStorage("keepAliveLocation") private var keepAliveLocation = true + @AppStorage(UserDefaults.Keys.targetDeviceIP) private var targetDeviceIP = DeviceConnectionContext.defaultTargetIPAddress @State private var isShowingPairingFilePicker = false @State private var isImportingFile = false @@ -134,8 +135,13 @@ struct SettingsView: View { HStack { Text("Target Device IP") Spacer() - Text(DeviceConnectionContext.defaultTargetIPAddress) + TextField(DeviceConnectionContext.defaultTargetIPAddress, text: $targetDeviceIP) + .multilineTextAlignment(.trailing) .foregroundStyle(.secondary) + .textInputAutocapitalization(.never) + .autocorrectionDisabled(true) + .keyboardType(.numbersAndPunctuation) + .frame(maxWidth: 160) } Button { openAppFolder() } label: { Label("App Folder", systemImage: "folder")