Thank you for the detailed reply and for pointing out some important distinctions. To clarify: I understand there is no way to guarantee data upload, and I'm building the application and UI to be as fault-tolerant as I can.
To answer your main question:
What is generating this data you’re trying to upload?
The data is photos and videos on the user's device (it is a photo backup application). So, I can't really guarantee the user will be regularly opening the app itself - in fact, ideally I'd like to have the photos continue to sync without the user having to open the app much other than to adjust the configuration.
Is it possible to respond to new photos via the PHPhotoLibraryChangeObserver, even if my app is not currently running?