Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CloudKit を使うアプリのリリース前確認

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →
Avatar for miharu miharu
October 31, 2026

CloudKit を使うアプリのリリース前確認

Avatar for miharu

miharu

October 31, 2026

More Decks by miharu

Other Decks in Programming

Transcript

  1. CloudKitの開発環境と本番環境 一つのCloudKitコンテナ アプリがデータを保存・管理する領域 開発用の署名で実行 TestFlight / App Store Development Production

    開発・検証用 本番運用用 Public Database / Category Public Database / Category テスト用カテゴリー 本番用カテゴリー 同じコンテナでも、環境が違えばデータは別 7
  2. PrivateとPublicの役割 Public Database Private Database アプリの利用者に共通 利用者ごとに独立 Category / AppConfig

    作品カテゴリ・配信設定 利用者A 利用者B 本人の作品記録 本人の作品記録 Project Project 読み取り 利用者A 利用者B 開発環境・本番環境のそれぞれに、PrivateとPublicがある。 8
  3. スキーマはDevelopmentで定義 対象 Development Production Record Type・Field 作成・追加 Developmentからデプロイ Record(実データ) 登録・更新

    権限に応じて登録・更新 ProductionでRecord Type・Fieldを直接新規定義できない。 ProductionにデプロイしたFieldは、削除・型変更できない。 10
  4. スキーマとレコードは別 Development スキーマ:データの構造 Category Production デプロイ スキーマ:データの構造 Category id・name_jaなどのフィールド /

    索引 id・name_jaなどのフィールド / 索引 レコード:実際のデータ レコード:実際のデータ Category 本番用のデータを 例:セーター・帽子 別途登録する スキーマのデプロイでは、レコードはコピーされない 11
  5. 変更内容を確認してProductionへ 1 2 Deploy Schema Changes Developmentの左メニュー 2 変更内容を確認 Productionへ反映する型など

    3 Deploy スキーマをProductionへ反映 1 3 アプリのリリースとは別の操作 実データは別途登録する 13
  6. 事例:アプリ再起動後に変更が表示された 1 2 3 端末Aで編集 端末Bで確認 端末Bのアプリを 再起動 作品記録を変更 変更が見えない

    変更が見える 個人の記録を編集した 画面には反映されない 起動し直すと表示された 観察したのは画面の変化。同期の発生時点や原因は未確認。 16
  7. 同期されない ≠ CloudKitの通信エラー TN3164の3分類 確認すること データ表示レイヤ SwiftDataの取得・観測、ModelContext、画面更新 CloudKitの設定 システム側の制限 Container

    ID・Entitlements Schema・Development/Production 同期の実行タイミング・ネットワーク バックグラウンド実行・スロットリング 保存・アップロード・ダウンロード・画面反映を切り分ける。 出典:Apple TN3164 18
  8. ログと実データで原因を調べる 調査方法 見るもの Xcode Console Core Data/CloudKit関連のログ・エラー データの値を照合 送信元の保存値 →

    CloudKitのRecord → 受信側の保存値 必要ならsysdiagnose 再現直後に取得し、発生時刻を絞って送受信を追う 受信側の値も新しいのに画面が古いなら、 SwiftDataの取得・観測・画面更新を調べる。 出典:Apple TN3164・TN3163 sysdiagnoseの取得・ログの読み方はこちら: WWDC22「Optimize your use of Core Data and CloudKit」 19
  9. PublicとPrivateで異なる取得・同期の仕組み 仕組み Public 何をするか CKQuery 条件に合うRecordを取得 CKQuerySubscription SwiftDataの自動連携 Core Dataミラーリング

    条件に合う変更を通知 取得・反映はアプリ側 モデルの保存と 端末間の同期を自動化 Private 対応 対応 対応 対応 非対応 対応 ローカルストアと 双方向 CloudKitを同期 変更確認はポーリング 双方向 公開範囲の違いに加えて、利用できる同期の仕組みも確認する。 出典:Apple CKQuerySubscription・SwiftDataの自動同期・TN3164・WWDC20 20
  10. 参考資料:sysdiagnoseを詳しく知る 動画で見る:sysdiagnoseの取得・ログの読み方 WWDC22「Optimize your use of Core Data and CloudKit」

    https://developer.apple.com/videos/play/wwdc2022/10119/ 送受信をsysdiagnoseで調査:TN3163 https://developer.apple.com/documentation/technotes/tn3163-understanding-thesynchronization-of-nspersistentcloudkitcontainer 24