Meet Apple Music API and MusicKit

RSS for tag

Discuss the WWDC22 Session Meet Apple Music API and MusicKit

Posts under wwdc2022-10148 tag

14 Posts

Post

Replies

Boosts

Views

Activity

Editing a Library Playlist (MusicKit: iOS 16 beta)
I've just begun to dip my toes into the iOS16 waters. One of the first things that I've attempted is to edit a library playlist using: try await MusicLibrary.shared.edit(targetPlaylist, items: tracksToAdd) Where targetPlaylist is of type MusicItemCollection<MusicKit.Playlist>.Element and tracksToAdd is of type [Track] The targetPlaylist was created, using new iOS16 way, here: let newPlaylist = try await MusicLibrary.shared.createPlaylist(name: name, description: description) tracksToAdd is derived by performing a MusicLibraryRequest on a specific playlist ID, and then doing something like this: if let tracksToAdd = try await playlist.with(.tracks).tracks {    // add tracks to target playlist } My problem is that when I perform attempt the edit, I am faced with a rather sad looking crash. libdispatch.dylib`dispatch_group_leave.cold.1:     0x10b43d62c <+0>:  mov    x8, #0x0     0x10b43d630 <+4>:  stp    x20, x21, [sp, #-0x10]!     0x10b43d634 <+8>:  adrp   x20, 6     0x10b43d638 <+12>: add    x20, x20, #0xfbf          ; "BUG IN CLIENT OF LIBDISPATCH: Unbalanced call to dispatch_group_leave()"     0x10b43d63c <+16>: adrp   x21, 40     0x10b43d640 <+20>: add    x21, x21, #0x260          ; gCRAnnotations     0x10b43d644 <+24>: str    x20, [x21, #0x8]     0x10b43d648 <+28>: str    x8, [x21, #0x38]     0x10b43d64c <+32>: ldp    x20, x21, [sp], #0x10 ->  0x10b43d650 <+36>: brk    #0x1 I assume that I must be doing something wrong, but I frankly have no idea how to troubleshoot this. Any help would be most appreciated. Thanks. @david-apple?
11
0
3.5k
May ’25
iOS 16 Music Kit MusicLibrary methods have stopped working
Hi there, I have a related forum thread here and a Feedback Assistant ticket open, but this issue seems different. Sometime within the last 2-3 weeks, code related to MusicLibrary has stopped working. None of my code has changed. For example, the below two snippets used to work fine:  for track in newTracks {    try await MusicLibrary.shared.add(track, to: targetPlaylist)  } try await MusicLibrary.shared.edit(targetPlaylist, items: items) newTracks and items are both fetched using: try await targetPlaylist.with(.tracks, preferredSource: .catalog).tracks Using preferredSource: .catalog was a workaround used to address the issue in the aforementioned post above. All iOS 16 capable functions are decorated with: @available(iOS 16, *) or in an if block: if #available(iOS 16, *) {... What's happening is that the following is showing up in the console: 2022-11-28 23:31:11.279648+0700 MyApp[38653:6736450] [core] Attempted to register account monitor for types client is not authorized to access: {(     "com.apple.account.iTunesStore" )} 2022-11-28 23:31:11.279718+0700 MyApp[38653:6736450] [Default] <ICUserIdentityStoreACAccountBackend: 0x282adb520> Failed to register for account monitoring. err=Error Domain=com.apple.accounts Code=7 "(null)" 2022-11-28 23:31:11.279758+0700 MyApp[38653:6736450] [Default] ICUserIdentity - Unable to retrieve DSID for userIdentity=<ICUserIdentity 0x2806eb120: [Active Account: <unresolved>]> - error=Error Domain=com.apple.accounts Code=7 "(null)" These errors are not caught by a do/catch block, but I assume they are related to the issue, and I believe they have to do with MyApp trying to access things that Music Kit thinks it's not supposed to. For example, if MyApp attempts to work with a playlist that it did not create, errors would be expected, thrown errors. The thing is that I know I'm working with resources that are created by MyApp. In fact, in trying to test this, I just tried to create a playlist with the below, and the same behavior is occurring: @available(iOS 16, *) func createPlaylist2(name: String, description: String) async -> MusicKit.Playlist? {     do {         Logger.log(.info, "Creating Playlist: \(name)")         Logger.log(.shrug, "Does this work?")         let newPlaylist = try await MusicLibrary.shared.createPlaylist(name: name, description: description) // <= Things stop here!         Logger.log(.success, "New playlist created: \(newPlaylist)") // <= this isn't logged.         return newPlaylist // <= nothing is returned     } catch {         Logger.log(.error, "Could not create new playlist: \(error)") // <= no error logged.     }     return nil } The result is: 2022-11-29 00:15:01.875064+0700 MyApp[38794:6760471] [core] Attempted to register account monitor for types client is not authorized to access: {(     "com.apple.account.iTunesStore" )} 2022-11-29 00:15:01.875372+0700 MyApp[38794:6760471] [Default] <ICUserIdentityStoreACAccountBackend: 0x283005720> Failed to register for account monitoring. err=Error Domain=com.apple.accounts Code=7 "(null)" 2022-11-29 00:15:01.876677+0700 MyApp[38794:6760323] [EntityQuery] Finished executing query in 0.000999928s 2022-11-29 00:15:01.889055+0700 MyApp[38794:6760323] [EntityQuery] Finished fetching results in 0.0120001s 2022-11-29 00:15:01.891235+0700 MyApp[38794:6760329] [core] Attempted to register account monitor for types client is not authorized to access: {(     "com.apple.account.iTunesStore" )} 2022-11-29 00:15:01.891684+0700 MyApp[38794:6760329] [Default] <ICUserIdentityStoreACAccountBackend: 0x283005720> Failed to register for account monitoring. err=Error Domain=com.apple.accounts Code=7 "(null)" 📘 Creating Playlist: TEST PLAYLIST 🤷🏻‍♀️ Does this work? 2022-11-29 00:15:06.697374+0700 MyApp[38794:6760329] [] nw_path_necp_check_for_updates Failed to copy updated result (22) What's really nasty is that errors are not thrown, so they can't be caught and handled in a catch block. I know that iOS 16.1 got released around the end of October, but I really don't know what's going on here. The behavior is showing up in both prod and when testing locally. Any help would be most appreciated. @JoeKhun: Did I miss the memo?
10
1
5.5k
May ’24
Artwork of Track is not displayed correctly when used within Button in iOS 16.1 & 16.2
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
0
0
998
Dec ’22
MusicLibrary.shared.createPlaylist adds wrong track to playlist
I’ve been trying to debug an issue where tracks in playlists created using the new MusicLibrary.shared.createPlaylist function seem to be missing their artwork. For example: I’ve found that when I look at the track which MusicKit added in the above example, it’s not the one which I specified - it’s a different version (catalogId) of the same song. Interestingly it also seems to be marked as a library track (the track is definitely not in my library). Here is the code: let request = MusicCatalogResourceRequest<Song>(matching: \.id, equalTo: MusicItemID("1440800296")) let response = try await request.response() let initialCatalogId = response.items.first?.id.rawValue ?? "?" let playlist = try await MusicLibrary.shared.createPlaylist(name: "My Playlist", description: nil, authorDisplayName: "My App", items: response.items) while true {     guard let entry = try? await playlist.with([.entries], preferredSource: .library).entries?.first else {         continue     }     // This is just for debug purposes to work out what track actually got added:     let data = try JSONEncoder().encode(entry.playParameters)     guard let root = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] else {         continue     }     let newCatalogId = root["catalogId"] as? String ?? "?"     let isLibrary = root["isLibrary"] as? Bool ?? false     print(initialCatalogId, newCatalogId, isLibrary)     // Prints: 1440800296 309186793 true     break } If I’m doing something wrong either when saving the playlist or retrieving the catalogId of the track which was saved please let me know: I confess I’m finding it quite hard to navigate MusicKit Swift at the moment as examples & documentation seem quite thin on the ground. However if the above behaviour is the best I can expect then it’s a serious issue for me - the catalogId of the track I want to add, above, was carefully selected so if MusicKit is going to randomly swap this out then I can’t use it. I’ve created FB11589088 for this issue. @JoeKun, @david-apple: I’ve raised a number of issues with MusicKit on here recently and have received no responses at all. Appreciate you guys are really busy but I think a little help here would go a long way to making MusicKit the success it deserves to be. Please let me know if I should be doing this differently. Thanks!
0
0
2.0k
Sep ’22
MusicKit can't play the playlist which created by myself in iOS 16 beta 7,error:Queue descriptor was not provided
Playlist 1: created by myself, id: pl.u-BNA6rpjIRXy7Dj https://music.apple.com/cn/playlist/i-jump-you-jump/pl.u-BNA6rpjIRXy7Dj Playlist 2: created by Apple Music, id:pl.e1bd354664a743d1ad3e10db21118dc7 https://music.apple.com/cn/playlist/jumping-rope/pl.e1bd354664a743d1ad3e10db21118dc7 When I play list 1: Failed to play with error: Error Domain=MPMusicPlayerControllerErrorDomain Code=1 "Queue descriptor was not provided." UserInfo={NSDebugDescription=Queue descriptor was not provided.}. It works well on iOS 15, but has this error on iOS 16 beta6 and beta7. The list2 works well both on iOS 15 and iOS 16 let tracks = try await loadTracks("pl.u-BNA6rpjIRXy7Dj") // not works, pl.e1bd354664a743d1ad3e10db21118dc7 this id works ApplicationMusicPlayer.shared.queue = ApplicationMusicPlayer.Queue(for: tracks) Task { do { try await ApplicationMusicPlayer.shared.play() } catch { print("Failed to play with error: \(error).") } } func loadTracks(plId:String) async throws -> MusicItemCollection<Track> { let playlistRequest = MusicCatalogResourceRequest<Playlist>(matching: \.id, equalTo: MusicItemID(rawValue: plId)) let playlistResponse = try await playlistRequest.response() if let playlist = playlistResponse.items.first { let detailedPlaylist = try await playlist.with([.tracks]) let tmpTracks = detailedPlaylist.tracks ?? [] return tmpTracks } else { print("Couldn't find playlist.") return [] } } FB: FB11426046
1
0
1.7k
Sep ’22
Can we remove tracks from a user's Library Playlist yet?
Hi there, I just watched the WWDC22 vids on MusicKit enhancements. In the Explore More Content with MusicKit video, there is a brief mention of "edit playlists" at 24:33. I asked about this a couple years ago here in this forum. The ever-helpful @JoeKun suggested that I submit a Feedback Assistant ticket on the need/justification for this feature, which I did some time ago: FB9798928. Sadly, there's been no traction on that. I'm super hopeful that the ability to remove tracks from a library playlist is now, or at least will soon be, possible; however, I can't find anything in the docs yet to support this notion. Am I being overly optimistic, or are we finally going to get this much requested feature? Thanks.
7
0
3.7k
Aug ’22
Get Stations of a Curator/RadioShow using MusicKit
Hi, Is there a way to get all the episodes (Stations) of a Curator or RadioShow, particularly using the MusicKit enhancements announced at WW22? For example, if I have find an AppleMusic Curator such as "After School Radio" (Curator(id: "1496846020", name: "After School Radio", kind: .editorial)) or a RadioShow (RadioShow(id: "1496846020", name: "After School Radio", hostName: "Mark Hoppus")), is there a way to get all the Stations associated with this curator? There don't seem to be any relationships between Curator, RadioShow, and Station in MusicKit for Swift, and only a relationship from Station to RadioShow in the Apple Music API, but no reverse relationship from RadioShow to Stations. Thanks
1
0
1.2k
Jul ’22
Overriding tracks of a playlist through Apple Music API
Hello, I have a question regarding the update of playlists through the API. I haven't found this documented, but I prefer asking just in case I missed something. Is there an endpoint/parameter to add tracks to a playlist by overriding the tracks that are in it? I only found an endpoint to append tracks to a playlist, which is not enough for how my app works Thanks!
5
0
1.5k
Jun ’22
Checking if a track or album is available for purchase through Apple Music API
Hello, I'm using the Apple Music API to store tracks & albums links in my database and I need a way to determine if a track/album is available for purchase on iTunes or if it's a streaming one. I'm currently using the "playParams" attribute to determine it. If it is present I consider the track to be streaming, if it's not, I consider it to be a purchasable track. I'm not sure if this is the best way to do so, I'd gladly take your recommendations, maybe there's an attribute I missed on the API.
4
0
1.5k
Jun ’22
Generating a playlist's global id with Apple Music API
Hello! When creating a playlist we are getting an id which is the one in the user's library, it's not enough to create a link and share it with friends for example. To do so, we need a global id. The only way I found to generate this global id is by clicking on the share button of the playlist on Apple Music. After doing this manual action, the global id is properly returned by the Playlist endpoint on the Apple Music API. I wanted to know if there was a endpoint that could be called in order to generate this global id without having to go on the Apple Music app? Thanks for your help
3
1
1.4k
Jun ’22
Editing a Library Playlist (MusicKit: iOS 16 beta)
I've just begun to dip my toes into the iOS16 waters. One of the first things that I've attempted is to edit a library playlist using: try await MusicLibrary.shared.edit(targetPlaylist, items: tracksToAdd) Where targetPlaylist is of type MusicItemCollection<MusicKit.Playlist>.Element and tracksToAdd is of type [Track] The targetPlaylist was created, using new iOS16 way, here: let newPlaylist = try await MusicLibrary.shared.createPlaylist(name: name, description: description) tracksToAdd is derived by performing a MusicLibraryRequest on a specific playlist ID, and then doing something like this: if let tracksToAdd = try await playlist.with(.tracks).tracks {    // add tracks to target playlist } My problem is that when I perform attempt the edit, I am faced with a rather sad looking crash. libdispatch.dylib`dispatch_group_leave.cold.1:     0x10b43d62c <+0>:  mov    x8, #0x0     0x10b43d630 <+4>:  stp    x20, x21, [sp, #-0x10]!     0x10b43d634 <+8>:  adrp   x20, 6     0x10b43d638 <+12>: add    x20, x20, #0xfbf          ; "BUG IN CLIENT OF LIBDISPATCH: Unbalanced call to dispatch_group_leave()"     0x10b43d63c <+16>: adrp   x21, 40     0x10b43d640 <+20>: add    x21, x21, #0x260          ; gCRAnnotations     0x10b43d644 <+24>: str    x20, [x21, #0x8]     0x10b43d648 <+28>: str    x8, [x21, #0x38]     0x10b43d64c <+32>: ldp    x20, x21, [sp], #0x10 ->  0x10b43d650 <+36>: brk    #0x1 I assume that I must be doing something wrong, but I frankly have no idea how to troubleshoot this. Any help would be most appreciated. Thanks. @david-apple?
Replies
11
Boosts
0
Views
3.5k
Activity
May ’25
iOS 16 Music Kit MusicLibrary methods have stopped working
Hi there, I have a related forum thread here and a Feedback Assistant ticket open, but this issue seems different. Sometime within the last 2-3 weeks, code related to MusicLibrary has stopped working. None of my code has changed. For example, the below two snippets used to work fine:  for track in newTracks {    try await MusicLibrary.shared.add(track, to: targetPlaylist)  } try await MusicLibrary.shared.edit(targetPlaylist, items: items) newTracks and items are both fetched using: try await targetPlaylist.with(.tracks, preferredSource: .catalog).tracks Using preferredSource: .catalog was a workaround used to address the issue in the aforementioned post above. All iOS 16 capable functions are decorated with: @available(iOS 16, *) or in an if block: if #available(iOS 16, *) {... What's happening is that the following is showing up in the console: 2022-11-28 23:31:11.279648+0700 MyApp[38653:6736450] [core] Attempted to register account monitor for types client is not authorized to access: {(     "com.apple.account.iTunesStore" )} 2022-11-28 23:31:11.279718+0700 MyApp[38653:6736450] [Default] <ICUserIdentityStoreACAccountBackend: 0x282adb520> Failed to register for account monitoring. err=Error Domain=com.apple.accounts Code=7 "(null)" 2022-11-28 23:31:11.279758+0700 MyApp[38653:6736450] [Default] ICUserIdentity - Unable to retrieve DSID for userIdentity=<ICUserIdentity 0x2806eb120: [Active Account: <unresolved>]> - error=Error Domain=com.apple.accounts Code=7 "(null)" These errors are not caught by a do/catch block, but I assume they are related to the issue, and I believe they have to do with MyApp trying to access things that Music Kit thinks it's not supposed to. For example, if MyApp attempts to work with a playlist that it did not create, errors would be expected, thrown errors. The thing is that I know I'm working with resources that are created by MyApp. In fact, in trying to test this, I just tried to create a playlist with the below, and the same behavior is occurring: @available(iOS 16, *) func createPlaylist2(name: String, description: String) async -> MusicKit.Playlist? {     do {         Logger.log(.info, "Creating Playlist: \(name)")         Logger.log(.shrug, "Does this work?")         let newPlaylist = try await MusicLibrary.shared.createPlaylist(name: name, description: description) // <= Things stop here!         Logger.log(.success, "New playlist created: \(newPlaylist)") // <= this isn't logged.         return newPlaylist // <= nothing is returned     } catch {         Logger.log(.error, "Could not create new playlist: \(error)") // <= no error logged.     }     return nil } The result is: 2022-11-29 00:15:01.875064+0700 MyApp[38794:6760471] [core] Attempted to register account monitor for types client is not authorized to access: {(     "com.apple.account.iTunesStore" )} 2022-11-29 00:15:01.875372+0700 MyApp[38794:6760471] [Default] <ICUserIdentityStoreACAccountBackend: 0x283005720> Failed to register for account monitoring. err=Error Domain=com.apple.accounts Code=7 "(null)" 2022-11-29 00:15:01.876677+0700 MyApp[38794:6760323] [EntityQuery] Finished executing query in 0.000999928s 2022-11-29 00:15:01.889055+0700 MyApp[38794:6760323] [EntityQuery] Finished fetching results in 0.0120001s 2022-11-29 00:15:01.891235+0700 MyApp[38794:6760329] [core] Attempted to register account monitor for types client is not authorized to access: {(     "com.apple.account.iTunesStore" )} 2022-11-29 00:15:01.891684+0700 MyApp[38794:6760329] [Default] <ICUserIdentityStoreACAccountBackend: 0x283005720> Failed to register for account monitoring. err=Error Domain=com.apple.accounts Code=7 "(null)" 📘 Creating Playlist: TEST PLAYLIST 🤷🏻‍♀️ Does this work? 2022-11-29 00:15:06.697374+0700 MyApp[38794:6760329] [] nw_path_necp_check_for_updates Failed to copy updated result (22) What's really nasty is that errors are not thrown, so they can't be caught and handled in a catch block. I know that iOS 16.1 got released around the end of October, but I really don't know what's going on here. The behavior is showing up in both prod and when testing locally. Any help would be most appreciated. @JoeKhun: Did I miss the memo?
Replies
10
Boosts
1
Views
5.5k
Activity
May ’24
MusicKit web Token
Hey, Am exploring MusicKit web api. I have a question regarding app key. https://help.apple.com/developer-account/#/deva27624586?sub=dev0416b9004 My question is, do i have to register and pay a developer fee to used the musickit web? @JoeKun and @david-apple if yes could point to the right doc Thanks
Replies
1
Boosts
0
Views
1.2k
Activity
Mar ’23
Artwork of Track is not displayed correctly when used within Button in iOS 16.1 & 16.2
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
Replies
0
Boosts
0
Views
998
Activity
Dec ’22
MusicLibrary.shared.createPlaylist adds wrong track to playlist
I’ve been trying to debug an issue where tracks in playlists created using the new MusicLibrary.shared.createPlaylist function seem to be missing their artwork. For example: I’ve found that when I look at the track which MusicKit added in the above example, it’s not the one which I specified - it’s a different version (catalogId) of the same song. Interestingly it also seems to be marked as a library track (the track is definitely not in my library). Here is the code: let request = MusicCatalogResourceRequest<Song>(matching: \.id, equalTo: MusicItemID("1440800296")) let response = try await request.response() let initialCatalogId = response.items.first?.id.rawValue ?? "?" let playlist = try await MusicLibrary.shared.createPlaylist(name: "My Playlist", description: nil, authorDisplayName: "My App", items: response.items) while true {     guard let entry = try? await playlist.with([.entries], preferredSource: .library).entries?.first else {         continue     }     // This is just for debug purposes to work out what track actually got added:     let data = try JSONEncoder().encode(entry.playParameters)     guard let root = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] else {         continue     }     let newCatalogId = root["catalogId"] as? String ?? "?"     let isLibrary = root["isLibrary"] as? Bool ?? false     print(initialCatalogId, newCatalogId, isLibrary)     // Prints: 1440800296 309186793 true     break } If I’m doing something wrong either when saving the playlist or retrieving the catalogId of the track which was saved please let me know: I confess I’m finding it quite hard to navigate MusicKit Swift at the moment as examples & documentation seem quite thin on the ground. However if the above behaviour is the best I can expect then it’s a serious issue for me - the catalogId of the track I want to add, above, was carefully selected so if MusicKit is going to randomly swap this out then I can’t use it. I’ve created FB11589088 for this issue. @JoeKun, @david-apple: I’ve raised a number of issues with MusicKit on here recently and have received no responses at all. Appreciate you guys are really busy but I think a little help here would go a long way to making MusicKit the success it deserves to be. Please let me know if I should be doing this differently. Thanks!
Replies
0
Boosts
0
Views
2.0k
Activity
Sep ’22
MusicKit can't play the playlist which created by myself in iOS 16 beta 7,error:Queue descriptor was not provided
Playlist 1: created by myself, id: pl.u-BNA6rpjIRXy7Dj https://music.apple.com/cn/playlist/i-jump-you-jump/pl.u-BNA6rpjIRXy7Dj Playlist 2: created by Apple Music, id:pl.e1bd354664a743d1ad3e10db21118dc7 https://music.apple.com/cn/playlist/jumping-rope/pl.e1bd354664a743d1ad3e10db21118dc7 When I play list 1: Failed to play with error: Error Domain=MPMusicPlayerControllerErrorDomain Code=1 "Queue descriptor was not provided." UserInfo={NSDebugDescription=Queue descriptor was not provided.}. It works well on iOS 15, but has this error on iOS 16 beta6 and beta7. The list2 works well both on iOS 15 and iOS 16 let tracks = try await loadTracks("pl.u-BNA6rpjIRXy7Dj") // not works, pl.e1bd354664a743d1ad3e10db21118dc7 this id works ApplicationMusicPlayer.shared.queue = ApplicationMusicPlayer.Queue(for: tracks) Task { do { try await ApplicationMusicPlayer.shared.play() } catch { print("Failed to play with error: \(error).") } } func loadTracks(plId:String) async throws -> MusicItemCollection<Track> { let playlistRequest = MusicCatalogResourceRequest<Playlist>(matching: \.id, equalTo: MusicItemID(rawValue: plId)) let playlistResponse = try await playlistRequest.response() if let playlist = playlistResponse.items.first { let detailedPlaylist = try await playlist.with([.tracks]) let tmpTracks = detailedPlaylist.tracks ?? [] return tmpTracks } else { print("Couldn't find playlist.") return [] } } FB: FB11426046
Replies
1
Boosts
0
Views
1.7k
Activity
Sep ’22
Can we remove tracks from a user's Library Playlist yet?
Hi there, I just watched the WWDC22 vids on MusicKit enhancements. In the Explore More Content with MusicKit video, there is a brief mention of "edit playlists" at 24:33. I asked about this a couple years ago here in this forum. The ever-helpful @JoeKun suggested that I submit a Feedback Assistant ticket on the need/justification for this feature, which I did some time ago: FB9798928. Sadly, there's been no traction on that. I'm super hopeful that the ability to remove tracks from a library playlist is now, or at least will soon be, possible; however, I can't find anything in the docs yet to support this notion. Am I being overly optimistic, or are we finally going to get this much requested feature? Thanks.
Replies
7
Boosts
0
Views
3.7k
Activity
Aug ’22
Get Stations of a Curator/RadioShow using MusicKit
Hi, Is there a way to get all the episodes (Stations) of a Curator or RadioShow, particularly using the MusicKit enhancements announced at WW22? For example, if I have find an AppleMusic Curator such as "After School Radio" (Curator(id: "1496846020", name: "After School Radio", kind: .editorial)) or a RadioShow (RadioShow(id: "1496846020", name: "After School Radio", hostName: "Mark Hoppus")), is there a way to get all the Stations associated with this curator? There don't seem to be any relationships between Curator, RadioShow, and Station in MusicKit for Swift, and only a relationship from Station to RadioShow in the Apple Music API, but no reverse relationship from RadioShow to Stations. Thanks
Replies
1
Boosts
0
Views
1.2k
Activity
Jul ’22
Using Musickit without paying for developer fees
Hello, am trying to use musickit. Am Curious, since am only interesting in musickit api web, dose that mean i will have to pay for developers' fees ?
Replies
1
Boosts
0
Views
1.2k
Activity
Jul ’22
MusicKit development and Apple Music subscription
Do we have any development allowance/tools for playback from Apple Music without a necessity to pay for the subscription?
Replies
1
Boosts
0
Views
1.8k
Activity
Jun ’22
Uploading playlist artwork when creating a playlist
Hello, with the recent update of the Apple Music API allowing to retrieve artwork for artists, I wanted to know if it was possible to post an artwork when creating a playlist through the API? If so, what is the format and parameters to use and is it documented somewhere? Thanks for your help
Replies
5
Boosts
1
Views
2.0k
Activity
Jun ’22
Overriding tracks of a playlist through Apple Music API
Hello, I have a question regarding the update of playlists through the API. I haven't found this documented, but I prefer asking just in case I missed something. Is there an endpoint/parameter to add tracks to a playlist by overriding the tracks that are in it? I only found an endpoint to append tracks to a playlist, which is not enough for how my app works Thanks!
Replies
5
Boosts
0
Views
1.5k
Activity
Jun ’22
Checking if a track or album is available for purchase through Apple Music API
Hello, I'm using the Apple Music API to store tracks & albums links in my database and I need a way to determine if a track/album is available for purchase on iTunes or if it's a streaming one. I'm currently using the "playParams" attribute to determine it. If it is present I consider the track to be streaming, if it's not, I consider it to be a purchasable track. I'm not sure if this is the best way to do so, I'd gladly take your recommendations, maybe there's an attribute I missed on the API.
Replies
4
Boosts
0
Views
1.5k
Activity
Jun ’22
Generating a playlist's global id with Apple Music API
Hello! When creating a playlist we are getting an id which is the one in the user's library, it's not enough to create a link and share it with friends for example. To do so, we need a global id. The only way I found to generate this global id is by clicking on the share button of the playlist on Apple Music. After doing this manual action, the global id is properly returned by the Playlist endpoint on the Apple Music API. I wanted to know if there was a endpoint that could be called in order to generate this global id without having to go on the Apple Music app? Thanks for your help
Replies
3
Boosts
1
Views
1.4k
Activity
Jun ’22