不少童鞋在使用iCloud同步的功能时会发现,你的App无法正常工作,尤其是在模拟器上运行App的时候!这是因为你模拟器上设置里的iCloud没有登录!
当你登录iCloud账号后,你会发现App神奇般的恢复正常了!一般的你可以在Xcode打开对应账号下的iCloud中存放的内容:
项目->Capabilities->iCloud->CloudKit Dashboard 按钮
地址如下:
https://icloud.developer.apple.com/dashboard/
不过还有一个问题需要解决,如何提前检测iCloud账户是否登录呢!?
这分两种情况:当使用iCloud里的Key-value storage功能时,官方文档称无法直接判断出iCloud账号是否已登录,原话如下:
Key-value storage is effectively always available. If a
device is not attached to an account,changes created on
the device are pushed to iCloud as soon as the device is
attached to the account.
网上那些说使用NSUbiquitouskeyvalueStore.default().synchronize()之类的方法都无效,它都返回true!
如果是使用iCloud中的iCloud Documents功能,在打开Capabilities中iCloud对应的选项后官方的原话是:
Call the URLForUbiquityContainerIdentifier: method for one of your ubiquity containers. If the method returns nil,document storage is not available.
可以使用如下代码检测:
func iCloudAccesstest(_ block:@escaping (Bool)->()){ dispatchQueue.global(qos: .default).async { if let _ = FileManager.default.url(forUbiquityContainerIdentifier: nil){ dispatchQueue.main.async { block(true) } }else{ dispatchQueue.main.async { block(false) } } } }
其实对于第一种情况(Key-value storage),也可以使用这个技巧,前提是必须打开iCloud中对应的选项即可.
而在使用CloudKit的情况下,可以如下方式判断:
The public database is always available. The private
database is available only when the value in the
ubiquityIdentityToken property is not nil.
官方文档链接:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。