PHPickerViewController Not Offering public.hevc UTI for a Known HEVC Video

I'm working on an app where a user needs to select a video from their Photos library, and I need to get the original, unmodified HEVC (H.265) data stream to preserve its encoding.

The Problem I have confirmed that my source videos are HEVC. I can record a new video with my iPhone 15 Pro Max camera set to "High Efficiency," export the "Unmodified Original" from Photos on my Mac, and verify that the codec is MPEG-H Part2/HEVC (H.265).

However, when I select that exact same video in my app using PHPickerViewController, the itemProvider does not list public.hevc as an available type identifier. This forces me to fall back to a generic movie type, which results in the system providing me with a transcoded H.264 version of the video.

Here is the debug output from my app after selecting a known HEVC video:

⚠️ 'public.hevc' not found. Falling back to generic movie type (likely H.264).

What I've Tried My code explicitly checks for the public.hevc identifier in the registeredTypeIdentifiers array. Since it's not found, my HEVC-specific logic is never triggered.

Here is a minimal version of my PHPickerViewControllerDelegate implementation:

import UniformTypeIdentifiers

// ... inside the Coordinator class ...

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    picker.dismiss(animated: true)
    guard let result = results.first else { return }

    let itemProvider = result.itemProvider
    let hevcIdentifier = "public.hevc"
    
    let identifiers = itemProvider.registeredTypeIdentifiers
    print("Available formats from itemProvider: \(identifiers)")
    
    if identifiers.contains(hevcIdentifier) {
        print("✅ HEVC format found, requesting raw data...")
        itemProvider.loadDataRepresentation(forTypeIdentifier: hevcIdentifier) { (data, error) in
            // ... process H.265 data ...
        }
    } else {
        print("⚠️ 'public.hevc' not found. Falling back to generic movie type (likely H.264).")
        itemProvider.loadFileRepresentation(forTypeIdentifier: UTType.movie.identifier) { url, error in
            // ... process H.264 fallback ...
        }
    }
}

My Environment Device: iPhone 15 Pro Max iOS Version: iOS 18.5 Xcode Version: 16.2

My Questions

  1. Are there specific conditions (e.g., the video being HDR/Dolby Vision, Cinematic, or stored in iCloud) under which PHPickerViewController's itemProvider would intentionally not offer the public.hevc type identifier, even for an HEVC video?

  2. What is the definitive, recommended API sequence to guarantee that I receive the original, unmodified data stream for a video asset, ensuring that no transcoding to H.264 occurs during the process?

Any insight into why public.hevc might be missing from the registeredTypeIdentifiers for a known HEVC asset would be greatly appreciated. Thank you.

I have raised a Feedback Assistant on this issue FB18703147

How should I interpret the lack of response, from Apple, regarding this issue?

I guess I'll have to push it to a "Code-level support request" any wisdom from other forum residents?

PHPickerViewController Not Offering public.hevc UTI for a Known HEVC Video
 
 
Q