Hello everyone,
I am trying to understand how to decode the JSON response returned by the suggestions/top results endpoint in MusicKit
As you can see the response returns suggestions, which has two different types, Albums and Songs within the same 'suggestions' array. How can I decode the response even if there are different types using a single struct?
{
"results" : {
"suggestions" : [
{
"content" : {
"attributes" : {
"url" : "https:\/\/music.apple.com\/us\/artist\/megan-thee-stallion\/1258989914",
"name" : "Megan Thee Stallion",
"genreNames" : [
"Hip-Hop\/Rap"
]
},
"id" : "1258989914",
"relationships" : {
"albums" : {
"data" : [
{
"href" : "\/v1\/catalog\/us\/albums\/1537889223",
"type" : "albums",
"id" : "1537889223"
}
],
"next" : "\/v1\/catalog\/us\/artists\/1258989914\/albums?offset=25",
"href" : "\/v1\/catalog\/us\/artists\/1258989914\/albums"
}
},
"href" : "\/v1\/catalog\/us\/artists\/1258989914",
"type" : "artists"
},
"kind" : "topResults"
},
{
"content" : {
"href" : "\/v1\/catalog\/us\/artists\/991187319",
"attributes" : {
"genreNames" : [
"Hip-Hop\/Rap"
],
"url" : "https:\/\/music.apple.com\/us\/artist\/moneybagg-yo\/991187319",
"name" : "Moneybagg Yo"
},
"id" : "991187319",
"type" : "artists",
"relationships" : {
"albums" : {
"href" : "\/v1\/catalog\/us\/artists\/991187319\/albums",
"data" : [
{
"id" : "1550876571",
"href" : "\/v1\/catalog\/us\/albums\/1550876571",
"type" : "albums"
}
],
"next" : "\/v1\/catalog\/us\/artists\/991187319\/albums?offset=25"
}
}
},
"kind" : "topResults"
}
]
}
}
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hi Apple Engineers,
In my app Caset, the album artwork is no longer displaying correctly, instead the console is printing with error:
[Artwork] [MPArtwork] Failed to create directory at 'file:///var/mobile/Media/iTunes_Control/iTunes/Artwork/Caches/96x96/61/' with error: Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “61” in the folder “96x96”." UserInfo={NSFilePath=/var/mobile/Media/iTunes_Control/iTunes/Artwork/Caches/96x96/61, NSUnderlyingError=0x280552dc0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}
Here is the code I am using to display the album artwork of the current item:
@ObservedObject private var playerQueue = ApplicationMusicPlayer.shared.queue
//In the BODY
switch playerQueue.currentEntry?.item {
case .song(let song):
if let artwork = song.artwork {
ArtworkImage(artwork, width: 40, height: 40)
}
case .musicVideo(let video):
if let artwork = video.artwork {
ArtworkImage(artwork, width: 70, height: 40)
}
case nil:
EmptyView()
}
Related bug has been filed here: FB10189431
This unexpected behavior is new and was previously worked as expected in early versions of iOS 15.
Hi all,
I have an app where I am displaying a list of item in a view. Problem is that the main thread is often getting blocked when I start scrolling.
Here is what I getting from using Profiler.
I understand that CATransaction has to do with animation, but could someone help me understand in simple terms what is happening here?
Hi Apple Engineers,
I noticed in iOS 16, PlayParameters which part of every Track that has been added/downloaded to the library, now includes two new properties isLibrary & musicKit_persistentID . Unfortunately, these create backward compatibility error when trying to decode the Track object on iOS 15.
I make collaborative playlist app, which stores the Track added by User A which now includes the unique identifier for the locally downloaded file, when attempted to be played by User B won't play any music due to mismatching identifiers (even when everyone is on iOS 16).
This essentially breaks the entire functionality of my app due to these new properties.
Steps:
Store a Track (which has been added to library) as a JSON object from iOS 16
Decode the JSON on iOS 15
Expected Results:
New PlayParameters variables should be optional, to support backwards compatibility with iOS 15 and to support collaborative uses cases.
Actual Results:
New PlayParameters automatically include two new values that cause decoding errors.
I request that at least for an option to ignore the new properties in the PlayParameters in iOS 16.
Here is my feedback: FB11362589
Hi all,
I am curious about how we can use MusicKit for Swift to SharePlay music?
There seems to be very little documentation around this as most of it seems top be focused on AVPlayerPlaybackCoordinator.
Is there an easier way to directly integrate ApplicationMusicPlayer with GroupActivity?
Topic:
Media Technologies
SubTopic:
General
Tags:
MusicKit
wwdc2022-10139
wwdc2022-10140
wwdc2022-110380
Hi Apple Engineers,
I am reporting an issue in iOS 16.1 and iOS 16.2 beta 3 where setting the shuffleMode for ApplicationMusicPlayer is no longer working
Here is the code:
let player = ApplicationMusicPlayer.shared
let tracks = [Tracks]
player.queue = ApplicationMusicPlayer.Queue(for: tracks)
player.state.shuffleMode = .songs
Task.init {
try await player.play()
}
I tested the same code on iOS 15 and it works as expected.
Here is the related ticket: FB11840279
Hi Apple Engineers,
I am reporting a issue that has surfaced in iOS 16.1 and iOS 16.2 beta, where when you have a long list of Tracks that are in the label of a Buttons, they are are displayed correctly.
They appear intermittently, after you scroll they disappear (placeholder is shown) and it required a state change to display the final artwork correctly
Here is code:
let tracks = [Track]
//With Issue
List(tracks) { track in
Button {
//ACTION BLOCL
} label: {
if let artwork = track.artwork {
ArtworkImage(artwork: artwork, width: 50, height: 50)
} else { PlaceholderView() }
}
}
//Without Issue
List(tracks) { track in
if let artwork = track.artwork {
ArtworkImage(artwork: artwork, width: 50, height: 50)
} else { PlaceholderView() }
}
Same code works correctly on iOS 15 and also when ArtworkImage is not used inside a button.
Here is the related ticket: FB11840336
Topic:
Media Technologies
SubTopic:
General
Tags:
MusicKit
Apple Music API
wwdc2022-10148
wwdc2022-110347
Hello,
I am wondering how one can play music videos (with the actual video playing) with the ApplicationMusicPlayer using MusicKit for Swift?
There is not much documentation on this, so any help would be appreciated.
Topic:
Media Technologies
SubTopic:
General
Tags:
MusicKit
Apple Music API
wwdc21-10291
wwdc21-10293
Fetching the featured artists in a playlist, no longer works in iOS 26.1 beta
let detailedPlaylist = try await playlist.with([.tracks, .featuredArtists], preferredSource: .library)
Throws error when using .library and using .catalog returns empty array.
This works correctly in iOS 26.0 and iOS 18 versions