Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CloudKit を使うアプリのリリース前確認
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
miharu
October 31, 2026
Programming
41
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CloudKit を使うアプリのリリース前確認
Kanagawa.swift #3
https://japan-region-swift.connpass.com/event/389036/
2026/10/31
miharu
October 31, 2026
More Decks by miharu
See All by miharu
受託→自社開発、3ヶ月目の中間報告
mnaruse
0
48
『SwiftUIによるカスタムビジュアルエフェクトの作成』を真似して作ってみた
mnaruse
2
320
visionOS入門セッションまとめ
mnaruse
2
1.8k
WWDC23 現地参加報告(体験記編)
mnaruse
1
470
新年度なので新しく取り組みたいこと:iOSアプリの 隣の領域を覗いてみる
mnaruse
0
390
WWDC20: What's new in location の要約
mnaruse
2
600
Other Decks in Programming
See All in Programming
Next.js: The final boss of Web Performance
guaca
0
400
Rails初心者がパスキーを実装してみて大変だったこと
ktombow
0
160
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
370
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
170
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
160
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
200
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
2k
Spec-driven Development with AI
simas
PRO
0
2.3k
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
220
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
240
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
300
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.3k
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Code Review Best Practice
trishagee
74
20k
A Soul's Torment
seathinner
8
3.9k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Are puppies a ranking factor?
jonoalderson
2
4.2k
Fireside Chat
paigeccino
43
4.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
It's Worth the Effort
3n
188
29k
The SEO Collaboration Effect
kristinabergwall1
1
620
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
480
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1.1k
Transcript
CloudKitを使うアプリの リリース前確認 本番環境の準備と端末間同期 Kanagawa.swift 2026/10/31 みはるん
CloudKitを調べたきっかけ 仕事ではiOS・Android・Webで共通のバックエンドを利用 個人でiOSアプリを作り、CloudKitが気になった AIとSwiftDataで実装できても、リリースの判断は気になる リリース前に、本番環境の準備と同期の挙動を確認したい。 2
とあるアプリのデータ カテゴリー一覧:Public Database 作品の記録:Private Database 運営から配る共通データ 同じ利用者の端末間で同期 3
今日確認すること 1 CloudKitの基本 環境とDatabase 2 本番環境の準備 構造とデータの確認 3 端末間同期 利用中の反映の確認
4
CHAPTER 01 CloudKitの基本
端末間でデータを同期する 同じApple Accountを使う2台 iPhone iPad ローカルデータ ローカルデータ 作品記録を保存・表示 作品記録を保存・表示 変更を送受信
変更を送受信 CloudKit 本人のPrivate Database 各端末のローカルデータを、CloudKit経由で同期する。 6
CloudKitの開発環境と本番環境 一つのCloudKitコンテナ アプリがデータを保存・管理する領域 開発用の署名で実行 TestFlight / App Store Development Production
開発・検証用 本番運用用 Public Database / Category Public Database / Category テスト用カテゴリー 本番用カテゴリー 同じコンテナでも、環境が違えばデータは別 7
PrivateとPublicの役割 Public Database Private Database アプリの利用者に共通 利用者ごとに独立 Category / AppConfig
作品カテゴリ・配信設定 利用者A 利用者B 本人の作品記録 本人の作品記録 Project Project 読み取り 利用者A 利用者B 開発環境・本番環境のそれぞれに、PrivateとPublicがある。 8
CHAPTER 02 本番環境の準備
スキーマはDevelopmentで定義 対象 Development Production Record Type・Field 作成・追加 Developmentからデプロイ Record(実データ) 登録・更新
権限に応じて登録・更新 ProductionでRecord Type・Fieldを直接新規定義できない。 ProductionにデプロイしたFieldは、削除・型変更できない。 10
スキーマとレコードは別 Development スキーマ:データの構造 Category Production デプロイ スキーマ:データの構造 Category id・name_jaなどのフィールド /
索引 id・name_jaなどのフィールド / 索引 レコード:実際のデータ レコード:実際のデータ Category 本番用のデータを 例:セーター・帽子 別途登録する スキーマのデプロイでは、レコードはコピーされない 11
ConsoleでDevelopmentに定義 1 1 Developmentを選ぶ 同じコンテナ内の開発環境 2 2 Record Types・Field Categoryの構造を定義する
定義したら、Developmentで テスト用Recordを使って確認 12
変更内容を確認してProductionへ 1 2 Deploy Schema Changes Developmentの左メニュー 2 変更内容を確認 Productionへ反映する型など
3 Deploy スキーマをProductionへ反映 1 3 アプリのリリースとは別の操作 実データは別途登録する 13
配布版から取得・表示を確認 TestFlight/App StoreのアプリはProductionを使う。 Consoleで本番の準備を確認 TestFlightのアプリからカテゴリ・設定を取得 画面や動作への反映を確認 14
CHAPTER 03 端末間同期の確認
事例:アプリ再起動後に変更が表示された 1 2 3 端末Aで編集 端末Bで確認 端末Bのアプリを 再起動 作品記録を変更 変更が見えない
変更が見える 個人の記録を編集した 画面には反映されない 起動し直すと表示された 観察したのは画面の変化。同期の発生時点や原因は未確認。 16
保存はアプリ側、同期の実行時刻はシステム側 ローカルへの保存 SwiftDataのCloudKit自動連携 ModelContext.save()で アップロード・ダウンロードの 明示的に保存できる 実行時刻はシステムが決める 自動保存もある 任意の時刻に強制実行する 公開APIはない
ただし、表示されない理由が同期の遅延とは限らない。 出典:Apple ModelContext・SwiftDataの自動同期・TN3164 17
同期されない ≠ CloudKitの通信エラー TN3164の3分類 確認すること データ表示レイヤ SwiftDataの取得・観測、ModelContext、画面更新 CloudKitの設定 システム側の制限 Container
ID・Entitlements Schema・Development/Production 同期の実行タイミング・ネットワーク バックグラウンド実行・スロットリング 保存・アップロード・ダウンロード・画面反映を切り分ける。 出典:Apple TN3164 18
ログと実データで原因を調べる 調査方法 見るもの Xcode Console Core Data/CloudKit関連のログ・エラー データの値を照合 送信元の保存値 →
CloudKitのRecord → 受信側の保存値 必要ならsysdiagnose 再現直後に取得し、発生時刻を絞って送受信を追う 受信側の値も新しいのに画面が古いなら、 SwiftDataの取得・観測・画面更新を調べる。 出典:Apple TN3164・TN3163 sysdiagnoseの取得・ログの読み方はこちら: WWDC22「Optimize your use of Core Data and CloudKit」 19
PublicとPrivateで異なる取得・同期の仕組み 仕組み Public 何をするか CKQuery 条件に合うRecordを取得 CKQuerySubscription SwiftDataの自動連携 Core Dataミラーリング
条件に合う変更を通知 取得・反映はアプリ側 モデルの保存と 端末間の同期を自動化 Private 対応 対応 対応 対応 非対応 対応 ローカルストアと 双方向 CloudKitを同期 変更確認はポーリング 双方向 公開範囲の違いに加えて、利用できる同期の仕組みも確認する。 出典:Apple CKQuerySubscription・SwiftDataの自動同期・TN3164・WWDC20 20
まとめ:リリース前に確認すること 1 接続先 どのコンテナの、どの環境か 2 本番の準備 3 端末間同期 利用中にも変更が画面へ反映されるか スキーマとPublicの配信データがあるか
リリースの判断に必要な仕組みと挙動を理解しておきたい。 21
参考資料:構造と準備 CloudKitの構造と環境 https://developer.apple.com/icloud/cloudkit/designing/ SwiftDataの自動同期 https://developer.apple.com/documentation/swiftdata/syncing-model-data-across-apersons-devices 本番へのスキーマのデプロイ https://developer.apple.com/documentation/cloudkit/deploying-an-icloud-container-sschema 22
参考資料:配布と同期 配布時のCloudKit環境 https://developer.apple.com/library/archive/documentation/General/Conceptual/ iCloudDesignGuide/DesigningforCloudKit/DesigningforCloudKit.html 同期の調査:TN3164 https://developer.apple.com/documentation/technotes/tn3164-debugging-thesynchronization-of-nspersistentcloudkitcontainer Publicでの変更通知:CKQuerySubscription https://developer.apple.com/documentation/cloudkit/ckquerysubscription 23
参考資料: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
ありがとうございました