Search code examples
swiftapple-musickit

'init()' is unavailable MusicKit


I can't seem to find a way to fix this issue. I am using MusicKit so you can play music through my app but I keep getting an error.

import UIKit
import MediaPlayer

class ViewController: UIViewController, MPMediaPickerControllerDelegate {
    @IBOutlet weak var playPause: UIButton!
    @IBOutlet weak var artImg: UIImageView!
    @IBOutlet weak var songLabel: UILabel!

    // ERROR HERE
    var mediaPlayer = MPMusicPlayerController()

    @IBAction func chooseBtn(_ sender: Any) {
        let mediaPickerVC = MPMediaPickerController(mediaTypes: .music)
        mediaPickerVC.allowsPickingMultipleItems = false
        mediaPickerVC.popoverPresentationController?.sourceView = view
        mediaPickerVC.delegate = self
        present(mediaPickerVC, animated: true, completion: nil)
    }

    func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
        for item in mediaItemCollection.items {
            if let albumImage = item.artwork?.image(at: CGSize(width: 500, height: 500)) {
                artImg.image = albumImage
                if let title = item.title {
                    songLabel.text = title
                }
            }
        }

        mediaPicker.dismiss(animated: true, completion: nil)
        mediaPlayer.setQueue(with: mediaItemCollection)
        mediaPlayer.play()
    }

    func mediaPickerDidCancel(_ mediaPicker: MPMediaPickerController) {
        mediaPicker.dismiss(animated: true, completion: nil)
    }
}

Solution

  • You don't create your own instance. Use either:

    var mediaPlayer = MPMusicPlayerController.applicationMusicPlayer
    

    or:

    var mediaPlayer = MPMusicPlayerController.applicationQueuePlayer
    

    or:

    var mediaPlayer = MPMusicPlayerController.systemMusicPlayer
    

    depending on your needs. Please see the reference documentation for MPMusicPlayerController for more details.