我已经在我的iOS应用程序中集成了cloudkit框架,并且在iOS 8和9中运行良好,但在iOS 10中运行良好。如果没有活动的iCloud帐户,它无法从公共数据库中获取记录。能够获取iOS 8和9中的记录,如果用户限制iCloud驱动器的应用程序,但它在iOS 10中失败,收到错误,如
CKError 0x170249090:"未经过身份验证" (一千〇二分之九); "没有支持 帐户,所以不返回身份验证令牌。"
它不适用于iOS设备中的开发和生产cloudkit环境。 我已经使用指向生产的AdHoc构建测试了应用程序。
以下是我的代码
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"RecordSettings" predicate:[NSPredicate predicateWithFormat:@"TRUEPREDICATE"]];
CKQueryOperation *queryOperation = [[CKQueryOperation alloc] initWithQuery:query];
queryOperation.queuePriority = NSOperationQueuePriorityVeryHigh;
queryOperation.recordFetchedBlock = ^(CKRecord *record) {
if(record != nil) {
}
};
queryOperation.queryCompletionBlock = ^(CKQueryCursor * __nullable cursor, NSError * __nullable operationError) {
NSLog(@"iCloud error: %@", operationError.description);
};
[[[CKContainer defaultContainer] publicCloudDatabase] addOperation:queryOperation];
答案 0 :(得分:4)
您需要在模拟器或设备上使用iCloud帐户登录。它对我有用。
答案在 Enter iCloud Credentials Before Running Your App :
部分在开发中,当您在模拟器或设备上通过Xcode运行应用程序时,您需要输入iCloud凭据以读取公共数据库中的记录。在生产中,默认权限允许未经过身份验证的用户读取公共数据库中的记录,但不允许他们写入记录。
答案 1 :(得分:0)
我遇到了同样的问题。一切都很好,直到iOS10。到目前为止,我发现解决此问题的唯一方法是让用户在其设备上启用iCloud Drive以获取公共容器中的任何记录。我正在向Apple提交错误报告!
答案 2 :(得分:-3)
此问题从 iOS 10.0 到 10.1.1 存在,但已在 iOS 10.2 中得到解决。