CloudKit - “容器的捆绑包 ID 无效”

问题描述 投票:0回答:7

我刚刚在 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!)")
        }
 }

并添加此功能:

当我运行代码时,我收到此错误消息:

我做错了什么?

swift cloudkit xcode9beta6
7个回答
15
投票

存在一个错误,导致某些关联被遗漏。该错误已得到修复,我们自动修复了在那段时间被破坏的容器/应用程序关联。

如果由于某种原因您仍然需要重做关联,您可以使用 Xcode 中的功能窗格或使用developer.apple.com -> 证书、标识符和配置文件 -> 应用程序 ID -> 选择 ID -> 编辑 -> 编辑在 iCloud 下 -> 选中容器的复选框以取消关联、保存,然后重新关联。

如果您仍然遇到困难,请发送电子邮件至 cloudkit[at]apple.com


1
投票

感谢 Dave Browning,这是基于他的回答。

以下对我有用:

检查容器id
  • 检查用于初始化的容器ID
    CKContainer
  • 注意:如果您使用
    NSPersistentCloudKitContainer
    ,我们不会直接使用容器 ID,容器 ID 会从权利文件中自动选取。

尝试在App ID上禁用和启用iCloud

在 App ID 上禁用和启用 iCloud

  1. 前往 https://developer.apple.com 并登录
  2. 选择
    Certificates, Identifiers & Profiles
  3. 选择
    Identifiers
    (应用程序ID)
  4. 编辑应用程序的应用程序ID
  5. 取消选中 iCloud
  6. 保存
  7. 检查 iCloud
  8. 退出 Xcode 并清除 DerivedData
  9. 运行应用程序

0
投票

我和我的朋友也有同样的问题。我们制作了 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)
    }
}

0
投票

使用 Xamarin.IOS,我必须在 info.plist 文件中选择手动配置而不是自动配置。


0
投票

有同样的问题。对我有用的是更改 iCloud 组名称。

  • 之前是这样的:

    iCloud.com.companyName.appName.randomString

  • 更改为:

    iCloud.com.companyName.randomString
    后,它开始工作并同步。

如果添加新容器后它是红色的,请按刷新按钮(在组下方)并尝试在手机上进行全新安装,它应该可以工作


0
投票

就我而言,我必须从设备中删除该应用程序,然后再次初始化它。然后又成功了。


0
投票

对我来说,问题是为了创建容器,我使用

CKContainer.default()
。我有两个不同的包标识符(调试和发布),并且
CKContainer.default()
会将 CK 容器标识符与应用程序的包标识符相同。当我更改为创建要使用的容器时,我可以使用相同的 CK 容器进行调试和发布。
    

© www.soinside.com 2019 - 2024. All rights reserved.