我刚刚在 Xcode 9 beta 6 中创建了一个项目并添加了以下代码:
let privateDB = CKContainer.default().privateCloudDatabase
let greatID = CKRecordID(recordName: "GreatPlace")
let place = CKRecord(recordType: "Place", recordID: greatID)
privateDB.save(place) { (record, error) in
if error != nil {
let er = (error as! CKError).errorUserInfo
print("Error: \n")
print("CKErrorDescription: \(er["CKErrorDescription"]!)\n")
print("ContainerID: \(er["ContainerID"]!)\n")
print("NSDebugDescription: \(er["NSDebugDescription"]!)\n")
print("NSUnderlyingError: \(er["NSUnderlyingError"]!)\n")
print("NSLocalizedDescription: \(er["NSLocalizedDescription"]!)\n")
print("ServerErrorDescription: \(er["ServerErrorDescription"]!)\n")
}
if record != nil {
print("record: \(record!)")
}
}
并添加此功能:
当我运行代码时,我收到此错误消息:
我做错了什么?
存在一个错误,导致某些关联被遗漏。该错误已得到修复,我们自动修复了在那段时间被破坏的容器/应用程序关联。
如果由于某种原因您仍然需要重做关联,您可以使用 Xcode 中的功能窗格或使用developer.apple.com -> 证书、标识符和配置文件 -> 应用程序 ID -> 选择 ID -> 编辑 -> 编辑在 iCloud 下 -> 选中容器的复选框以取消关联、保存,然后重新关联。
如果您仍然遇到困难,请发送电子邮件至 cloudkit[at]apple.com
感谢 Dave Browning,这是基于他的回答。
以下对我有用:
CKContainer
NSPersistentCloudKitContainer
,我们不会直接使用容器 ID,容器 ID 会从权利文件中自动选取。Certificates, Identifiers & Profiles
Identifiers
(应用程序ID)我和我的朋友也有同样的问题。我们制作了 2 个不同的项目,它们都有相同的错误消息“容器的捆绑包 ID 无效”,即 CKError case 10 。
我们调用 fetch 函数来获取 viewDidLoad 中的默认“Users”记录。
func fetchWorkoutCompleted(completion: @escaping (Error?) -> Void = { _ in }) {
cloudKitManager.fetchRecord(ofType: "Users", sortDescriptors: nil) { (records, error) in
if let error = error {
print(error.localizedDescription)
completion(error)
return
}
guard let records = records else { completion(nil); return }
completion(nil)
}
}
使用 Xamarin.IOS,我必须在 info.plist 文件中选择手动配置而不是自动配置。
有同样的问题。对我有用的是更改 iCloud 组名称。
之前是这样的:
iCloud.com.companyName.appName.randomString
更改为:
iCloud.com.companyName.randomString
后,它开始工作并同步。
如果添加新容器后它是红色的,请按刷新按钮(在组下方)并尝试在手机上进行全新安装,它应该可以工作
就我而言,我必须从设备中删除该应用程序,然后再次初始化它。然后又成功了。
对我来说,问题是为了创建容器,我使用
CKContainer.default()
。我有两个不同的包标识符(调试和发布),并且 CKContainer.default()
会将 CK 容器标识符与应用程序的包标识符相同。当我更改为创建要使用的容器时,我可以使用相同的 CK 容器进行调试和发布。