为什么找不到 iCloud 帐户/CKContainer

Dav*_*nte 3 icloud swift cloudkit swift3

请在下面查看我更新的问题:

我正在使用 CloudKit 开发我的第一个应用程序。在查找交易之前,我正在尝试测试用户是否已连接到 iCloud。

这是我的代码(显示各种测试):

func isICloudContainerAvailable()->Bool {

        CKContainer.default().accountStatus { (accountStat, error) in
            if (accountStat == .available) {
                print("iCloud is available")
            }
            else {
                print("iCloud is not available")
            }
        }

        CKContainer.default().accountStatus { (accountStatus, error) in
            switch accountStatus {
            case .available:
                print("iCloud Available")
            case .noAccount:
                print("No iCloud account")
            case .restricted:
                print("iCloud restricted")
            case .couldNotDetermine:
                print("Unable to determine iCloud status")
            }
        }


        if FileManager.default.ubiquityIdentityToken != nil {
            //print("User logged in")
            return true
        }
        else {
            //print("User is not logged in")
            return false
        }
    }
Run Code Online (Sandbox Code Playgroud)

这适用于我自己的帐户 - 我可以按预期工作。但是,对于新用户(即 Apple Review 团队和我自己的测试用户),我得到

iCloud 不可用,并且没有 iCloud 帐户

我确定有一个开放的 iCloud 帐户,因为新用户的 iCloud 邮件正在运行。

更新

我有一个测试用户注销并再次登录。她第一次启动应用程序时,会收到 noCloud 消息。如果她重新启动应用程序,它就可以工作。我可以使用一些关于寻找地点的想法.. 我已经使用我自己的计算机和一个新的测试帐户确认了这种行为。

Mir*_*ekE 5

根据文档,

仅当 ubiquityIdentityToken 属性中的值不为 nil 时,私有数据库才可用

它还说

有时您的应用程序可能无法使用 iCloud,例如当用户禁用文档和数据功能或退出 iCloud 时

文档和数据现在显然是设置中所谓的iCloud Drive

所以我会问有问题的用户他们的 iCloud Drive 设置是否已启用,以及打开它是否有任何区别。