What is the best way to access files which are stored on a Mac on the same network as a tvOS device? My first thought was Bonjour, but I wasn't able to make much progress. I optimistically tried the following:
class ViewController: UIViewController, NSNetServiceBrowserDelegate {
override func viewDidLoad() {
super.viewDidLoad()
/
print("Browsing for domains")
let serviceBrowser = NSNetServiceBrowser()
serviceBrowser.delegate = self
serviceBrowser.searchForBrowsableDomains()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
/
}
func netServiceBrowser(browser: NSNetServiceBrowser, didFindDomain domainString: String, moreComing: Bool) {
print(domainString)
}
}
As I have a Mac on the network with file sharing turned on (both AFP and SMB) I was hoping that I'd be able to detect that via Bonjour, but as the callback is never executed I presume that that is not the case.
I'd really appreciate some direction here 🙂
I found the problem. The service browser needed to be declared as a property of the view controller. The code I originally wrote declared the service browser in the viewDidLoad() function and so the object must have been being deleted by the garbage collector, hence no callbacks were being executed. I've included some updated code below.
class ViewController: UIViewController, NSNetServiceBrowserDelegate {
let serviceBrowser = NSNetServiceBrowser()
override func viewDidLoad() {
super.viewDidLoad()
/
print("Browsing for domains")
serviceBrowser.delegate = self
serviceBrowser.searchForBrowsableDomains()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
/
}
func netServiceBrowser(browser: NSNetServiceBrowser, didFindDomain domainString: String, moreComing: Bool) {
print("Found domain: \(domainString)")
}
func netServiceBrowserWillSearch(browser: NSNetServiceBrowser) {
print("service browser will search")
}
func netServiceBrowserDidStopSearch(browser: NSNetServiceBrowser) {
print("Service browser did stop search")
}
func netServiceBrowser(browser: NSNetServiceBrowser, didNotSearch errorDict: [String : NSNumber]) {
print("Did not search")
}
func netServiceBrowser(browser: NSNetServiceBrowser, didFindService service: NSNetService, moreComing: Bool) {
print("Found service: \(service.name)")
}
func netServiceBrowser(browser: NSNetServiceBrowser, didRemoveDomain domainString: String, moreComing: Bool) {
print("Did remove domain")
}
func netServiceBrowser(browser: NSNetServiceBrowser, didRemoveService service: NSNetService, moreComing: Bool) {
print("Did remove service")
}
}