I am attempting to enumerate SMB, AFP and CIFS services in my local network. I have the following code snippet inside a properly working class conforming to NetServiceBrowserDelegate, NetServiceDelegate (macOS, target 12.0):
func netServiceDidResolveAddress(_ sender: NetService) {
if let addresses = sender.addresses, addresses.count > 0 {
for address in addresses {
let data = address as NSData
let inetAddress: sockaddr_in = data.castToCPointer()
print("\(inetAddress)")
}
}
}
In debug mode it works as expected, printing the socket addresses for available services:
sockaddr_in(sin_len: 16, sin_family: 2, sin_port: 48385, sin_addr: __C.in_addr(s_addr: 16777343), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
sockaddr_in(sin_len: 28, sin_family: 30, sin_port: 48385, sin_addr: __C.in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
sockaddr_in(sin_len: 16, sin_family: 2, sin_port: 48385, sin_addr: __C.in_addr(s_addr: 1778428096), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
sockaddr_in(sin_len: 28, sin_family: 30, sin_port: 48385, sin_addr: __C.in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
However in release mode, the same code prints zero-filled socket addresses (but in correct quantity):
sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: __C.in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: __C.in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: __C.in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: __C.in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
In my info.plist I have filled the NSLocalNetworkUsageDescription and my NSBonjourServices is set to ["_smb._tcp", "_afpovertcp._tcp", "_cifs._tcp"], and there are no errors or warnings in the console.
My sandbox has the com.apple.security.network.client entitlement set to YES.
Do I miss anything? Do I maybe need to list anything else in NSBonjourServices?