如何解决Cloudkit + CoreData 并上传到早期 iOS 版本的 iCloud
TLDR
如何在 iOS 13 之前的 iOS 版本中使用带有核心数据的 cloudkit?
我正在构建一款适用于 iOS 12+ 的应用。
我使用核心数据,我也希望能够在 iCloud 中上传数据。我在可用时使用 NSPersistentCloudKitContainer
设置了持久性容器,但我仍然有一些疑问。
我目前像这样管理存储:
//MARK: PersistentContainer
lazy var persistentContainer: NSPersistentContainer = {
let containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: CoreHelp.appGroup)!
let storeURL = containerURL.appendingPathComponent(CoreHelp.sql)
let description = NSPersistentStoreDescription(url: storeURL)
if #available(iOS 13.0,*) { //ios 13+
let container = NSPersistentCloudKitContainer(name: CoreHelp.appName)
container.loadPersistentStores(completionHandler: {
(storeDescription,error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error),\(error.userInfo)")
}
})
description.setOption(true as NSObject,forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
return container
} else { //less than iOS 13
let container = NSPersistentContainer(name: CoreHelp.appName)
container.loadPersistentStores(completionHandler: { (storeDescription,\(error.userInfo)")
}
})
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
return container
}
}()
//Where CoreHelp. … is a struct containing different ids.
这有效(至少在 iOS 13+ 上),但我很难找出正确的设置方式。这些是我的主要担忧:
-
我是否需要检查/询问用户是否要启用云同步,还是根据他们的手机设置自动检查?
-
如果用户不想将数据同步到云端,我是否需要切换到 NSPersistentContainer?
-
iOS 13 之前发布的版本不支持 NSPersistentCloudKitContainer。如何使用 CloudKit 同步/上传 iOS 12 用户(可能仍在使用 CoreData)保存的数据?
我阅读了这些内容以及更多内容:
Using Core Data,iCloud and CloudKit for syncing and backup and how it works together
CloudKit and Core sync data between devices
但现在情况发生了变化。
解决方法
答案 tl;dr 是你通过做很多独立的工作来做到这一点,我个人不能保证会成功。 iOS 12 或更低版本不支持带有 Core Data 的 CloudKit。
最可能的情况是使用 CloudKit 的 JavaScript 接口,可能使用自定义服务器来托管 JS 代码。详情由您决定,但有一个 Ray Wenderlich tutorial 可以帮助您入门。祝你好运。
如果这行不通,对于您支持的所有 iOS 版本,您最好的选择可能是第三方 Ensembles 框架,而不是 Apple 内置的 CloudKit 支持。它可以与 iCloud 或其他同步服务一起使用。我已经将它与 CloudKit 一起使用,它很可靠。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。