Posts

Post not yet marked as solved
1 Replies
338 Views
Hey there 👋, My team and me have implemented support for WAC devices in our App using EAWiFiUnconfiguredAccessoryBrowser. When the device we want to support is factory reset we are able to find it as well as the OS is able to. The device has a "setup wifi" button, which starts the WAC process, and iOS (as well as MacOS) are able to find it. Unfortunately we are not able to find it in that case using EAWiFiUnconfiguredAccessoryBrowser.. I could not find any restrictions on it in the documentation, any glues why we are not able to detect it in that situation? I isolated the problem in a sample and used the following implementation to test this: import Foundation import ExternalAccessory import os import Combine class WACWatcher: NSObject { private let browser: EAWiFiUnconfiguredAccessoryBrowser private let logger = Logger(subsystem: "WACWatcher", category: "networking") @Published var accessories: [EAWiFiUnconfiguredAccessory] = [] override init() { self.browser = EAWiFiUnconfiguredAccessoryBrowser() super.init() self.browser.delegate = self } func start() { browser.startSearchingForUnconfiguredAccessories(matching: nil) } func stop() { browser.stopSearchingForUnconfiguredAccessories() } } extension WACWatcher: EAWiFiUnconfiguredAccessoryBrowserDelegate { func accessoryBrowser( _ browser: EAWiFiUnconfiguredAccessoryBrowser, didUpdate state: EAWiFiUnconfiguredAccessoryBrowserState ) { switch state { case .wiFiUnavailable: logger.debug("WAC Browser state changed to wifiUnavailable") break case .stopped: logger.debug("WAC Browser state changed to stopped") break case .searching: logger.debug("WAC Browser state changed to searching") break case .configuring: logger.debug("WAC Browser state changed to configuring") break } } func accessoryBrowser( _ browser: EAWiFiUnconfiguredAccessoryBrowser, didFindUnconfiguredAccessories accessories: Set<EAWiFiUnconfiguredAccessory> ) { logger.info("WACWatcher found accessories: \(accessories)") self.accessories.append(contentsOf: accessories) } func accessoryBrowser( _ browser: EAWiFiUnconfiguredAccessoryBrowser, didRemoveUnconfiguredAccessories accessories: Set<EAWiFiUnconfiguredAccessory> ) { logger.info("WACWatcher removed accessories: \(accessories)") self.accessories = accessories.filter({ accessory in accessories.contains(where: { $0.name == accessory.name }) }) } func accessoryBrowser( _ browser: EAWiFiUnconfiguredAccessoryBrowser, didFinishConfiguringAccessory accessory: EAWiFiUnconfiguredAccessory, with status: EAWiFiUnconfiguredAccessoryConfigurationStatus ) {} } This WACWatcher gets used in a ViewModel and a view having a start stop button and a list showing the device name. If you'd need to see it, I can zip it and attach it to this post.
Posted Last updated
.