MTU negotiation happens between the device your app is running on and the accessory being connected to, at the controller level. You app has no control or visibility to this process as to when the negotiation is completed or what the negotiated value is. The final MTU value will depend on various factors like device version, OS version, connection type and parameters, BLE version either end of the connection is using, and so on. If and only if your app is using L2CAP, then that's another matter. To control the Maximum Transmission Unit (MTU) for an L2CAP channel, you can use the requestRemoteMTU(_:) function. This function initiates the process to reconfigure the L2CAP channel with a new outgoing MTU. The requestRemoteMTU(_:) function takes a BluetoothL2CAPMTU parameter, which is the desired outgoing MTU. It returns kIOReturnSuccess if the channel reconfiguration process was successfully initiated. Still, this API does not provide an indication that the reconfiguration process has completed.