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
SwiftDataと連携したWidgetを作ってみた
Search
Ryu-nakayama
February 28, 2025
Programming
240
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SwiftDataと連携したWidgetを作ってみた
mobile.stmn#10の登壇資料です
Ryu-nakayama
February 28, 2025
More Decks by Ryu-nakayama
See All by Ryu-nakayama
AIに「任せない」という選択
ryunakayama
0
72
iOS機能開発のAI環境と起きた変化
ryunakayama
0
260
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
450
iOSアプリでフロントエンドと仲良くする
ryunakayama
0
170
「ジェン文字」使ってますか?
ryunakayama
0
97
Health Kit × Foundation Models でAIコーチを作ってみた
ryunakayama
0
380
iOSの画面の状態のアレコレを調査してみた
ryunakayama
0
130
作文ツール(Writing Tools)をアプリから制御する
ryunakayama
0
82
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
340
Other Decks in Programming
See All in Programming
Security issues being discussed on Web Platforms
petamoriken
0
940
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
210
AHC070解法紹介
eijirou
0
120
Heart of Swift Concurrency
koher
0
760
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
4
2.8k
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
140
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
120
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
260
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
320
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
180
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
240
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
170
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5.2k
Fireside Chat
paigeccino
43
4k
Typedesign – Prime Four
hannesfritz
42
3.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Google's AI Overviews - The New Search
badams
0
1.6k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
460
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Become a Pro
speakerdeck
PRO
31
6.3k
30 Presentation Tips
portentint
PRO
1
400
Chasing Engaging Ingredients in Design
codingconduct
0
310
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Transcript
SwiftDataと連携したWidgetを 作ってみた iOSアプリ開発グループ 中山 龍 2025年2月28日 mobile.stmn #10
自己紹介 中山 龍 (なかやま りゅう) • 株式会社kubell ◦ 新卒2年目のiOSエンジニア(22) ◦
「Chatwork」アプリの開発を担当 • 愛知県在住 ◦ @ryu_develop mobile.stmnは#8まですべて登壇させて いただいていたが、#9が忘年会と被った ため皆勤賞が途絶えてしまいました
注意事項 • 本スライドの内容や登場するコードは趣味で作成しているものであ り、業務で扱っているプログラム・プロダクト・開発環境とは一切 関係ありません • 「試しに触ってみた」という趣旨の紹介であり、必ずしもベストプ ラクティスを紹介しているわけではありません • スライド・GitHubに掲載しているコードも完璧な動作を保証するも
のではありません
目指す成果物
最終的な成果物 5 • iOSのWidget • SwiftDataでアプリ本体とデータを共有することができる • WidgetのViewの中でSwiftDataを使うことができる アプリ本体 Widget
Widgetとは?
Widgetとは • ホーム画面やロック画面に配置することができるアプリの機能 • 最新の情報を一目で簡単に確認したり、アプリを開かずに操作することができる 7 Widgetを配置したホーム画面 Widget追加時の画面 参考: iPhoneでウィジェットを追加する/編集する/削除する
Widgetとは 〜ざっくり実装方法〜 1. iOSアプリを作成する 2. アプリにWidget Extensionを追加する 3. Widgetの見た目や処理を実装する(SwiftUI) 8
Widget Extensionを追加するときの画面
Widgetとは 〜ざっくり実装方法〜 1. iOSアプリを作成する 2. アプリにWidget Extensionを追加する 3. Widgetの見た目や処理を実装する(SwiftUI) 9
Widget Extensionを追加するときの画面 Widgetはアプリ本体ではなく、 Extensionの実装なので、通常のま まではアプリ本体の SwiftDataにはアクセスできない ↓
Widgetとは 〜ざっくり実装方法〜 1. iOSアプリを作成する 2. アプリにWidget Extensionを追加する 3. Widgetの見た目や処理を実装する(SwiftUI) 10
Widget Extensionを追加するときの画面 Widgetはアプリ本体ではなく、Extensionの実装なので、通常の ままではアプリ本体のSwiftDataにはアクセスできない ↓ WidgetからSwiftDataにアクセスできるようにし、アプリと データを共有したWidgetを作成する
Widget Extensionからアプリの SwiftDataにアクセスできるようにする
App Groupsの設定
App Groupsとは • 同じ開発者によって開発されたアプリ同士やExtension間でデータ共有を可能にする仕組 み • Capabilities(アプリが特定の機能やサービスにアクセスするための許可設定)の一種 • App Groupsを設定することで、アプリ本体とWidget
Extension間でデータの共有が可能 になる 13
App Groupsを設定してみる(アプリ本体) Xcode上でxcodeprojファイル ↓ TARGETSでアプリ本体 ↓ Signing & Capabilities ↓
+ Capability ↓ App Groupsを選択 14 1.アプリ本体に設定をする 追加された “App Groups” の欄で「+」を選択 ↓ ↓ 任意の名前を入力し「OK」を選択
App Groupsを設定してみる(Widget側) Xcode上でxcodeprojファイル ↓ TARGETSでWidget ↓ Signing & Capabilities ↓
+ Capability ↓ App Groupsを選択 15 2.Widgetに設定をする 追加された “App Groups” の欄で「+」を選択 ↓ ↓ アプリ本体に設定したものと同じ名前を入力し 「OK」を選択
@ModelのTarget Membership設定
@ModelのTarget Membership設定 @Modelを定義しているファイルの Target Membership にWidgetExtensionを追加する - Target Membership: ファイルがどのターゲット(App,
Extension ...)に属するかを決めるもの 17
実際にWidget Extension内で SwiftDataを使う
Widget内でSwiftDataを使う 〜.modelContainer〜 19 Widgetのbody内のViewに対して .modelContainer を付与する - import SwiftData も忘れずにしましょう
SwiftDataItemWidget.swift - SwiftDataItemWidget
Widget内でSwiftDataを使う 〜@Query〜 20 SwiftDataItemWidget.swift - SwiftDataItemWidgetEntryView 通常と同じようにView内で @Queryを使用して [Item] を取り出し、View内で利用する
Widget内でSwiftDataを使う 〜@Query〜 21 SwiftDataItemWidget.swift - SwiftDataItemWidgetEntryView 通常と同じようにView内で @Queryを使用して [Item] を取り出し、View内で利用する
🎉 Widget内でSwiftDataが使えるようになりました 🎉
注意点
注意点 23 Widget内でSwiftDataの値を使うことはできるようになりましたが、アプリ側で値を更新しても、それ に合わせてWidgetが更新されるわけではありません - SwiftDataの値は変わってもWidgetの表示の更新は起きていないため - WidgetCenter.shared.reloadAllTimelines() を使用することで、Widgetのタイムラインの再読込 を指示することができる
- Widgetを更新することに関しては気にすべき点もあるので注意すること - ウィジェットを最新の状態に維持 - > ウィジェットを再読み込みすると、追加のネットワーク接続や処理が必要になるため、システムのリソース が消費され、バッテリーが消耗します。このようなパフォーマンスへの影響を軽減し、バッテリーの駆動時間 を一日中維持するには、リクエストする更新の頻度と回数を必要な分だけに制限します。 - > ユーザーが頻繁に確認するウィジェットの場合、通常、1日単位のバジェットに40〜70回の更新が 含まれます
働くをもっと楽しく、創造的に 24