PHPhotoLibrary.shared().performChanges raised error 3303

I want to modify the photo's exif information, which means putting the original image in through CGImageDestinationAddImageFromSource, and then adding the modified exif information to a place called properties.

Here is the complete process:

static func setImageMetadata(asset: PHAsset, exif: [String: Any]) {
        let options = PHContentEditingInputRequestOptions()
        options.canHandleAdjustmentData = { (adjustmentData) -> Bool in
            return true
        }
        asset.requestContentEditingInput(with: options, completionHandler: { input, map in
            guard let inputNN = input else {
                return
            }
            guard let url = inputNN.fullSizeImageURL else {
                return
            }
            
            let output = PHContentEditingOutput(contentEditingInput: inputNN)
            let adjustmentData = PHAdjustmentData(formatIdentifier: AppInfo.appBundleId(), formatVersion: AppInfo.appVersion(), data: Data())
            output.adjustmentData = adjustmentData
            let outputURL = output.renderedContentURL
            
            guard let source = CGImageSourceCreateWithURL(url as CFURL, nil) else {
                return
            }
            
            guard let dest = CGImageDestinationCreateWithURL(outputURL as CFURL, UTType.jpeg.identifier as CFString, 1, nil) else {
                return
            }
            
            CGImageDestinationAddImageFromSource(dest, source, 0, exif as CFDictionary)
            let d = CGImageDestinationFinalize(dest)
            // d is true, and I checked the content of outputURL, image has been write correctly, it could be convert to UIImage and image is ok.
            
            PHPhotoLibrary.shared().performChanges {
                let changeReq = PHAssetChangeRequest(for: asset)
                changeReq.contentEditingOutput = output
            } completionHandler: { succ, err in
                if !succ {
                    print(err) // 3303 here, always!
                }
            }
        })
    }

error 3303 is PHPhotosErrorMissingResource. Do you see any error logs from the system around the time of you trying to do this modification? Does it fail here for all kinds of assets or just a certain subset? Are these plain still images or Live Photos?

PHPhotoLibrary.shared().performChanges raised error 3303
 
 
Q