Why no artwork in iTunesLibrary Framework?

How is it that ITLibrary only returns artwork for PURCHASED media from iTunes? There is no such restriction mentioned anywhere in the documentation.


My iTunes Library is fully populated, and I need access to the artwork I have carefully curated over the years for various media.


An ITLibMediaItem's hasArtworkAvailable flag is always false, and its artwork (ITLibArtwork) object never contains any imageData.


Worse, if I call ITLibrary's artwork(forMediaFile: ) method, it NEVER extracts or returns a valid ITLibArtwork object AS DOCUMENTED.


What's up with that, Apple?

Replies

Maybe this can help someone in the future as I am sure you've already worked this out after 5 years.

I use this to get album artwork that is embedded in the MP3 file (all my music in my library is MP3 music).

      let playerItem = AVPlayerItem(url: mp3URL)
      let mp3Details = playerItem.asset.metadata
      for item in mp3Details {
        guard let key = item.key?.description, let value = item.value else {
          continue
        }
        /*
         TPE1 = Album artist
         TPE2 = Artist
         USLT = Lyrics
         COMM = Comments
         TCON = Genre
         TRCK = Track of tracks
         TCOM = Composer
         TSSE = Encoder
         TPOS = Disk of Disks
         TDRC = Year released
         TALB = Album Name
         TBPM = Beats per minute
         */
        switch key {
        case "***2": mp3Info["title"] = value as? String ?? nil
        case "TPE1": mp3Info["artist"] = value as? String ?? nil
        case "APIC" where value is NSData : mp3Info["artwork"] = NSImage(data: (value as! NSData) as Data) ?? nil
        case "TALB": mp3Info["album"] = value as? String ?? nil
        case "USLT": mp3Info["lyrics"] = value as? String ?? nil
        case "TBPM": mp3Info["bpm"] = value as? Int ?? nil
        default: continue
        }
      }

Of course, this will probably not work on downloaded artwork, since that is an Apple product/service. But if you have MP3 files and you add artwork manually, like I do for my music, then this should work for retrieval.