web-dev-qa-db-fra.com

iOS 13: MPMediaPickerController - Erreur interne / L'extension d'application demandée est introuvable

Il semble que le général MPMediaPicker ne fonctionne plus sur ios13 (ipad air 2, iphone SE)

L'exemple 1: 1 copié à partir de là ne montre pas le sélecteur de média https://developer.Apple.com/documentation/mediaplayer/displaying_a_media_picker_from_your_app

Des conseils pour récupérer des fonctionnalités ??

Note 1

Lors de l'utilisation de MPMediaPickerController comme ceci

    musicPickerView = [[UIView alloc] initWithFrame:fullScreenRect];
    musicPickerView.alpha = 0.0f;
    musicPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];
    musicPicker.showsCloudItems               = false;
    musicPicker.showsItemsWithProtectedAssets = false;
    musicPicker.delegate                      = self;
    musicPicker.allowsPickingMultipleItems    = false;
    musicPicker.Prompt                        = NSLocalizedString(@"Select a song", @"Select a song");
    musicPicker.view.frame                    = musicPickerView.bounds;
    [self addChildViewController:musicPicker];
    [musicPickerView addSubview:musicPicker.view];
    [self.view addSubview:musicPickerView];
    [musicPicker didMoveToParentViewController:self];
    [self fadeInMusicPicker:true];

Le délégué n'est pas du tout invoqué. Aucun journal n'est affiché, seule l'alerte native.

Je reçois ce altert natif

Erreur interne

L'extension d'application demandée est introuvable

[Annuler]

Note 2

Cela semble être le problème lorsque l'application musicale Apple musique n'est pas installée sur cet appareil. Quelqu'un connaît-il un moyen fiable de savoir si Apple l'application musicale est installée?

4
Martin Mlostek

avez-vous défini l'autorisation pour la médiathèque dans votre info.plist? NSAppleMusicUsageDescription

0
ferbass

De iOS 13MPMediaPicker autorisation utilisateur requise, contrairement à la version iOS antérieure. Vous devez donc d'abord gérer l'authentification, puis afficher le sélecteur si l'utilisateur a accordé l'autorisation. Votre code sera comme suit,

MPMediaLibraryAuthorizationStatus authorizationStatus = MPMediaLibrary.authorizationStatus;

    switch (authorizationStatus)
    {
        case MPMediaLibraryAuthorizationStatusAuthorized:
        {
            [self showPickerView];
            break;
        }
        case MPMediaLibraryAuthorizationStatusNotDetermined:
        {
            // Not yet authorized - request it from the system
            [MPMediaLibrary requestAuthorization:^(MPMediaLibraryAuthorizationStatus authorizationStatus)
             {
                 if ( authorizationStatus == MPMediaLibraryAuthorizationStatusAuthorized )
                 {
                     dispatch_async(dispatch_get_main_queue(), ^{

                            [self showPickerView];

                        });
                 }
                 else
                 {
                     PLog(@"The Media Library was not authorized by the user");

                 }
             }];
            break;
        }

        case MPMediaLibraryAuthorizationStatusRestricted:
        case MPMediaLibraryAuthorizationStatusDenied:
        {
            // user has previously denied access. Ask again with our own alert that is similar to the system alert
            // then take them to the System Settings so they can turn it on for the app

            break;
        }
    }


-(void)showPickerView
{
    musicPickerView = [[UIView alloc] initWithFrame:fullScreenRect];
    musicPickerView.alpha = 0.0f;
    musicPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];
    musicPicker.showsCloudItems               = false;
    musicPicker.showsItemsWithProtectedAssets = false;
    musicPicker.delegate                      = self;
    musicPicker.allowsPickingMultipleItems    = false;
    musicPicker.Prompt                        = NSLocalizedString(@"Select a song", @"Select a song");
    musicPicker.view.frame                    = musicPickerView.bounds;
    [self addChildViewController:musicPicker];
    [musicPickerView addSubview:musicPicker.view];
    [self.view addSubview:musicPickerView];
    [musicPicker didMoveToParentViewController:self];
    [self fadeInMusicPicker:true];
}
0
iEngineer