skip to Main Content

I’ve been trying to update the artwork shown for an item in MPNowPlayingInfoCenter using MPMediaItemPropertyArtwork as shown in the following code taken from Apple’s docs

if let image = UIImage(named: "image_here") {
    nowPlayingInfo[MPMediaItemPropertyArtwork] =
        MPMediaItemArtwork(boundsSize: image.size) { size in
            return image
    }
}

The issue I’m having is that this sets a smaller image as shown in the photo below in the red square. I’m trying to figure out how to set the image in the larger yellow square, and I can’t find any documentation that differentiates between the two.

enter image description here

EDIT

vint’s answer below clarified that the smaller icon is the app icon. I am however setting the nowPlayingInfo dictionary successfully since my other metadata is reaching the lock screen controls, like the title (blurred), duration, elapsed playback time). It’s just the artwork that appears to not being working.

2

Answers


  1. Chosen as BEST ANSWER

    Just in case anyone finds this question and was going crazy like myself, I was able to set the image by correctly resizing my UIImage to the incoming size parameter given to the MPMediaItemArtwork callback function. As it says in the docs:

    The request handler returns an image in the newly requested size. The requested size must be less than the boundsSize parameter.

    Then setting my image to the incoming size parameter with the following extension, the MPMediaItemPropertyArtwork was finally successfully set.

    extension UIImage {
        func imageWith(newSize: CGSize) -> UIImage {
            let renderer = UIGraphicsImageRenderer(size: newSize)
            let image = renderer.image { _ in
                self.draw(in: CGRect.init(origin: CGPoint.zero, size: newSize))
            }
            return image.withRenderingMode(self.renderingMode)
        }
    }
    
    if let image = UIImage(named: "image_here") {
        nowPlayingInfo[MPMediaItemPropertyArtwork] =
            MPMediaItemArtwork(boundsSize: image.size) { size in
                // Extension used here to return newly sized image
                return image.imageWith(newSize: size)
        }
    }
    

  2. Obviously you did not successfully set the cover image of the track to
    MPNowPlayingInfoCenter, The image in red square is your app icon, this is MPNowPlayingInfoCenter‘s default behavior,

    I guess you lost the next step

    // set the info dictionary back to default control center
    MPNowPlayingInfoCenter.default.nowPlayingInfo = nowPlayingInfo
    

    If you has set that, you should find the failed reason, seed this answer

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search