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
Topic:
App & System Services
SubTopic:
Core OS
Tags: