Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
総計30万DLの個人開発Flutterアプリを支えるiOSウィジェット機能
Search
CyberAgent
PRO
June 03, 2024
Programming
0
52
総計30万DLの個人開発Flutterアプリを支えるiOSウィジェット機能
2020年2月に時間割アプリ「Fulltan」をリリースしました。本セッションでは、Fulltanの主要機能の1つであるiOSウィジェットについてお話しします。
CyberAgent
PRO
June 03, 2024
Tweet
Share
More Decks by CyberAgent
See All by CyberAgent
学園アイドルマスターの アイドルをより輝かせる ライティング手法
cyberagentdevelopers
PRO
3
12k
スマートフォンGPUの特性を解析! 社内で実施予定のGPUパフォーマンスチューニング研修を紹介します!
cyberagentdevelopers
PRO
1
140
NAB Show 2024 動画技術関連レポート/ NAB Show 2024 Report
cyberagentdevelopers
PRO
3
420
CI/CDのススメ(サイバーエージェント新卒研修2024)
cyberagentdevelopers
PRO
1
99
Kubernetesのススメ(サイバーエージェント新卒研修2024)
cyberagentdevelopers
PRO
2
130
セキュリティ研修 〜テクニカルパート〜(サイバーエージェント新卒研修2024)
cyberagentdevelopers
PRO
5
1.8k
セキュリティ研修 〜マネジメントパート〜(サイバーエージェント新卒研修2024)
cyberagentdevelopers
PRO
3
400
Swift Student Challenge Distinguished Winnerに選出していただくまで
cyberagentdevelopers
PRO
1
45
Swiftの単体テスト事情
cyberagentdevelopers
PRO
0
35
Other Decks in Programming
See All in Programming
CSC307 Lecture 03
javiergs
PRO
0
160
Fluent UI Blazor 最新Update
tomokusaba
1
160
【暫定版】App Intentsの新機能から見るApple Intelligenceと近い未来
ikejun360
0
130
宇宙一早くAmazon Bedrock 生成AIアプリ開発入門の献本が届いたので 感想をしみじみ語る
ymd65536
1
220
Kotlin Collection関数をマスター
masayukisuda
0
3.8k
Kotlin Coroutinesで共有リソースに正しくアクセスする
moriatsushi
5
2.5k
The Hotwire Landscape After Turbo 8 @ Brighton Ruby 2024
marcoroth
2
230
【Gemini本発売記念】npaka による マルチモーダルとローカルLLMの現在と未来
npaka
3
1.2k
visionOSアプリを作るなら今がチャンス!
risksrb
0
110
Swift Charts: Vectorized and function plots
yamakentoc
0
650
凝集性から考えるLaravelのmiddleware、routingに書くか? Policyに書くか?
newnomad
1
170
技術サポートでよく見かけるパターンと便利な活用方法
tamai_63
0
550
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
113
6.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
222
21k
Building a Scalable Design System with Sketch
lauravandoore
457
32k
4 Signs Your Business is Dying
shpigford
177
21k
In The Pink: A Labor of Love
frogandcode
139
22k
Infographics Made Easy
chrislema
238
18k
Visualization
eitanlees
137
14k
10 Git Anti Patterns You Should be Aware of
lemiorhan
651
58k
For a Future-Friendly Web
brad_frost
173
9.1k
Six Lessons from altMBA
skipperchong
22
3.2k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
19
7.1k
Transcript
総計30万DLの個人開発Flutterアプリを支える iOSウィジェット機能 CA.swift #20 株式会社タップル Ogata Hiroki
緒方 裕樹 / Ogata Hiroki CyberAgent 24卒入社 タップルのiOSエンジニア iOS Flutter
寿司 温泉 ゲーム :@icoriha
話すこと ・iOSのホームウィジェットの更新のしくみ ・自作アプリのウィジェットの実装のイマイチなところ ・↑その改善案 今回話さないこと ・ウィジェット導入の具体的な手順 ・Flutter側からネイティブのコードを呼ぶ方法
題材アプリ
個人制作の時間割アプリ 2020年2月リリース 2024年春 30万DL 突破!
🤨?
None
🍺🤔 Flutter + 部分的にネイティブという構成
🍺 =
ViewModel Model View View 構成 Flutter側から ネイティブコードを呼ぶには... Method Channelという機能を使います →今回は解説しません
WidgetKit側 本体アプリ側
画像引用元: https://developer.apple.com/jp/documentation/widgetkit/keeping-a-widget-up-to-date/ 公式ドキュメントより引用 前提 ・本体アプリの状態をウィジェットに リアルタイムに反映させるのは難しい ・ウィジェットの表示スケジュールは タイムライン※で管理されているため ※ウィジェットに表示される 一連の内容更新を管理するための概念
TimelineProvider プロトコル ・WidgetKitの要求を受けTimelineオブジェクトを返す(getTimeline)プロトコル WidgetCenter クラス ・ウィジェットのtimelineをリロードするために使用される(他の役割もある) 関連用語と主な役割 TimelineEntry プロトコル ・entriesの各要素はこれに準拠させる必要がある。
日時とその日時にウィジェットに表示させたい内容の情報を含む。 Timeline クラス ・直近で表示させる一連のウィジェットの内容(entries)と、 それらの表示完了後、次にどのタイミングでタイムラインを 再リロードさせたいか(policy: TimelineReloadPolicy)を持つ。
タイムラインのリロードには2種類ある 🕰Timelineクラスのpolicyに基づく計画的なリロード ・予測が容易なウィジェットの更新に使用 ・例:一定時間毎にAPIを叩いて天気情報を取得して表示 🎇WidgetCenterのreload系メソッド※による能動的なリロード ・突発的なアプリの更新によるウィジェットの更新に利用 ・例:ユーザーの操作内容を反映 ※ WidgetCenter.shared.reloadAllTimelines() など
計画的リロードで更新間隔10秒とかで定期更新していけば ウィジェットを常に最新の状態にキープできるのでは🤔
最終的にウィジェットの更新タイミングの決定権はシステムが持つ。 バッテリーなどのリソースを適切に管理するために、 各ウィジェットにはそれぞれ24時間単位の枠で「予算」が設定されている。 🚨無計画なタイムラインのリロードに注意 ・予算はタイムラインのリロードにより消費される ・予算がなくなると場合はその枠の間リロードが制限される →ウィジェットが更新されない現象につながる
今から見せるコードには改善点があります
自作アプリの例(一部改変) 本アプリでは授業情報(科目名・教室・出席記録など)の更新時に能動的な更新を要求している
☔ユーザーからの不具合報告 曜日が切り替わってもすぐにウィジェットが更新されない
考えられる原因 本アプリでは授業情報(科目名・教室・出席記録など)の更新時に能動的な更新を要求している ↑5時間後に タイムラインのリロードを要求 ↓ウィジェットには表示しない情報
無計画なタイムラインのリロードで 予算を消費してしまっている可能性が高い 💸
改善案 ・計画的なリロードは5時間おきではなく 曜日の変わるタイミングのみに要求 ↑この先5時間分のウィジェット内容を生成 ↑5時間後に 即座にタイムラインのリロードを要求 ・能動的なリロードはウィジェットに表示する授業情報 (科目名・教室・色)の変更があった時のみに要求
ウィジェットの予算は計画的に使おう👛 まとめ
ご清聴ありがとうございました!