Ошибка выполнения при использовании MPMediaPickerController в iOS Simulator

Когда я пытаюсь запустить приложение, используя MPMediaPickerController в симуляторе iOS, происходит следующее.

2012-05-28 22:26:42.416 My App[48426:11f03] Could not load source: 3
2012-05-28 22:26:42.418 My App[48426:11f03] *** Assertion failure in -[MPMediaPickerController loadView], /SourceCache/MediaPlayer_Sim/MobileMusicPlayer-1391.72/SDK/MPMediaPickerController.m:86
2012-05-28 22:26:42.419 My App[48426:11f03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to load iPodUI.framework'

Это какая-то проблема в моем симуляторе App / Xcode / iOS, или симулятор iOS просто не поддерживает MPMediaPickerController? Если нет, то какие альтернативы, кроме запуска на физическом устройстве?


person houbysoft    schedule 29.05.2012    source источник
comment
Теперь это возможно, подробности см. В моем ответе ниже.   -  person newenglander    schedule 11.10.2016


Ответы (3)


MPMediaPickerController не работает в симуляторе. Apple отмечает это в разделе "Руководство по программированию доступа к библиотеке iPod" в разделе "Hello Music Player". В записке говорится:

Примечание. Чтобы выполнить эти шаги, вам понадобится подготовленное устройство, потому что Симулятор не имеет доступа к библиотеке iPod устройства.

Чтобы предотвратить утверждение, вы всегда можете проверить, есть ли у вас доступ к do this в своем коде (в приведенном ниже коде используется ARC и iOS SDK 5.0).

MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio];

[picker setDelegate:self];
[picker setAllowsPickingMultipleItems:YES];
[picker setPrompt:NSLocalizedString(@"Add songs to play","Prompt in media item picker")];

@try {
    [picker loadView]; // Will throw an exception in iOS simulator
    [self presentViewController:picker animated:YES completion:nil];
}
@catch (NSException *exception) {
    [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Oops!",@"Error title")
                                message:NSLocalizedString(@"The music library is not available.",@"Error message when MPMediaPickerController fails to load") 
                               delegate:nil 
                      cancelButtonTitle:@"OK" 
                      otherButtonTitles:nil] show];
}
person Pierre-Luc Simard    schedule 31.05.2012
comment
Мне было интересно, является ли добавление кода try catch обязательным условием для успешного добавления приложений в магазин приложений? Я не собираюсь добавлять этот код, если это не является требованием. - person Remixed123; 07.02.2014
comment
Хотя в то время это было правильно, текущие симуляторы iOS обеспечивают элементарную поддержку доступа к музыкальной библиотеке; подробности см. в моем ответе. - person newenglander; 11.10.2016

Также (при использовании раскадровки) вы можете попробовать:

- (IBAction)showPicker:(id)sender
{
#if TARGET_IPHONE_SIMULATOR
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"playerTest"
                                                    message:@"Media picker didn't work in simulator, please run this app on device"
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
#else
    [self performSegueWithIdentifier:@"ShowPickerViewSegue" sender:self];
#endif
}
person iTux    schedule 29.11.2012

MPMediaPickerController теперь работает в iOS Simulator без каких-либо дополнительных изменений кода (по крайней мере, с iOS 8, возможно, ранее). Вот проект, который может это продемонстрировать: GVMusicPlayerController.

Вам нужно будет подготовить музыкальную библиотеку в симуляторе, скопировав необходимые файлы с реального устройства, в первую очередь MediaLibrary.sqlitedb файлы базы данных. Если вы хотите воспроизвести файлы и просмотреть иллюстрации, вам также придется скопировать папки iTunes_Control/Music, Purchases и Artwork (находятся в /var/mobile/Media/). См. Этот вопрос для получения дополнительных сведений: Могу ли я получить доступ к библиотеке iPod на симуляторе?.

person newenglander    schedule 11.10.2016