Firstly, I'm completely new to native Swift/iOS Development so apologies if this is a simple question that I'm seemingly misunderstanding.
I have an app which has the Multicast Networking entitlement and works fine on my own iPhone, however it only has one interface when I list them (en0)
The multicast networking, however, fails entirely on another test iPhone but this also appears to have one or more 'ipsecX' interfaces both with the IP 192.0.0.6 - I'm guessing but I wonder if this is related to a connection to Apple Watch as I've noticed two devices that have these additional interfaces, and both of them are connected to Apple Watch (with no VPNs configured) and that's the only thing that differentiates them from my own iPhone.
I can reproduce the symptoms on my own iPhone by connecting to a VPN which creates a utunX interface (but in my case disconnecting from the VPN removes this interface and it works as expected)
I expect a solution would be to bind my Multicast Group to the WiFi IP but I've tried a few things without success;
Setting params.requiredInterfaceType = .wifi
Looping through each interface to try and 'find' en0 and bind this way;
let queue = DispatchQueue(label: "En0MonitorQueue")
monitor.pathUpdateHandler = { [weak self] path in
// Find the en0 interface
if let en0 = path.availableInterfaces.first(where: { $0.name == "en0" }) {
monitor.cancel() // Stop monitoring once found
let params = NWParameters.udp
params.allowLocalEndpointReuse = true
params.requiredInterface = en0
guard let multicast = try? NWMulticastGroup(for: [
.hostPort(
host: NWEndpoint.Host(self?.settings.multicastIP ?? "224.224.0.77"),
port: NWEndpoint.Port(rawValue: UInt16(self?.settings.multicastPort ?? 23019))
)
]) else {
print("Failed to Start Multicast Group")
return
}
let group = NWConnectionGroup(with: multicast, using: params)
// previous multicast stuff is here
} else {
print("en0 interface not found, waiting...")
}
}
monitor.start(queue: queue)
Neither seems to work.
I feel I must be missing something simple, because it should not be the case that simply enabling a VPN (or having another interface created by something else) breaks Multicast on en0/WiFi.
That said, I also don't want to limit the user to en0 as they may wish to use Ethernet interfaces, but for now it would be good to make it work to confirm this is the problem.
Topic:
App & System Services
SubTopic:
Networking