Search code examples
ioscrashios12unrecognized-selectoravplayeritem

AVPlayerItem externalMetadata unrecognized selector


This piece of code is crashing on iOS 12 with unrecognised selector exception:

[AVPlayerItem externalMetadata]: unrecognized selector sent to instance

However, this code is not crashing on iOS 13.

Apple documentation states that AVPlayerItem has externalMetadata getter and setter since iOS 12.


    let item = AVPlayerItem(url: videoURL)

    let mutableMetadataItem = AVMutableMetadataItem()
    mutableMetadataItem.identifier = AVMetadataIdentifier.commonIdentifierDescription
    mutableMetadataItem.value = 1
    item.externalMetadata.append(mutableMetadataItem)

Could you please help me to understand why is that happening?


Solution

  • externalMetadata was introduced in iOS 13. That fact is explicitly called out in the relevant WWDC 2019 video. Simply put, the docs (or the availability tags) are wrong — and the result of the mistake is that you are permitted to use externalMetadata in a context (iOS 12) where it is actually absent, and so you crash.