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

Posted

技术标签:

【中文标题】CloudKit - “容器的无效捆绑 ID”【英文标题】:CloudKit - "Invalid bundle ID for container" 【发布时间】:2017-09-10 18:31:53 【问题描述】:

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

并添加此功能:

当我运行代码时收到以下错误消息:

我做错了什么?

【问题讨论】:

【参考方案1】:

有一个错误导致某些关联丢失。该错误已得到修复,我们自动修复了在此期间损坏的容器/应用关联。

如果由于某种原因您仍需要重做关联,您可以使用 Xcode 中的 Capabilities 窗格或使用 developer.apple.com -> Certificates, Identifiers & Profiles -> App IDs -> 选择 ID -> Edit - > 在 iCloud 下编辑 -> 选中要取消关联的容器框,保存,然后重新关联。

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

【讨论】:

嗨,戴夫,感谢您的回答。实际上,我尝试使用 CloudKit 创建的每个新项目都有同样的问题。我该怎么办 ?只发送我目前正在处理的捆绑包 ID 和容器 ID 吗?问候! 我有同样的错误,我尝试了你的解决方案,但它不起作用。什么都没有改变:( 刚刚在 Xcode 12.5 中遇到了同样的问题。在 Xcode 中使用 Capabilities 窗格没有帮助,但第二种解决方案(通过 developer.apple.com 重新关联)有帮助。当然,我必须在编辑应用 ID 后重新生成应用的配置文件。 我在几个项目上设置了 iCloud,但没有看到这个问题。不过我最近遇到了。我注意到一个“iCloud Container Assignment”按钮;我在 Xcode 中设置的容器在那里没有关联。 经过许多令人沮丧的小时后,我得出了这个答案。对我有用的是:1. 在 Xcode 上取消选择容器,2. 在 developer.apple.com 上取消选择容器(并保存),3. 在网站上再次选择容器,4. 重新生成配置文件,最后 5. 在 Xcode 上选择容器。 【参考方案2】:

我和我的朋友也有同样的问题。我们制作了 2 个不同的项目,它们都有相同的错误消息“容器的捆绑 ID 无效”,即 CKError case 10。

我们正在调用我们的 fetch 函数来获取 viewDidLoad 中的默认“用户”记录。

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)
    

【讨论】:

您认为这可能是环境问题吗? 是的,这可能与 Apple 的主题演讲有关。我过去有几个运行良好的小型 cloudKit 项目。【参考方案3】:

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

【讨论】:

以上是关于CloudKit - “容器的无效捆绑 ID”的主要内容,如果未能解决你的问题,请参考以下文章

应用程序的 iCloud 权利?

为啥我不能从 Xcode 或 CloudKit Dashboard 查询 CloudKit?

CloudKit iOS 10 错误:帐户无权访问 CloudKit 帐户

CloudKit 批量获取?

Swift 3 中的顺序网络请求

CloudKit 的单元测试