PHBackgroundResourceUploadExtension is never scheduled when iCloud Photos is enabled

Feedback: PHBackgroundResourceUploadExtension is never scheduled when iCloud Photos is enabled

Summary

PHBackgroundResourceUploadExtension's init() and process() methods are never called by the system when iCloud Photos is enabled on the device, even though setUploadJobExtensionEnabled(true) succeeds and uploadJobExtensionEnabled returns true.

Environment

  • iOS 26.4 (both devices)
  • Xcode 26.x
  • Tested on iPhone 17 Pro (primary device, 10,000+ photos) and an older iPhone (development device, 200+ photos)
  • Same build deployed to both devices
  • Full photo library access (.authorized) on both devices

Steps to Reproduce

  1. Create an app with a PHBackgroundResourceUploadExtension (ExtensionKit, extension point com.apple.photos.background-upload)
  2. Enable iCloud Photos on the device (Settings > Photos > iCloud Photos)
  3. In the host app, request .readWrite photo library authorization and receive .authorized
  4. Call PHPhotoLibrary.shared().setUploadJobExtensionEnabled(true) — succeeds without error
  5. Verify PHPhotoLibrary.shared().uploadJobExtensionEnabled == true
  6. Wait for the system to schedule the extension (tested overnight, with device on charger + WiFi)

Expected Behavior

The system should call the extension's init() and process() methods to allow the app to create upload jobs, as documented in "Uploading asset resources in the background."

Actual Behavior

The extension's init() and process() are never called. The extension process is never launched.

Investigation via Console.app

Using Console.app to monitor system logs on both devices revealed the root cause:

When iCloud Photos is DISABLED (extension works correctly):

assetsd    Checked all submitted library bundles. Result: YES

dasd    SUBMITTING: com.apple.assetsd.backgroundjobservice.assetresourceuploadextensionrunner:35E7B5
dasd    Submitted: ...assetresourceuploadextensionrunner at priority 5
dasd    submitTaskRequestWithIdentifier: Submitted BGSystemTask com.apple.assetsd.backgroundjobservice.assetresourceuploadextensionrunner

The extension is subsequently launched and init() / process() are called as expected.

When iCloud Photos is ENABLED (extension never works):

assetsd    Checked all submitted library bundles. Result: NO

No assetresourceuploadextensionrunner background task is ever submitted to dasd. The extension is never launched.

Reproducibility

  • 100% reproducible across two different devices
  • Toggling iCloud Photos off (and waiting for sync to complete) immediately resolves the issue
  • Toggling iCloud Photos on immediately causes the issue to reappear
  • Reinstalling the app does not help
  • The same build works on the same device when iCloud Photos is disabled

Impact

This effectively makes PHBackgroundResourceUploadExtension unusable for the vast majority of users, as most iPhone users have iCloud Photos enabled. Third-party photo backup apps (Google Photos, Dropbox, OneDrive, etc.) would all be affected by this limitation.

The documentation for "Uploading asset resources in the background" does not mention any incompatibility with iCloud Photos being enabled.

Requested Resolution

Please either:

  1. Allow PHBackgroundResourceUploadExtension to be scheduled regardless of iCloud Photos status, or
  2. Document this limitation clearly in the API documentation if it is intentional behavior
PHBackgroundResourceUploadExtension is never scheduled when iCloud Photos is enabled
 
 
Q