iOS Local Network Discovery (UDP Multicast / SSDP) Not Working – Works on AndroidiOS Local Network Discovery (UDP Multicast / SSDP) Not Working – Works on Android

Title: iOS Local Network Discovery (UDP Multicast / SSDP) Not Working – Works on Android

Hi everyone,

I’m facing an issue with local network device discovery on iOS. The same implementation works perfectly on Android, but fails (or behaves inconsistently) on iOS.

What I’m trying to do

I am building a React Native app that discovers Wi-Fi audio devices (Arylic / Linkplay-based speakers) on the same local network.

The discovery flow:

  • Send SSDP (UDP multicast) M-SEARCH request to 239.255.255.250:1900
  • Listen for device responses
  • Fetch device description via HTTP (LOCATION header)
  • Parse and store discovered devices

What works

  • ✅ Android: Device discovery works reliably (multiple devices detected)
  • ❌ iOS: No devices are discovered (or discovery is very inconsistent)

iOS Configuration

I have already added the required permissions in Info.plist:

  • NSLocalNetworkUsageDescription
  • NSBonjourServices (including _http._tcp, _airplay._tcp, _spotify-connect._tcp, etc.)
  • NSAppTransportSecurity with local network exceptions

The app correctly prompts for Local Network permission, and permission is granted.


Implementation Details

  • Using UDP sockets (react-native-udp)

  • Joining multicast group:

    239.255.255.250
    
  • Sending SSDP M-SEARCH requests every few seconds

  • Listening for responses via socket on('message')


Observed Behavior on iOS

  • UDP socket initializes successfully
  • No errors thrown
  • No SSDP responses received
  • devices array remains empty
  • HTTP-based direct calls to known device IPs work fine

Additional Notes

  • The same network, same devices, same code works on Android
  • iOS device is on the same Wi-Fi network
  • Tried both real device and simulator (expected simulator limitations)

Questions

  1. Is UDP multicast (SSDP) restricted or unreliable on iOS for third-party apps?
  2. Are there additional entitlements required to receive multicast responses?
  3. Is there any official Apple-recommended approach for discovering LAN devices (other than Bonjour)?
  4. Is this a known limitation of iOS networking stack?

As a fallback, I’m considering scanning the local subnet via HTTP requests, but that’s less efficient compared to SSDP.


Any guidance or clarification from Apple engineers or others who have faced similar issues would be greatly appreciated.

Thanks in advance.

iOS Local Network Discovery (UDP Multicast / SSDP) Not Working – Works on AndroidiOS Local Network Discovery (UDP Multicast / SSDP) Not Working – Works on Android
 
 
Q