OTA DFU from iOS to Adafruit bootloader fails on first firmware update blob

I have an app that uses the Nordic IOS-DFU-LIBRARY to drive the OTA DFU process with an Adafruit nrf52840 Feather running the Adafruit bootloader. I have the library setup just like the example app but with PRNs set to 1, since that worked one time but hasn't since. The example app works for PRNs between 1 and 8, mostly reliably. The Android version of the library works fine.

Debugging the library and it's clear that it's waiting for a response from the device:

Found it!
Service is connecting to the DFU target
[D] -- [Callback] Central Manager did update state to: Powered ON
[V] -- Connecting to BCaseDFU...
[D] -- centralManager.connect(peripheral, options: nil)
[D] -- [Callback] Central Manager did connect peripheral
[I] -- Connected to BCaseDFU
[V] -- Discovering services...
[D] -- peripheral.discoverServices(nil)
[I] -- Services discovered
[V] -- Starting Legacy DFU...
[I] -- Connected to BCaseDFU
[I] -- Services discovered
[V] -- Legacy DFU Service found
[V] -- Discovering characteristics in DFU Service...
[D] -- peripheral.discoverCharacteristics(nil, for: 00001530-1212-EFDE-1523-785FEABCD123)
[I] -- DFU characteristics discovered
[V] -- Reading DFU Version number...
[D] -- peripheral.readValue(00001534-1212-EFDE-1523-785FEABCD123)
[I] -- Read Response received from 00001534-1212-EFDE-1523-785FEABCD123, value (0x): 0800
[A] -- Version number read: 0.8
DFU Service is initializing DFU operation
[V] -- Enabling notifications for 00001531-1212-EFDE-1523-785FEABCD123...
[D] -- peripheral.setNotifyValue(true, for: 00001531-1212-EFDE-1523-785FEABCD123)
[V] -- Notifications enabled for 00001531-1212-EFDE-1523-785FEABCD123
[A] -- DFU Control Point notifications enabled
[V] -- Writing to characteristic 00001531-1212-EFDE-1523-785FEABCD123...
[D] -- peripheral.writeValue(0x0104, for: 00001531-1212-EFDE-1523-785FEABCD123, type: .withResponse)
[V] -- Writing image sizes (0b, 0b, 252196b) to characteristic 00001532-1212-EFDE-1523-785FEABCD123...
[D] -- peripheral.writeValue(0x000000000000000024d90300, for: 00001532-1212-EFDE-1523-785FEABCD123, type: .withoutResponse)
[I] -- Data written to 00001531-1212-EFDE-1523-785FEABCD123
[A] -- Start DFU (Op Code = 1, Upload Mode = 4) request sent


Enabling debugging to the Adafruit bootloader and it appears to receive that request but it isn't clear where it gets stuck at. The disconnect isn't related:

I used the Nordic BLE sniffer to capture the trace:
bootloader_dfu.pcap

What are some possible paths to pursue troubleshooting this? I assume it's something with the library usage since that's the only possible difference between the example app and our app.

Related