@@ -49,7 +49,7 @@ public class ServerManager: NSObject
4949 // Allow other AltKit queues to target this one.
5050 internal let dispatchQueue = DispatchQueue ( label: " io.altstore.altkit.ServerManager " , qos: . utility, autoreleaseFrequency: . workItem)
5151
52- private let serviceBrowser = NetServiceBrowser ( )
52+ private var serviceBrowser : NetServiceBrowser ?
5353 private var resolvingServices = Set < NetService > ( )
5454
5555 private var autoconnectGroup : DispatchGroup ?
@@ -59,9 +59,6 @@ public class ServerManager: NSObject
5959 {
6060 super. init ( )
6161
62- self . serviceBrowser. delegate = self
63- self . serviceBrowser. includesPeerToPeer = false
64-
6562 NotificationCenter . default. addObserver ( self , selector: #selector( ServerManager . didEnterBackground ( _: ) ) , name: UIApplication . didEnterBackgroundNotification, object: nil )
6663 NotificationCenter . default. addObserver ( self , selector: #selector( ServerManager . willEnterForeground ( _: ) ) , name: UIApplication . willEnterForegroundNotification, object: nil )
6764 }
@@ -75,7 +72,17 @@ public extension ServerManager
7572 guard !self . isDiscovering else { return }
7673 self . isDiscovering = true
7774
78- self . serviceBrowser. searchForServices ( ofType: ALTServerServiceType, inDomain: " " )
75+ DispatchQueue . main. async {
76+ // NetServiceBrowser must be initialized on main thread.
77+ // https://stackoverflow.com/questions/3526661/nsnetservicebrowser-delegate-not-called-when-searching
78+
79+ let serviceBrowser = NetServiceBrowser ( )
80+ serviceBrowser. delegate = self
81+ serviceBrowser. includesPeerToPeer = false
82+ serviceBrowser. searchForServices ( ofType: ALTServerServiceType, inDomain: " " )
83+
84+ self . serviceBrowser = serviceBrowser
85+ }
7986 }
8087
8188 @objc
@@ -88,7 +95,8 @@ public extension ServerManager
8895 self . ignoredServers. removeAll ( )
8996 self . resolvingServices. removeAll ( )
9097
91- self . serviceBrowser. stop ( )
98+ self . serviceBrowser? . stop ( )
99+ self . serviceBrowser = nil
92100 }
93101
94102 func connect( to server: Server , completion: @escaping ( Result < ServerConnection , Error > ) -> Void )
@@ -237,15 +245,15 @@ private extension ServerManager
237245
238246 self . resolvingServices. removeAll ( )
239247 self . discoveredServers. removeAll ( )
240- self . serviceBrowser. stop ( )
248+ self . serviceBrowser? . stop ( )
241249 }
242250
243251 @objc
244252 func willEnterForeground( _ notification: Notification )
245253 {
246254 guard self . isDiscovering else { return }
247255
248- self . serviceBrowser. searchForServices ( ofType: ALTServerServiceType, inDomain: " " )
256+ self . serviceBrowser? . searchForServices ( ofType: ALTServerServiceType, inDomain: " " )
249257 }
250258}
251259
0 commit comments