swift - Xcode 版本 11.5 CloudKit 无法在模拟器上运行

标签 swift xcode icloud cloudkit

在上次更新之前,我可以在模拟器上使用 CloudKit 管理数据,但上次更新后,它不起作用,而且如果我在 iCloud Drive 中添加文件,模拟器中的文件夹也不会更新。

在我的函数中,我收到 canNotComplete 状态:

defaultContainer.requestApplicationPermission(.userDiscoverability, completionHandler: {status, error in
            switch status {
            case .denied:
                DispatchQueue.main.async {//necessario perchè lo fa in background e potrebbe crashare senza questo
                    completionHandler(status)
                    self.showSettingsAlert()
                }
            case .initialState:
                DispatchQueue.main.async {
                    completionHandler(status)
                    self.showSettingsAlert()
                }
            case .couldNotComplete:
                DispatchQueue.main.async {
                    completionHandler(status)
                    self.showSettingsAlert()
                }
                print("@couldNotComplete requestApplicationPermission (func getUserPermission) - probabilmente non ha un account icloud")                
            case .granted:
                completionHandler(status)
            @unknown default:
                print("@unknown requestApplicationPermission (func getUserPermission)")
            }
        })

但问题出在 token 上:

Optional("Couldn\'t get an authentication token")

你也有同样的问题吗?

最佳答案

抱歉我无法回答,但我可以说这不仅仅是你;还有。这也开始发生在我身上。我知道的一些事情:

  • 最初一切正常,然后在某个时刻我被要求重新输入我的 iCloud 密码(“Apple ID 验证”)。

  • 模拟器接受密码,但过了该密码,CloudKit(以及更多)就会停止工作。

  • 以下是 CloudKit 返回的错误:Optional()

  • 我尝试使用“功能 | 触发 iCloud 同步”来查看是否能让 iCloud 开始工作,但没有。

  • 在 iPhone 模拟器上注销似乎永远不会结束;到目前为止,我一直不得不使用“删除所有内容和设置”。之后一切又恢复正常,但时间不会太长。

  • 在 iPad 模拟器上注销曾经有效。重新登录后,一切又开始工作了。嗯,到目前为止。 :-)

  • 我正在使用测试帐户。我想知道苹果是否认为这是一个垃圾邮件帐户,所以我登录了https://appleid.apple.com并打开双因素身份验证等。这些都没有什么区别。

  • 以下是我计划尝试的一些事情,大致按顺序排列:

    • 使用 iOS 13.4 的新模拟器(我目前使用的是 13.5)
    • 新测试帐户
    • Xcode 12 测试版

===

到目前为止我已经尝试过:

  • 使用 iOS 13.4 的新模拟器
  • Xcode 12 测试版
  • 重新启动我的 Mac

最终,这些方法都没有奏效;一旦我开始收到“无法获取身份验证 token ”错误(我通常会在 24 小时内收到该错误),唯一能让模拟器再次工作的方法就是删除它。

我不确定的一件事是,一旦模拟器处于该状态,任何东西是否都可以恢复它。例如,当我第一次启动 Xcode 12 beta 并第一次运行模拟器时,它立即要求输入密码。测试版是从已经损坏的模拟器开始的吗?更重要的是,Xcode 12 beta 是否会自行损坏模拟器,或者它只是发现了 Xcode 11.5 实际上创建的错误?我不知道。

我会尝试更多的事情...

===

创建新的测试帐户不起作用,但我可能发现了一些可行的方法:重置钥匙串(keychain)。以下是从命令行执行此操作的方法:

xcrun simctl keychain reset <device>

运行该命令后,模拟器再次要求输入 iCloud 密码,但密码现在会产生预期结果:iCloud 再次开始工作。

(如果您的应用程序在您重置钥匙串(keychain)时正在运行,您可能需要重新启动它,或者以其他方式刺激它,以便它注意到更改。)

关于swift - Xcode 版本 11.5 CloudKit 无法在模拟器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62730245/

相关文章:

ios - 当应用程序未运行时按需获取用户位置,而不显示推送通知

Swift 泛型错误 : Cannot convert value of type 'Type<T>' to expected argument type 'Type<_>'

ios - Swift 编程 - 如何设置轮流应用程序

ios - 适用于 iOS 的 FTP,如何从 FTP 协议(protocol)下载?

ios - 如何使用 NSPredicate 和 CloudKit 获取特定用户的最新帖子?

swift - 快速处理 PFErrorCode

ios - 如何更改按钮单击时 UICollectionView 的高度

ios - xcodebuild 在仅请求 tvOS 时同时构建 iOS 和 tvOS 目标

ios - iCloud - 如何更新 UIDocument 文件?

swift - 当 ubiquitousItemDownloadingStatusKey 为 'Current' 时,我正在尝试运行一个函数