Bonjour services do not resolve addresses in release mode

28 Views Asked by At

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?

0

There are 0 best solutions below