¿Cómo puedo extraer los metadatos del file mp3 en el desarrollo ios?

Estoy trabajando en un reproductor de música ios con almacenamiento en la nube.

Necesito extraer la información de la música, como título, artista, obra de arte.

Tengo una acción llamada playit que reproduce y pausa el file mp3. También debe rellenar algunos UILables y UIImage con la metadtaa que está asociada con el file mp3. El problema es que no pude get los metadatos extraídos de más de 25 files mp3 diferentes. Aquí está mi código:

La url del file es correcta porque el reproductor de audio puede encontrarla y reproducirla, pero no sé por qué avmetadataitem no puede get los metadatos.

- (IBAction)playIt:(id)sender { AVAudioPlayer *audioPlayer; AVAsset *assest; NSString * applicationPath = [[NSBundle mainBundle] resourcePath]; NSString *secondParentPath = [applicationPath stringByDeletingLastPathComponent]; NSString *soundFilePath = [[secondParentPath stringByAppendingPathComponent:@"fisal1407"] stringByAppendingPathComponent:[musicFiles objectForKey:@"show_id"] ]; NSURL *fileURL = [NSURL URLWithString:[soundFilePath stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; assest = [AVURLAsset URLAssetWithURL:fileURL options:nil]; NSArray *metadata = [assest commonMetadata]; for (NSString *format in metadata) { for (AVMetadataItem *item in [assest metadataForFormat:format]) { if ([[item commonKey] isEqualToString:@"title"]) { filename.text = (NSString *)[item value]; NSLog(@" title : %@", (NSString *)[item value]); } if ([[item commonKey] isEqualToString:@"artist"]) { show_id.text = (NSString *)[item value]; } if ([[item commonKey] isEqualToString:@"albumName"]) { // _albumName = (NSString *)[item value]; } if ([[item commonKey] isEqualToString:@"artwork"]) { NSData *data = [(NSDictionary *)[item value] objectForKey:@"data"]; UIImage *img = [UIImage imageWithData:data] ; imageView.image = img; continue; } } } if (audioPlayer == nil) { audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; audioPlayer.numberOfLoops = -1; [audioPlayer play]; [sender setImage:[UIImage imageNamed:@"player_044.gif"] forState:UIControlStateNormal]; } else { if (audioPlayer.isPlaying) { [sender setImage:[UIImage imageNamed:@"player_04.gif"] forState:UIControlStateNormal]; [audioPlayer pause]; } else { [sender setImage:[UIImage imageNamed:@"player_044.gif"] forState:UIControlStateNormal]; [audioPlayer play]; } } } 

Tratar

 for (NSString *format in [asset availableMetadataFormats]) 

En lugar de

 NSArray *metadata = [assest commonMetadata]; for (NSString *format in metadata) {