web-dev-qa-db-ja.com

iOS 13:MPMediaPickerController-内部エラー/リクエストされたアプリ拡張機能が見つかりませんでした

一般的なMPMediaPickerがios13(ipad air 2、iphone SE)で動作しなくなったようです

そこからコピーした1:1の例では、メディアピッカーが表示されません https://developer.Apple.com/documentation/mediaplayer/displaying_a_media_picker_from_your_app

機能を取り戻すためのヒントはありますか?

注1

このようにMPMediaPickerControllerを使って使う場合

    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];

デリゲートはまったく呼び出されません。ログは表示されず、ネイティブアラートのみが表示されます。

私はこのネイティブのオルターを入手しています

内部エラー

リクエストされたアプリ拡張機能が見つかりませんでした

[キャンセル]

注2

Apple音楽アプリがそのデバイスにインストールされていない場合に問題が発生するようです。Apple音楽アプリがインストールされていますか?

4
Martin Mlostek

メディアライブラリの権限をinfo.plistに設定しましたか? NSAppleMusicUsageDescription

0
ferbass

以前のiOSバージョンとは異なり、iOS 13MPMediaPickerにはユーザー認証が必要です。したがって、最初に認証を処理し、ユーザーが権限を付与した場合はピッカーを表示する必要があります。あなたのコードは次のようになります、

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