检测OS X上的iCloud可用性更改

时间:2015-10-05 10:30:11

标签: xcode macos icloud

我有一对应用程序,一个用于iOS,一个用于OS X,通过CloudKit私有数据库和iCloud键值存储共享数据(如果用户选择),他已登录并且iCloud Data&我的应用程序启用了文档,一开始就启用或禁用了iCloud,一切正常。

在iOS方面,我可以使用Settings中的ubiquityIdentityToken和来自URLForUbiquityContainerIdentifier("iCloud.my.default.container.for.osx")的{​​{1}}检测用户选择,以检测用户是否已登录以及是否已启用数据和放大器;文档和它们在预期时为NSFileManager:当它们不是CloudKit也不是Key-Value存储时(如预期的那样)。

在应用程序运行时更改这两个设置时,它会终止,因此我可以在再次打开时检查更改,所以没问题。当我在OS X上测试相同的代码时,我发现如果我关闭Data& nil应用程序中的文档没有被杀死,但我想这是预期的行为,但即使我使用

监听iCloud可用性更改
System Preferences

我的应用未收到通知。如果我手动检查iCloud可用性,即通过重新启动应用程序,我发现NSNotificationCenter.defaultCenter().addObserver(self, selector: "checkiCloud:", name: NSUbiquityIdentityDidChangeNotification, object: nil) 不是ubiquityIdentityToken而且这是正确的,因为我已登录iCloud,但即​​使nil也不是{{1}这不是我所期待的。

这是OS X上的预期行为吗?如果是这样,我如何检查iCloud是否被禁用并在发生变化时收到通知?或者这是一个错误(我正在测试El Capitan)?

更新:一起禁用iCloud Drive会使通知触发,URLForUbiquityContainerIdentifier("iCloud.my.default.container.for.osx")返回nil,所以我猜这是一个错误。

更新:我向Apple提交了一份Bug报告:#22973458

1 个答案:

答案 0 :(得分:0)

如果您要构建基于文档的OS X应用程序,则可以使用

if ([[NSFileManager defaultManager] ubiquityIdentityToken])
//iCloud Drive is enabled

检查是否为设备启用了iCloud Drive。