From 38d04c0a862d06d3003b4323289931bb906c180f Mon Sep 17 00:00:00 2001 From: Eric Bariaux <375613+ebariaux@users.noreply.github.com> Date: Tue, 4 Aug 2026 16:08:04 +0200 Subject: [PATCH 1/2] Add flag to only stop device scan if it as started at least once before --- .../ConsoleProviders/ESPProvision/DeviceRegistry.swift | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ORLib/ConsoleProviders/ESPProvision/DeviceRegistry.swift b/ORLib/ConsoleProviders/ESPProvision/DeviceRegistry.swift index 3137a23..797324d 100644 --- a/ORLib/ConsoleProviders/ESPProvision/DeviceRegistry.swift +++ b/ORLib/ConsoleProviders/ESPProvision/DeviceRegistry.swift @@ -27,8 +27,13 @@ protocol ORESPProvisionManager { func stopESPDevicesSearch() } -struct EspressifProvisionManager: ORESPProvisionManager { +class EspressifProvisionManager: ORESPProvisionManager { var provisionManager: ESPProvisionManager = ESPProvisionManager.shared + var searchedAtLeastOnce = false + + init(provisionManager: ESPProvisionManager) { + self.provisionManager = provisionManager + } public func searchESPDevices(devicePrefix: String, transport: ESPTransport, security: ESPSecurity = .secure) async throws -> [ORESPDevice] { return try await withCheckedThrowingContinuation { continuation in @@ -37,6 +42,7 @@ struct EspressifProvisionManager: ORESPProvisionManager { // even after the search has already completed with a list of device var alreadyResumed = false + searchedAtLeastOnce = true provisionManager.searchESPDevices(devicePrefix: devicePrefix, transport: transport, security: security) { deviceList, error in if let error { if !alreadyResumed { @@ -52,6 +58,8 @@ struct EspressifProvisionManager: ORESPProvisionManager { } public func stopESPDevicesSearch() { + // ESPProvisionManager.stopESPDevicesSearch crashes by force unwrapping nil if it did not perform a search before + guard searchedAtLeastOnce else { return } provisionManager.stopESPDevicesSearch() } } From 23e49c0de60c0dc713690c1076d5e0749d9d1343 Mon Sep 17 00:00:00 2001 From: Eric Bariaux <375613+ebariaux@users.noreply.github.com> Date: Wed, 5 Aug 2026 15:35:58 +0200 Subject: [PATCH 2/2] Made properties private and changed to constant where appropriate --- ORLib/ConsoleProviders/ESPProvision/DeviceRegistry.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ORLib/ConsoleProviders/ESPProvision/DeviceRegistry.swift b/ORLib/ConsoleProviders/ESPProvision/DeviceRegistry.swift index 797324d..703662d 100644 --- a/ORLib/ConsoleProviders/ESPProvision/DeviceRegistry.swift +++ b/ORLib/ConsoleProviders/ESPProvision/DeviceRegistry.swift @@ -28,10 +28,10 @@ protocol ORESPProvisionManager { } class EspressifProvisionManager: ORESPProvisionManager { - var provisionManager: ESPProvisionManager = ESPProvisionManager.shared - var searchedAtLeastOnce = false + private let provisionManager: ESPProvisionManager + private var searchedAtLeastOnce = false - init(provisionManager: ESPProvisionManager) { + init(provisionManager: ESPProvisionManager = ESPProvisionManager.shared) { self.provisionManager = provisionManager }