iCloud対応のアプリを作ろうとしていて、現時点で出した結論。後で気が変わるかもしれませんが・・・
CoreDataのメリット
- まずローカルで保存され、定期的にiCloudへ送信、他の端末と同期される
- まずローカルで保存されるので、ネットにつながってなくても良いし高速
- マージを除く同期の大部分はSDKレベルで勝手にやってくれる
CoreDataのデメリット
- モデルとリレーションが増えると、マージが複雑になっていく
- 同期のタイミングを制御出来ない。OS任せ
- 他の端末での変更に対するマージ要求もアプリから制御出来ない(Notificationで飛んでくる)
CloudKit Storageのメリット
- 任意のタイミングで直接iCloudへ送信できる
- 同期やマージのタイミングもアプリで制御できる
CloudKit Storageのデメリット
- ローカル保存などキャッシュの仕組みは自分で実装する必要がある
使い分けをどうするべきか
CoreDataの方が良い場合
- モデルの数が少なかったり、リレーションがあまりないシンプルなデータ構造の場合
- テキストだけのTODOリストとか
CloudKitの方が良い場合
- モデルの数が多かったり、それらのリレーションが多岐にわたる場合
ブログのように
- 記事
- カテゴリ
- タグ
- 添付画像
といったように、1つのモデルに複数のモデルおよび画像などがひもづくような時点でCloudKitの方が良いかなあと。CoreDataだとマージが非常に大変なイメージ。