几天来,我一直在摸不着头脑,为什么我无法播放 Apple Music 目录或图书馆内容的商店标识符。事实证明,直接设置商店标识符MPMusicPlayerApplicationController
将播放内容,而使用MPMusicPlayerStoreQueueDescriptor
并将其传递给MPMusicPlayerApplicationController
没有效果。
我仍然收到以下错误日志:
[SDKPlayback] applicationQueuePlayer _establishConnectionIfNeeded timeout [ping did not pong]
[core] "Error returned from daemon: Error Domain=com.apple.accounts Code=9 "(null)""
iTunesCloud] ACAccountStore 0x283e1bdb0 - Error retrieving iTunesStore accounts. err=Error Domain=com.apple.accounts Code=9 "(null)"
[iTunesCloud] [ICUserIdentityStore] Failed to fetch local store account with error: Error Domain=com.apple.accounts Code=9 "(null)".
......但已经过去了Error Domain=MPMusicPlayerControllerErrorDomain Code=6 "Failed to prepare to play" UserInfo={NSDebugDescription=Failed to prepare to play}
。
希望这可能对其他偶然发现此问题的人有用:)
这是一些代码,所以你明白我的意思:
class AMPlayer {
private(set) var player: MPMusicPlayerController!
// Every time `queue` is set, it'll ensure the player queue is "updated"
private var queue: MPMusicPlayerStoreQueueDescriptor! {
didSet {
guard self.queue != nil,
let storeIDs = self.queue.storeIDs,
!storeIDs.isEmpty
else { return }
self.player.setQueue(with: storeIDs)
}
}
// This is how I set the queue from outside the class
public func setQueue(with resourceIDs: [String]) {
self.queue = MPMusicPlayerStoreQueueDescriptor(storeIDs: resourceIDs)
}
// This is how I start playback
public func play() {
self.player.prepareToPlay { (error) in
if let error = error as? MPError {
print("Error while preparing to play: \(error)")
} else {
self.player.play()
}
}
}
}