Lots of delivery jobs are effectively paid by the piece or paid by the route. The driver is not paid hourly.
This is one reason that package delivery drivers often will say that they've attempted delivery when they at best drove past the delivery point. Marking the delivery as attempted gets them off the hook for that delivery, and they can finish their shift that much faster.
Having a broken app that forces the driver to 100% complete every delivery before moving to the next one thus costs the company relatively little, but saves some complexity, missing proof of delivery, etc.
You can still queue the upload client side and let the worker move on. Don't consider the delivery complete until the upload happens, but allow the next leg of the job to start. The client workflow can require taking the picture and clicking submit, but it can accept queueing the actual upload.
In any case, if the network is down, a spinner is a lie. It's pretending to be working on something when it's not. It should show an error at least.
I don’t see how this benefits anyone.