Hay una respuesta a esta pregunta: iOS: obtenga una cola programática de elementos que se están reproduciendo actualmente que describe cómo hacer esto, sin embargo, estoy probando ese método y no funciona. Aquí está mi código:
let numberOfItems = player.value(forKey: "numberOfItems") as! Int for i in 0..<numberOfItems { if let mediaItem = MPMusicPlayerController.systemMusicPlayer.perform(Selector("nowPlayingItemAtIndex:"), with: i)?.takeUnretainedValue() as? MPMediaItem { let songObject = mediaItem.value(forKey: "propertyValues") as! NSObject print(songObject.value(forKey: "title")) print(mediaItem.title) print(mediaItem.value(forKey: "title")) print(mediaItem.value(forProperty: MPMediaItemPropertyTitle)) } }Las 4 declaraciones impresas son nulas. Vale la pena señalar que, de hecho, puede convertir el elemento como MPMediaItem, y la variable songObject en realidad se imprime como MPModelSong. Los encabezados de tiempo de ejecución indican que hay una propiedad en los objetos MPModelSong "título" (que se encuentra aquí: https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/MediaPlayer.framework/MPModelSong.h )
Pase lo que pase, todo se imprime en cero. ¿Alguna idea de qué dirección debo tomar desde aquí?