Open7

[Scrap] iCloud を使った実装方法について調べる

へぶんへぶん

知りたいこと

  • iCloud を使用したデータ保存を行うアプリの実装方法
  • どの程度柔軟性があるのか
    • どんなデータが保存できるのか
    • どんなクエリが使えるのか
  • その他
    • Flutter で使える package があるか

参考

https://developer.apple.com/icloud/
https://developer.apple.com/icloud/cloudkit/
https://developer.apple.com/documentation/coredata

へぶんへぶん

CloudKit を使うべきかどうかの記事

https://developer.apple.com/documentation/cloudkit/determining_if_cloudkit_is_right_for_your_app

  • ファイルを保存して同期したいなら iCloud Document Storage を使おう
    • ファイルを保存するだけで同期が不要なら FileManager でOK
  • 構造を持たないシンプルなデータなら iCloud Key-Value Storage でヨシ
  • 構造を持つデータをデバイス間で共有したいなら Cora Data を通して CloudKit を使うか CloudKit を直接使おう。
へぶんへぶん

CloudKit

https://developer.apple.com/icloud/cloudkit/designing/

CloudKit そのもの設計

  • Cloud Kit は CloudKit(root) > Container > Public, Private, Shared database のスコープを持つ
  • Private Database は Zone で区分けすることができ、更新頻度などに応じて区分けすることができる
    • Public Database は一つの Zone しか持たない。

開発環境

  • Production, Development(Sandbox) 環境が用意されている
  • 開発が完了後 promotion という手順によって、Production に反映できる
    • スキーマの変更はフィールドを足すしかできない。修正や削除は禁止されている(上方互換性)

接続性

  • CloudKit Container に保存することで簡単に複数デバイス間、ユーザー同士でデータの同期ができる
へぶんへぶん

課金まわり

以下の YouTube video も見てるとほぼ無料みたいなもんだ、的なこといってるが紹介してるページが見当たらない。
https://www.youtube.com/watch?v=mXGg-iwZNUA

中途で出てくるページを読んでみると、iCloud にデータが保存されてる限り従量課金対象にならないっぽい。

へぶんへぶん

Core Data

CloudKit をバックエンドに持つ単一ユーザー単一デバイス向けのサービスで、 Offline での使用やキャッシュ、Undo を使用できる。
https://developer.apple.com/documentation/coredata

これ以上の情報はほとんどどう実装するかに依存しそうなので、試しに作ってみるのが良さそう。