I have been working with the newly added ability to open an L2CAP channel with my peripheral (for over-the-air updates). It seems to work well up to a 2KB MTU. Up to 2KB, my peripheral gets the data in one chunk and processing continues as expected. If I increase the MTU of the channel on the peripheral side to something above 2KB, the packets become fragmented. What is interesting is that when I write to the L2CAP channel's output stream on the iOS Central side, it states that the correct amount of bytes were written, even above 2K MTU sizes. Moreover, I sniffed the BLE airwaves and found that the channel was successfully opened and the MTU is correct. Everything so far is pointing to CoreBluetooth fragmenting the packets.
Is there is an MTU limit on L2CAP channels in CoreBluetooth? I have been doing all of my testing on an iPhone 7 Plus running iOS 11 beta 2.