Notes about iOS 14.5 and later

With the iOS 14.5 update, Apple introduced restrictions on multicast and broadcast communication:

Apps using the BonJour/mDNS APIs must declare their use of such in the Info.plist file. This includes Nabto Edge Client SDK based apps.

Apps using low level BSD based broadcast communication need to send a formal request to Apple to be allowed to do so. This includes legacy Nabto 4/Micro based apps.

Curiously, this restriction was apparently removed by Apple by mistake in iOS 15 and re-introduced in iOS 16. Hence you may not have noticed any issues until suddenly in Q1 2023.

Nabto Edge: Enabling BonJour in the app’s Info.plist file

Apple desribes the necessary steps in section “Protect privacy during device discovery” of their multicast guide.

For Nabto Edge Client SDK based apps, this boils down to adding the following to the app’s Info.plist file:

  • key Bonjour services of array type with a subitem of value _nabto._udp
  • key Privacy - Local Network Usage Description with a description of why you need to do device discovery

The resulting Info.plist file looks as follows in Xcode:

Nabto 4/Micro Legacy Apps: Request Multicast Entitlement

Nabto 4/Micro uses UDP broadcast communication on native BSD sockets. Apple writes the following in the multicast guide in this regard:

Maintaining compatibility with some legacy devices and software might require the use of custom multicast and broadcast protocols. Since these capabilities give your app complete access to the user’s local network, such access requires the com.apple.developer.networking.multicast restricted entitlement.

So you must request the multicast entitlement for each app that uses local device discovery implemented by the Nabto 4/Micro Client SDK. This is done on the Apple developer website.

The following template can be used when submitting a query for the entitlement to Apple:

We use an underlying SDK for communication with our embedded devices, the Nabto 4/Micro Client SDK. This SDK implements a proprietary protocol for IoT communication. For local device discovery, the protocol uses UDP broadcast on the local subnet. We have a fleet of devices deployed that uses this proprietary protocol that cannot be easily updated.

For details about setting up your legacy Nabto 4/Micro app using the multicast entitlement, see this support article.