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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
miharu
October 31, 2026
Programming
30
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
38
『SwiftUIによるカスタムビジュアルエフェクトの作成』を真似して作ってみた
mnaruse
2
320
visionOS入門セッションまとめ
mnaruse
2
1.8k
WWDC23 現地参加報告(体験記編)
mnaruse
1
470
新年度なので新しく取り組みたいこと:iOSアプリの 隣の領域を覗いてみる
mnaruse
0
380
WWDC20: What's new in location の要約
mnaruse
2
600
Other Decks in Programming
See All in Programming
Event is what happens
moro
2
1.9k
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
5
1.2k
最近”作らせてる” ローカルAIアプリの話
akit37
0
510
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
240
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
120
golang-bob.pdf
iwatsukayura
0
150
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
200
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
200
R8 の設定見直しでアプリサイズ削減
andpad
0
230
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
230
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
230
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.9k
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
590
First, design no harm
axbom
PRO
2
1.4k
Docker and Python
trallard
47
4.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Bash Introduction
62gerente
615
220k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
310
Mobile First: as difficult as doing things right
swwweet
225
10k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
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
ありがとうございました