Post

Replies

Boosts

Views

Activity

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
901
Dec ’22
Setting ShuffleMode for ApplicationMusicPlayer no longer works in iOS 16.1 & 16.2
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
1
0
698
Dec ’22
PlayParameters in iOS 16 breaks backwards compatibility with iOS 15
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
1
0
1.6k
Aug ’22
Album Artwork is not loading when music is playing
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.
3
0
1.2k
Jun ’22
How to detect end of hasNextBatch?
Hello, In MusicKit I would like to know how I can detect the end of hasNextBatch for a MusicItemCollection. Let's say, I have a playlist with 100+ songs in my library. Initially, I get 100 songs from the response and hasNextBatch is true. If I use a while loop, every response includes the hasNextBatch = true. So I do not know when to stop or how many limited loop to make. Is there way I can get the playlist loaded completely with all the songs loaded using nextBatch and stop when I have hit the end?
2
0
1.6k
Jan ’22
ApplicationMusicPlayer automatically turns Shuffle Mode On
Hi all, I am playing songs via ApplicationMusicPlayer with MusicKit for Swift and I am running into an issue where shuffle mode is sometimes automatically turned on. Even though there was no code related to shuffle mode. Here's a snippet //myQueue is an array of Tracks let player = ApplicationMusicPlayer.shared player.queue = ApplicationMusicPlayer.Queue(for: myQueue) // player.state.shuffleMode = .off // I tried explicitly setting shuffle mode off, which has no effect try await player.play() This issue is not easily reproducible, it occurs rarely and at random. But once this issue occurs it persists even after uninstalling and reinstalling the app. When I tried it to reproduce it with another device and everything works properly. Anyone else running into this issue? For Apple Engineers, here is the ticket: FB9816030
2
0
1.4k
Dec ’21
How to get recommendations based on multiple tracks?
Hello, I am trying to get recommendations based on the identifier of multiple tracks. But I am unable to get any results Here is the code I have used to try to get recommendations based on one album let dataRequest = MusicDataRequest(urlRequest: URLRequest(url: URL(string: "https://api.music.apple.com/v1/me/recommendations/1571344275")!)) let dataResponse = try await dataRequest.response() For this I am getting the response: Failed to perform MusicDataRequest.Context(   url: https://api.music.apple.com/v1/me/recommendations/1571344275,   currentRetryCounts: [.other: 1] ) with MusicDataRequest.Error(   status: 404,   code: 40400,   title: "Resource Not Found",   detailText: "Resource with requested id was not found", I have tried used the identifier of songs/albums, to no success. What am I doing wrong?
1
0
1.7k
Dec ’21
App crashes after showing Music Subscription offer sheet
Hi all, I ma displaying the Music Subscription offer sheet in my app. Shortly after the sheet is presented, when the user dismisses the offer, the app crashes with error: Fatal error: CloudServiceSetupView.makeUIViewController() was called with an unexpected presentation state: idle. 2021-11-30 11:56:28.974626-0800 AppName[16276:4525658] _MusicKit_SwiftUI/CloudServiceSetupView.swift:31: Fatal error: CloudServiceSetupView.makeUIViewController() was called with an unexpected presentation state: idle. What am I doing wrong? Related Ticket for Apple Engineers: FB9789040
3
0
1.1k
Nov ’21
How to show AirPlay menu for SystemMusicPlayer in SwiftUI
Hi all, I am trying to understand how to show the AirPlay menu in SwiftUI. My goal is to show the AirPlay menu, the same one displayed in the music app, but programmatically from a SwiftUI Button. I was able to display the AirPlay menu using UIViewRepresentable and MPVolumeView, but that does not show the currently active AirPlay speakers (no checkmarks). So how can I: Show the AirPlay button from a custom SwiftUI button? Show the same AirPlay menu as the one in the Music app, with preselected active speaker?
1
0
2k
Nov ’21
How to show group name in the subtitle of the Communication Notification?
Hi all, I am trying to display the name of the group in the subtitle of the communication notification, like this: Here is my code:     override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {         self.contentHandler = contentHandler         var personNameComponents = PersonNameComponents()         personNameComponents.nickname = "Test Person"         let avatar = INImage(url: URL(string: "https:imageURL")!)         let senderPerson = INPerson(personHandle: INPersonHandle(value: "1233211234", type: .unknown), nameComponents: personNameComponents, displayName: "Test Person", image: avatar, contactIdentifier: nil, customIdentifier: nil, isMe: false, suggestionType: .none)         let mePerson = INPerson( personHandle: INPersonHandle(value: "1233211232", type: .unknown), nameComponents: nil, displayName: nil, image: nil, contactIdentifier: nil, customIdentifier: nil, isMe: true, suggestionType: .none)         let incomingMessagingIntent = INSendMessageIntent(recipients: [mePerson], outgoingMessageType: .unknown, content: "Test", speakableGroupName: INSpeakableString(spokenPhrase: "Test Group"), conversationIdentifier: "Test Group", serviceName: "Test", sender: senderPerson, attachments: nil)         incomingMessagingIntent.setImage(avatar, forParameterNamed: \.sender)         let interaction = INInteraction(intent: incomingMessagingIntent, response: nil)         interaction.direction = .incoming         do {             let newContent = try request.content.updating(from: incomingMessagingIntent) as! UNMutableNotificationContent             contentHandler(newContent)         } catch {             print(error)         }     } I also have tried: Setting the subtitle of the UNMutableNotificationContent Including the subtitle field in the aps remote notification payload When I display the notification as a normal notification the subtitle is displayed as usual. What am I doing incorrectly?
2
0
1.7k
Oct ’21
Notification does not show as communication notification
Hi all, I am trying to implement the communication notification for me app. But the avatar does not show and there is virtually no difference from a normal notification. I also added the Communication Notification capability, and in my Notification Service Extension's Info.plist, added this: NSExtension → NSExtensionAttributes (dictionary) → IntentsSupported (array) → INSendMessageIntent (string) What am I doing wrong? Here is my code: class NotificationService: UNNotificationServiceExtension {     var contentHandler: ((UNNotificationContent) -> Void)?     var bestAttemptContent: UNMutableNotificationContent?     override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {                  var personNameComponents = PersonNameComponents()         personNameComponents.nickname = "Sender Name"         let avatar = INImage(named: "Cover")         let senderPerson = INPerson(personHandle: INPersonHandle(value: "1233211234", type: .unknown), nameComponents: personNameComponents, displayName: "Sender Name", image: avatar, contactIdentifier: nil, customIdentifier: nil, isMe: false, suggestionType: .none)         let mePerson = INPerson( personHandle: INPersonHandle(value: "1233211232", type: .unknown), nameComponents: nil, displayName: nil, image: nil, contactIdentifier: nil, customIdentifier: nil, isMe: true, suggestionType: .none)         let incomingMessagingIntent = INSendMessageIntent(recipients: [mePerson], outgoingMessageType: .outgoingMessageText, content: "Test DUde", speakableGroupName: nil, conversationIdentifier: "uid", serviceName: "caset", sender: senderPerson, attachments: [])         incomingMessagingIntent.setImage(avatar, forParameterNamed: \.sender)         let interaction = INInteraction(intent: incomingMessagingIntent, response: nil)         interaction.direction = .incoming         do {             let newContent = try request.content.updating(from: incomingMessagingIntent)             contentHandler(newContent)         } catch {             print(error)         }     }     override func serviceExtensionTimeWillExpire() {         // Called just before the extension will be terminated by the system.         // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.         if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {             contentHandler(bestAttemptContent)         }     } }
2
0
1.5k
Oct ’21
How to make navigation bar color clear per view?
Hi there, I would like to make the navigation bar clear in my view. Currently I am using the init() method to achieve this: UINavigationBar.appearance().setBackgroundImage(UIImage(), for: UIBarMetrics.default) UINavigationBar.appearance().shadowImage = UIImage() UINavigationBar.appearance().isTranslucent = true UINavigationBar.appearance().tintColor = .clear UINavigationBar.appearance().backgroundColor = .clear But this makes the navigation bar clear app-wide. How can I make the navigation bar clear for specific view and ensure that view navigating to other views/popping modal they are returned to the default values? P.S I tried using the onAppear method and that doesn't do anything.
0
0
460
Sep ’21