没有提供SKCloudServiceSetupViewController

时间:2017-10-20 20:45:43

标签: ios apple-musickit

我在https://developer.apple.com/musickit/跟踪了Apple的MusicKit示例代码,无法显示设置视图控制器。我将示例代码简化为一个单独的项目,例如:https://github.com/higginator/SubscribePlaybackAppleMusic

我遵循文件化的程序:

  1. 请求苹果音乐授权
  2. 请求苹果音乐功能
  3. 如果订阅是eligibile,请设置订阅视图
  4. 以下是样本:

    - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor whiteColor];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Authorize" style:UIBarButtonItemStylePlain target:self action:@selector(authorizeAppleMusic)];
    _cloudServiceController = [[SKCloudServiceController alloc] init];
    _setupVC = [[SKCloudServiceSetupViewController alloc] init];
    _setupVC.delegate = self;
    

    }

    - (void)authorizeAppleMusic {
    switch ([SKCloudServiceController authorizationStatus]) {
        case SKCloudServiceAuthorizationStatusNotDetermined:
            NSLog(@"auth not determined");
            [self requestAppleMusicAuthorization];
            break;
        case SKCloudServiceAuthorizationStatusDenied:
            NSLog(@"auth denied");
            break;
        case SKCloudServiceAuthorizationStatusRestricted:
            NSLog(@"auth restricted");
            break;
        case SKCloudServiceAuthorizationStatusAuthorized:
            NSLog(@"authorized");
            [self appleMusicCapabilities];
            break;
    }
    

    }

    - (void)requestAppleMusicAuthorization {
    [SKCloudServiceController requestAuthorization:^(SKCloudServiceAuthorizationStatus status) {
        if (status == SKCloudServiceAuthorizationStatusAuthorized) {
            [self appleMusicCapabilities];
        }
    }];
    

    }

    - (void)appleMusicCapabilities {
    [self.cloudServiceController
     requestCapabilitiesWithCompletionHandler:^(SKCloudServiceCapability capabilities,
                                                NSError * _Nullable error) {
         switch (capabilities) {
             case SKCloudServiceCapabilityNone:
                 NSLog(@"apple music none");
                 break;
             case SKCloudServiceCapabilityMusicCatalogPlayback:
                 NSLog(@"apple music playback");
                 break;
             case SKCloudServiceCapabilityMusicCatalogSubscriptionEligible:
                 NSLog(@"apple music subscription eligible");
                 [self setupSubscriptionVC];
                 break;
             case SKCloudServiceCapabilityAddToCloudMusicLibrary:
                 NSLog(@"apple music add to cloud music library");
                 break;
         }
    }];
    

    }

    - (void)setupSubscriptionVC {
    NSDictionary<SKCloudServiceSetupOptionsKey, id> *appleMusicOptions =
    @{SKCloudServiceSetupOptionsActionKey: SKCloudServiceSetupActionSubscribe};
    NSLog(@"apple music options: %@", appleMusicOptions);
    [self.setupVC loadWithOptions:appleMusicOptions
                completionHandler:^(BOOL result, NSError * _Nullable error) {
                    NSLog(@"setupvc completion handler");
                    if (error) {
                        NSLog(@"setupvc error: %@", [error localizedDescription]);
                    }
                    if (result) {
                        NSLog(@"setupvc load complete");
                        [self presentViewController:self.setupVC animated:YES completion:nil];
                    }
                }];
    

    }

    在我提供的示例项目和Apple的示例代码中,未加载设置视图控制器而不显示。如何呈现设置视图控制器?

1 个答案:

答案 0 :(得分:0)

首先,您应该使用真实设备而不是模拟器。 第二,您应该在设备上安装iTunes。 您应该使用其父级ViewController展示您的SKCloudServiceSetupViewController:

[parentViewController presentViewController:myCloudServiceSetupViewController animated:YES completion:nil];