前提・実現したいこと
ミュージックライブラリを利用して音楽を再生するiosアプリを作成したいと思っています。
選曲、再生、停止ボタンを実装予定です。
発生している問題・エラーメッセージ
実機にビルドし、ミュージックライブラリから曲を選択完了する時にデバッグエリアにてエラーが出ました。
また、再生ボタンを押すと同じくエラーメッセージが出て、曲が再生されません。
//選択完了時 IntroApp[6706:1902801] [core] "Error returned from daemon: Error Domain=com.apple.accounts Code=9 "(null)"" x3 IntroApp[6706:1902806] [iTunesCloud] [ICUserIdentityStore] Failed to fetch local store account with error: Error Domain=com.apple.accounts Code=9 "(null)". //再生ボタン押した時 IntroApp[6706:1902784] [SDKPlayback] prepareToPlay failed [no target descriptor] IntroApp[6706:1902784] [SDKPlayback] applicationQueuePlayer _establishConnectionIfNeeded timeout [ping did not pong]
該当のソースコード
Swift5
1import UIKit 2import MediaPlayer 3 4class ViewController: UIViewController, MPMediaPickerControllerDelegate { 5 6 @IBOutlet weak var imageView: UIImageView! 7 @IBOutlet weak var artistLabel:UILabel! 8 @IBOutlet weak var albumLabel: UILabel! 9 @IBOutlet weak var songLabel: UILabel! 10 11 var player = MPMusicPlayerController.applicationMusicPlayer 12 13 override func viewDidLoad() { 14 //プレイヤーのインスタンス作成 15 super.viewDidLoad() 16 17 //プレイヤーの準備 18 player = MPMusicPlayerController.applicationMusicPlayer 19 20 // 再生中のItemが変わった時に通知を受け取る 21 let notificationCenter = NotificationCenter.default 22 notificationCenter.addObserver(self, selector: #selector(type(of: self).nowPlayingItemChanged(notification:)), name: NSNotification.Name.MPMusicPlayerControllerNowPlayingItemDidChange, object: player) 23 24 // 通知の有効化 25 player.beginGeneratingPlaybackNotifications() 26 } 27 28 override func didReceiveMemoryWarning() { 29 super.didReceiveMemoryWarning() 30 } 31 32 ///ミュージックを選択 33 @IBAction func pick(_ sender: AnyObject) { 34 35 //MPMediaPickerControllerのインスタンスを作成 36 let picker = MPMediaPickerController(mediaTypes: .music) 37 // ピッカーのデリゲートを設定 38 picker.delegate = self 39 // 複数選択にする 40 picker.allowsPickingMultipleItems = true 41 42 //icloud上のライブラリを使用可能 43 picker.showsCloudItems = true 44 45 // ピッカーを表示する 46 present(picker, animated: true, completion: nil) 47 } 48 49 //メディアアイテムピッカーでアイテムを選択完了したときに呼び出される 50 func mediaPicker(mediaPicker: MPMediaPickerController, 51 didPickMediaItems mediaItemCollection: MPMediaItemCollection) { 52 53 player.stop() 54 55 // 選択した曲をplayerにセット 56 player.setQueue(with :mediaItemCollection) 57 58 // 選択した曲から最初の曲の情報を表示 59 if let mediaitem = mediaItemCollection.items.first { 60 updateSong(mediaItem: mediaitem) 61 } 62 63 // ピッカーを閉じ、破棄する 64 mediaPicker.dismiss(animated: true, completion: nil) 65 66 } 67 68 //選択がキャンセルされた場合に呼ばれる 69 func mediaPickerDidCancel(mediaPicker: MPMediaPickerController) { 70 // ピッカーを閉じ、破棄する 71 mediaPicker.dismiss(animated: true, completion: nil) 72 } 73 74 //曲情報を表示 75 func updateSong(mediaItem: MPMediaItem) { 76 77 artistLabel.text = mediaItem.albumTitle ?? "不明なタイトル" 78 albumLabel.text = mediaItem.albumArtist ?? "不明なアーティスト" 79 songLabel.text = mediaItem.title ?? "不明な曲" 80 //アートワークを表示 81 if let artwork = mediaItem.artwork { 82 //アートワークの枠サイズを設定 83 let image = artwork.image(at: imageView.bounds.size) 84 //imageviewにアートワークを設定する 85 imageView.image = image 86 } else { 87 //もしアートワークがなければ、灰色表示 88 imageView.image = nil 89 imageView.backgroundColor = UIColor.gray 90 } 91 92 } 93 94 // 再生中の曲が変更になったときに呼ばれる 95 @objc func nowPlayingItemChanged(notification: NSNotification) { 96 97 if let mediaItem = player.nowPlayingItem { 98 updateSong(mediaItem: mediaItem) 99 } 100 } 101 102 deinit { 103 // 再生中アイテム変更に対する監視をはずす 104 let notificationCenter = NotificationCenter.default 105 notificationCenter.removeObserver(self, name: NSNotification.Name.MPMusicPlayerControllerNowPlayingItemDidChange, object: player) 106 // ミュージックプレーヤー通知の無効化 107 player.endGeneratingPlaybackNotifications() 108 } 109 110 //曲を再生 111 @IBAction func pushPlay(sender: AnyObject) { 112 player.play() 113 } 114 115 //曲を停止 116 @IBAction func pushStop(sender: AnyObject) { 117 player.stop() 118 119 } 120} 121
試したこと
ミュージックの選択時に問題があるのではないかと思い、AppleのDeveroperでmediapickerなどについて調べましたがどこが間違っているかはわかりませんでした。
次のサイトを参考にコードを作成しました。
https://nekokichi2yos2.hatenablog.com/entry/2018/10/09/233709
https://nackpan.net/blog/2016/04/13/ios-swift-musicplayercontroller-2/
同じような質問があったのでこちらも参考にさせていただきました。
https://teratail.com/questions/194113
補足情報(FW/ツールのバージョンなど)
Xcode11.6
Swift5
実機IPhone6s ios13.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/26 04:27