I figured it out. The issue was the way I was creating the AVAssets. Instead of pulling them in from a copied url I used the localIdentifiers to fetch the assets with a defined set of options. The code below works for obtaining the correct FPS for a selected asset.
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
let identifiers = results.compactMap(\.assetIdentifier)
let assets = PHAsset.fetchAssets(withLocalIdentifiers: identifiers, options: nil)
if (assets.count == 0) {
parent.isPresented = false
return
}
var assetArray: [PHAsset] = []
for i in 0...(assets.count - 1) {
assetArray.append(assets[i])
}
let options = PHVideoRequestOptions()
options.version = .original
for asset in assetArray {
PHImageManager.default().requestAVAsset(forVideo: asset, options: options) { avAsset, avAudioMix, info in
var currentVideo = Video()
currentVideo.asset = avAsset
self.parent.selectedVideos.append(currentVideo)
}
}
// Set isPresented to false because picking has finished.
parent.isPresented = false
}
I hope this helps!