Our iOS App uses BLE to connect to embedded devices. It was all working fine till iOS 15. After upgrading to iOS 16 we started seeing slowness in our app. So the scenario here is we download a metadata file after successful BLE connection to embedded device. Previously in iOS 15 this operation use to take max 7-8 seconds. But now it takes 28 seconds to download the same metadata file. And this is main cause of slowness. On further investigation we found that ATT_MTU negotiation was not sent from iPhone to embedded device and hence embedded device used the default max MTU size for connection. Which is 250. Till iOS 15: MTU was negotiated as 527 or something higher based on the iPhone or device type. As you can see in the image below.
Here [localhost (sivaram...)] is our Apple device and [Apple_d4:86:e9] is the embedded device. And L2CAP is sent from iPhone to device, and which negotiate the MTU size as 527.
iOS 16.1.1 and after that MTU negotiation is not happening and it is always constant at 250 as set by embedded devices.
Here localhost () is our Apple device and SiliconL_ee:c5:97 is the embedded device. And here there in no L2CAP call from iPhone that is not been sent at all. Hence, we received 250 as the max MTU size from the embedded device and are using it.
We want to know how we can sent the negotiated MTU size as was happening before in iOS 15 from our app.
Reference of the similar Apple tickets are also mention below.
https://developer.apple.com/forums/thread/716874 https://developer.apple.com/forums/thread/715646 https://developer.apple.com/forums/thread/713095
Your response to this ticket is highly appreciated.