Closed5
Core Data with CloudKit
ユーザーにとって何が嬉しいか
- 複数端末で同期できる
- 機種変更の際の復元が比較的楽
- 特定の人とシェアできる
- ・・・
CloudKitの制約
CloudKit does not support unique constraints, undefined attributes, or required relationships.
プッシュ通知を利用してCloudKitの変更をCoreDataに伝えている
CloudKitへ同期するかしないかを切り替える
この仕様ができるかが気になったのがそもそも調べるきっかけ。
NSPersistentCloudKitContainerを生成し、storeDescription.cloudKitContainerOptions = nil
と設定すれば良さそう。
→ 再起動しないと他のデバイスからの同期が機能しない。バグ?
→ この方法も問題があると言及している
configurationを作成する方法も考えられる。
- Cloudオン時
- CloudのDBから参照するようにする
- Cloudオフ時
- LocalのDBから参照するようにする
同じエンティティを複数のConfigurationで管理した場合、データ差異があったらどうなるんだろう?
基本的には同じ(ミラー)となる前提だとは思う?つまりこの方式の場合単純にデータ量が2倍になるよね?
今回の自分のケース(ここでは未記載)の場合、
storeDescription.cloudKitContainerOptions
で管理するのがベターそうだが、期待通りの動作しない且つconfigurationを使ってまで切り替え機能を提供したいかというとそうでもない。
「CloudKitへ同期するかしないかを切り替える」のではなく、「CloudKit同期をする」前提で考える方が良さそう。
参考
-
Using Core Data With CloudKit
- Core Data With CloudKitの基本的な話。
-
https://developer.apple.com/videos/play/wwdc2021/10015
- 複数の iCloud ユーザー間でデータを共有するアプリについて
- NSPersistentCloudKitContainerを用いたサンプルアプリの動作を知るために役立つ
-
https://developer.apple.com/videos/play/wwdc2022/10119/
- CoreData、CloudKitの最適化の話。検証/テスト、チェック、デバッグ etc.
-
https://developer.apple.com/videos/play/wwdc2020/10650/
- パブリックなデータ保存場所としてCloudKitを利用する
- 今回の話とはあまり関係なし
- https://zenn.dev/treastrain/articles/9db1ac5fb17904
このスクラップは2023/04/23にクローズされました