I want to +1 this as something I am also seeing and having issue because of suddenly very small MTU size. CoreBluetooth appears to always take 3 bytes off the negotiated MTU size in the value it gives you for maximumWriteValueLength(for: .withoutResponse) - so when it says 20, MTU was actually 23. But I am confirming that we are seeing the same issue - that we request and do get at times an MTU 517 - but it degrades over time, yes, all the way down to 23 (20). Rebooting the iPhone appears to temporarily fix the issue.
There is also another post regarding this same issue (but no response yet from apple): https://developer.apple.com/forums/thread/716874
Post
Replies
Boosts
Views
Activity
I want to +1 this as a new issue after the release of iOS 16. Not sure on iOS 16.0.0, but we have seen this issue for sure on iOS 16.0.1 and 16.0.2.
The MTU size seems to degrade over time (hours, at most 24). We start out getting a full MTU size of 517 - then later it's smaller to 247 - and it degrades further... the smallest MTU we are seeing is 23. Rebooting the iPhone appears to reset this and temporarily restore MTU to expected size, but it repeats the process. As the OP notes an MTU of 23 is prohibitively slow.