NSPersistentCloudKitContainer を使用して Core Data モデルをセットアップしました。
struct PersistenceController {
static let shared = PersistenceController()
let container: NSPersistentCloudKitContainer
init(inMemory: Bool = false) {
container = NSPersistentCloudKitContainer(name: "LearningCloudKit")
if inMemory {
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
}
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
}
}
これは、CoreData と CloudKit を使用して新しいプロジェクトを作成するときに Xcode が提示するほとんどの標準的なものです。
データを表示するビューは、
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: false)],
animation: .default)
private var items: FetchedResults<Item>
デバイス間の同期はある程度機能しますが、一方のデバイスに新しいデータを入力すると、もう一方のデバイスに表示されるまでに 15 分以上かかります。わかりません。アプリを強制終了して再起動するまで届かないことがあります。また、あるデバイスでデータを入力し、強制的に閉じて他のデバイスからのデータを表示する必要がある場合もあります。
リモート通知を有効にし、CloudKit とコンテナーを有効にしました。CloudKit ダッシュボードで、変更がクラウドにかなり速くアップロードされていることを確認しました。それらはそれほど速くデバイスにダウンロードされていないようです。
これを機能させるには、他に何をしなければなりませんか? 1 つのデバイスにデータを入力すると、1 分もかからずに他のデバイスに表示されます。多分バックグラウンドサービス?