2015-08-23 37 views
3

我正在尝试将iCloud功能添加到现有的应用程序。我正在使用UIManagedDocument来引用核心数据。我已经对此进行了大量的研究,但我无法弄清楚我做错了什么。我错过了什么让我的iOS应用程序有权使用iCloud?

我试过让这个工作在我的Macbook和我的Mac Mini上。我尝试关闭iCloud功能,退出Xcode,然后重新打开Xcode并重新开启iCloud功能。没有运气。

为什么我不认为它有权的原因是:

  1. 我没有看到云调试计。
  2. 当我触发模拟器的iCloud的同步,我得到一个错误,指出:

操作无法完成。 (BRCloudDocsErrorDomain误差2 - 已注销 - 未配置的iCloud驱动器)

  • 以下解析为nil
    [[NSFileManager defaultManager] ubiquityIdentityToken]
  • 安装截图

    icloud的能力设置。

    enter image description here

    应用ID具有icloud的导通。

    enter image description here

    我的provisioning profile说,这是为设置的iCloud。当我切换到我的Mac Mini时,我也被撤销并重新授权。

    enter image description here

    我看到一个关于Xcode的6测试版无法正常有权利安装后,但近我可以告诉大家,这是好的。我尝试将Ubiquity容器标识符更改为$(TeamIdentifierPrefix)$(CFBundleIdentifier),但似乎没有什么区别。

    enter image description here

    代码

    也许问题是我的代码?以下唯一的新部分是NSPersistentStoreUbiquitousContentNameKey: @"iCloudStore"

    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory 
                    inDomains:NSUserDomainMask] firstObject]; 
    url = [url URLByAppendingPathComponent:DATABASE_DOCUMENT_NAME]; 
    self.document = [[UIManagedDocument alloc] initWithFileURL:url]; 
    
    // To cause light-weight model version migration to occur. 
    self.document.persistentStoreOptions = @{ 
                 NSMigratePersistentStoresAutomaticallyOption : @YES, 
                 NSInferMappingModelAutomaticallyOption : @YES, 
                 NSPersistentStoreUbiquitousContentNameKey: @"iCloudStore" 
                 }; 
    

    后,它上面的代码要么执行openWithCompletionHandlersaveToURL:url forSaveOperation:UIDocumentSaveForCreating。我也注册通知NSPersistentStoreCoordinatorStoresDidChangeNotification并且正在发生。

    +1

    您登录到iCloud中的模拟器?你是在设备上还是在模拟器上运行应用程序? – NickEntin

    +0

    在我的iPad上运行确实会显示iCloud Debug Gauge。感谢那。我确定我的Mac被登录到iCloud,但不是模拟器本身。我登录了模拟器的设置,以便与我的iCloud连接。 ubiquityIdentityToken不再是零,但在模拟器上我仍然没有看到iCloud Debug Gauge。 –

    +0

    即使iCloud Debug Gauge没有出现在我的模拟器中,但模拟器的iCloud正在工作,因为我的iPad正在模拟器上获取更新。谢谢你的帮助! –

    回答

    1

    iCloud Debug Gauge可能不适用于在模拟器中运行的应用程序,因为它没有完整的功能。这是从2014年开始的,所以事情可能已经改变了。

    但是,模拟器并未完全支持iCloud Core Data。在跨设备和模拟器进行测试时,似乎模拟器上的iCloud Core Data仅上载更改,并且不会将其撤回。与需要单独的测试设备相比,这仍然是一个很大的改进,而且非常方便,但iOS模拟器上的iCloud Core Data支持绝对没有完全烘焙。

    http://www.objc.io/issues/10-syncing-data/icloud-core-data/

    我可以找到它的官方文档中的唯一的事说:

    实际设备上测试启用的iCloud,iOS应用尤其重要。 iOS模拟器不能在真实世界的条件下准确模拟使用iCloud。

    https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/UsingCoreDataWithiCloudPG/UsingSQLiteStoragewithiCloud/UsingSQLiteStoragewithiCloud.html