iOS16.1 connection interval different from iOS16?

When Apple officially released iOS16.0 to users, our custom device that uses a nRF52832 Nordic based BLE chip would no longer hold the connection for more that 90 seconds before disconnecting. We realized that with iOS16.0, Apple changed their requested Connection Intervals and we had to modify them on our product to solve.

However, when we updated to iOS16.1 this month, our original Connection Interval on our product is working again. Does anyone know what Apple changed for iOS16.1 for the connection intervals? Why does iOS16.1 accept 7.5-15ms intervals when iOS16.0 doesn't? There are no changes to the connection interval requirements on the Apple Design Guidelines as of the last revision Oct26th,2022.

For easy comparison, below are the connection intervals that we used in our product with iOS16.

  • [Previously Worked with iOS15 & below] Connection Interval for Product: Min 7.5ms - Max 15ms
    • Does not work with iOS16.0
    • Does work with iOS16.1 & iOS16.1.1
  • [Had to Change for iOS16.0, 16.0.1, 16.0.2, 16.0.3] Connection Interval for Product: Min 15ms - Max 30ms

Would really appreciate it if anyone can share more info on the BLE change logs for iOS16.1.

Thanks for the help!

  • Hello Marie,

    I might be able to get more details on this on Thursday, but I believe the 30ms limit was in the apple guidelines for a while, its just that in 16 the were enforcing it. Maybe they then stepped back due to complaints.

    Regards,

    Elfving

  • Thank you! I will await your response on Thursday.

    Yes, I believe that is the case, but would like some written indication if possible. Since we have a custom hardware device, I'd like to make sure that at least for the rest of the iOS16 updates that get pushed throughout the year, they keep the rules the same (i.e. keep allowing for min7.5-max15ms) as that impacts our customer base. 

    Once iOS17 rolls out next year along with our next production run, we will be strictly adhering to the Apple Design Guidelines so we don't have this issue again.

    We just have to make sure updates on iOS16 don't break the connection again with our device.

  • Marie M said:
    Yes, I believe that is the case, but would like some written indication if possible.

    Understandable, though unfortunately I don't have any written indication explaining the change they made. I just had a talk with a consultant about this, but I didn't get much more info than what I've already given you:

    For v16 they didn't really change much, they just made the iPhone follow their own rules. This documentation from many years ago specifies the accepted connection interval. The Mac for example followed this, but the iPhone was a lot more lenient. With iOS 16.0 the iPhone followed this more strictly, and dropped the connection if the connected device asked for something outside these parameters.

    It is possible that they reversed this for 16.1 and later, however we'd recommend all of our customers to make their devices work as iOS 16 required, because that's what's in Apple's Technical Documentation. The fact that the iPhone allows for looser parameters means they're just asking for trouble down the line. If they follow the documentation, it's guaranteed that all Apple products, including the Watch, the Mac and the iPhone will keep a good connection.

    For more info/ any written documentation of the change, I think you'll have to go to Apple themselves.

    Regards,

    Elfving

  • With iOS 16.0 the iPhone followed this more strictly, and dropped the connection if the connected device asked for something outside these parameters.

    Does the phone (central) really terminate the connection? I guess I should test this myself.

    I was under the impression that the peripheral could ask for pretty much anything, but the phone would not give values outside the specifications. Then it would be up to the peripheral to either accept what the central gave or disconnect.

    The Apple guideline linked above says: "The connection parameter request may be rejected if it does not meet the following guidelines:" So the request to change parameters would be rejected, but does it really mean the central terminates the connection as well?

  • Hello Markku,

    Apparently, what we seen by testing with a sniffer, is that if invalid connection parameters are set on the peripheral a request for invalid conn parameters are sent, which then the iPhone rejects. But then they'll be requested again, like two or three times, and then the iPhone cuts off the connection.

    Regards,

    Elfving

Related