iOS16 release and in-app Network Communications

We have an app that has been in the store for many years. The purpose of the app is to connect to Zebra printers via BT, Wifi, Wired, USB, etc. and then make tweaks to the printer's settings.

While doing an update here over the last few months, we discovered that our Zebra family of printers will no longer ‘discover’ networked connections on the iOS version of the mobile app when iOS16 or greater was installed on the mobile devices. 

I am reaching out because of this post: https://developer.apple.com/forums/thread/663875

We definitely have multicast entitlement requested/approved and it has been added to the application.  I am wondering if we are also missing something else here in this process that we can’t find.

I see that that specific forum post has been locked so I can't just tack onto that conversation.

Any thoughts or articles you can point us to would be fantastic. Right now we are kinda stuck with this release until we get a version of iOS that ‘fixes’ this issue, but honestly, we are not sure if this is a bug on the Apple side (have seen inklings that it might be in other posts) or if there is more that we have to do on the network broadcasting side or something we are not aware of?

Answered by tnuzzo in 733510022

Here is the response: [Dict] [Key] get-task-allow [Value] [Bool] false [Key] com.apple.developer.team-identifier [Value] [String] DNSTESXL8W [Key] application-identifier [Value] [String] DNSTESXL8W.com.zebra.printersetup

we discovered that our Zebra family of printers will no longer ‘discover’ networked connections

What protocol does your app use for this discovery? Bonjour? Or something custom?

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Sorry I hadn't seen your reply.
We are using a custom protocol. The calls we have are using a UDP socket to broadcast the request msg. If the IP address is in the Multicast address the discovery request msg is broadcast on, it becomes a UDP multicast discovery. If the directed IP address is directed, it becomes the UDP directed broadcast etc.. What is interesting is, within our app, even if we enter the DNS or IP address directly, it still won't allow the connection to continue with iOS 16. All works fine on released version (even when device is using iOS 16).
Hopefully that is what you are looking for. I'll watch to see if you need more detail than that.

All works fine on released version (even when device is using iOS 16).

That’s not completely unexpected. Our local network privacy checks only kick in if you build with a modern SDK, so your existing app continues to work but your new app has to follow the new rules.

We are using a custom protocol …

Does this trigger the local network privacy alert?

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

The local network privacy alert doesn't come up automatically the first time when the UDP multicast starts. After we restart the iOS 16 device, however, the alert comes up when the USB multicast starts. After OK'ed the alert, the local network permission is marked as green on the device's app setting page. But the broadcast seems still being blocked as we don't see any responses.

OK.

There are three common causes of broadcast issues like this:

  • Local network privacy (A)

  • Multicast entitlement (B)

  • Bugs in your broadcast code (C)

You’ve ruled out number A, which good. Let’s rule out B:

  1. In Xcode, build your app for the device.

  2. Choose Product > Show Build Folder in Finder.

  3. In the Finder, navigate to Products > Debug-iphoneos.

  4. Open a Terminal window in that directory.

  5. Run this command:

    % codesign -d --entitlements - AAA.app
    

    replacing AAA with the name of your app.

What does that print?

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Accepted Answer

Here is the response: [Dict] [Key] get-task-allow [Value] [Bool] false [Key] com.apple.developer.team-identifier [Value] [String] DNSTESXL8W [Key] application-identifier [Value] [String] DNSTESXL8W.com.zebra.printersetup

In future, please post code listings in a code block because it’s hard to read code when it’s all jammed together like that. See tip 5 in Quinn’s Top Ten DevForums Tips.

Your entitlement dump suggests that you’ve not applied the multicast entitlement correctly. It should be showing an entry for com.apple.developer.networking.multicast. See my Using the Multicast Networking Additional Capability post for more on how to set this up correctly.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Does this issue resolved, I had implemented zebra ZD420 Printer in my app however it is working quite fine but in iOS 16 and later version's unable to discover?

Any leads? Thanks

iOS16 release and in-app Network Communications
 
 
Q