CKContainer requestApplicationPermission 中的服务不可用错误(CKError 代码 6)

Service unavailable error (CKError Code 6) in CKContainer requestApplicationPermission

我正在尝试使用 CloudKit 从用户的 iCloud 帐户中读取用户名,如下所示

CKContainer *container = [CKContainer defaultContainer];
[container accountStatusWithCompletionHandler:^(CKAccountStatus accountStatus, NSError * _Nullable error) {
    if (accountStatus == CKAccountStatusAvailable) {
        [container requestApplicationPermission:CKApplicationPermissionUserDiscoverability completionHandler:^(CKApplicationPermissionStatus applicationPermissionStatus, NSError * _Nullable error) {
            if (applicationPermissionStatus == CKApplicationPermissionStatusGranted) {
                [container fetchUserRecordIDWithCompletionHandler:^(CKRecordID * _Nullable recordID, NSError * _Nullable error) {
                    if (!error && recordID) {
                        [container discoverUserIdentityWithUserRecordID:recordID completionHandler:^(CKUserIdentity * _Nullable userInfo, NSError * _Nullable error) {
                            NSLog(@"UserInfo: %@  Error: %@", userInfo, error);
                        }];
                    }
                }];
            }
        }];
    }
}];

但每次 requestApplicationPermission 都因服务不可用错误而失败,状态为 CKApplicationPermissionStatusCouldNotComplete。我不确定我在这里做错了什么。我尝试了多个设备和帐户,但结果仍然相同。我曾尝试按照某些地方的建议禁用和启用 CloudKit 功能,但没有成功。是否有任何我需要配置的信息我丢失了。下面是我的 iCloud 功能的样子

嗯,原来我需要在调用 requestApplicationPermission 之前调用 statusForApplicationPermission:。真是莫名其妙,因为我没有检查权限状态,所以权限请求失败了。 Service UnAvailable 错误也是如此。这是有效的代码(不是很优雅):

CKContainer *container = [CKContainer defaultContainer];
[container accountStatusWithCompletionHandler:^(CKAccountStatus accountStatus, NSError * _Nullable error) {
    if (accountStatus == CKAccountStatusAvailable) {
        [container statusForApplicationPermission:CKApplicationPermissionUserDiscoverability completionHandler:^(CKApplicationPermissionStatus applicationPermissionStatus, NSError * _Nullable error) {
            if (applicationPermissionStatus==CKApplicationPermissionStatusInitialState || applicationPermissionStatus==CKApplicationPermissionStatusGranted) {
                [container requestApplicationPermission:CKApplicationPermissionUserDiscoverability completionHandler:^(CKApplicationPermissionStatus applicationPermissionStatus, NSError * _Nullable error) {
                    if (applicationPermissionStatus == CKApplicationPermissionStatusGranted) {
                        [container fetchUserRecordIDWithCompletionHandler:^(CKRecordID * _Nullable recordID, NSError * _Nullable error) {
                            if (!error && recordID) {
                                [container discoverUserIdentityWithUserRecordID:recordID completionHandler:^(CKUserIdentity * _Nullable userInfo, NSError * _Nullable error) {
                                    NSLog(@"UserInfo: %@  Error: %@", userInfo, error);
                                }];
                            }
                        }];
                    }
                }];
            }
        }];
    }
}];