CloudKit
概念
一度作ると削除はできない
保存するデータはもちろん、データ構造定義やアクセスログ等も Container 毎に扱われる
データの格納先となるデータベース
アプリの全てのユーザがアクセス可能なデータベース
端末が iCloud ログインしていなくても利用できる
全てのユーザがデータを読むことができ、データの生成ユーザのみがデータの書き込み権限を持つ
利用にはアプリの iCloud ストレージ容量を消費する
ユーザ固有のデータベース
利用のためには端末にて iCloud アカウントログインが必要
iCloud アカウントを保持しているユーザのみがアクセスでき、全てのデータを読み書きできる
利用にはユーザの iCloud ストレージ容量を消費する
特定のユーザ同士がアクセス可能なデータベース
利用のためには端末にて iCloud アカウントログインが必要
アクセスが許可されているユーザのみがアクセスでき、データの読み書きができるかは付与されている権限による
利用にはユーザの iCloud ストレージ容量は消費しない
iCloud アカウントがアクティベートされていなくても利用できるように設計するのが推奨されている
データベース内のレコードの名前空間のようなもの
Public/Private Database には各々 default の zone が存在する (Shared Database には存在しない)
同一の Zone に所属する Record 群に対しては Atomic に書き込むことができる
Zone を跨いで Record を参照させあうことはできない
名前と複数のフィールドを持つ。各フィールドは名前とデータ型を持つ
多分こんな感じ?
https://gyazo.com/bf2aebaaee25b1612ff74f9ce8af451c
==== 以下は WIP ====
気になるやつ。Shared Database の話
table:coredata
Core Data CloudKit
Objects NSManagedObject CKRecord
Models NSManagedObjectModel Schema
Store NSPersistentStore CKDatabase or CKRecordZone
NSManagedObject は、実際にアクセス可能なデータ
CKRecord は KV ストア
NSManagedObjectModel は Xcode 上のモデルエディタで定義する
このコンテナを経由してストアを管理する
PersistentContainer とは?
登場人物
PersistentContainer
アプリケーション内の CoreData スタックを生成/管理するコンテナ
PersistentStore
データの保存先の抽象化
CoreData は、バイナリ、SQLite、XML、インメモリという4つの保持タイプを持っていて、これらを抽象化して扱うためのクラス
ObjectModel
Object
CloudKit の Schema とデータをやり取りするために、CloudKit に CoreData のデータ構造を教えてやり、Schema を生成する必要がある
CloudKit Container については下記
TODO
ローカルで完結 & iCloud 利用をスイッチする方法はあるのか?
消せないので注意!
sannkou