When I ask iOS what the maximum value length is for BLE characteristics, it will typically give me a number that is more than 20 bytes. Usually it is around 150 or 200. This means that iOS can already break long characteristic values into packet-sized chunks and send them one by one. But does iOS guarantee complete delivery? I ask because I've heard that some BLE SoC devices will completely drop a connection in the middle of a characteristic transmission if any error occurs. What controls this behavior? Can iOS recover from a dropped connection or does it not try?
GATT transactions are cancelled if the connection is terminated before they finish.
iOS will not automatically reconnect to a slave device if a disconnection occurs; you will need to connect again and try to perform the GATT operation again.
Note that GATT writes are atomic, meaning that either the full value will be written, or nothing at all.