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
910
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
総計30万DLの個人開発Flutterアプリを支えるiOSウィジェット機能
2020年2月に時間割アプリ「Fulltan」をリリースしました。本セッションでは、Fulltanの主要機能の1つであるiOSウィジェットについてお話しします。
CyberAgent
PRO
June 03, 2024
More Decks by CyberAgent
See All by CyberAgent
”AIを使う” から ”AIに任せる” へ ─ 開発プロセスを再設計してAIを組織標準にするまで
cyberagentdevelopers
PRO
1
140
Databricks 導入から Genie 活用まで、全部やった話
cyberagentdevelopers
PRO
0
830
専任DEゼロからの データ基盤構築 - Databricks x IaC x AIで 進める「データの民主化」-
cyberagentdevelopers
PRO
0
500
「エンジニア進化論」2028年の開発完全自動化、エンジニアはどう進化するか
cyberagentdevelopers
PRO
9
8.9k
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
310
Local LLM Meetup #1 Opening
cyberagentdevelopers
PRO
0
430
LocalLLMで機密データを匿名化したい
cyberagentdevelopers
PRO
1
460
Vibe Fine-Tuning Version 2 — RunPod SSH で安く学習してみた
cyberagentdevelopers
PRO
0
430
2026年度新卒技術研修 サイバーエージェントのデータベース 活用事例とパフォーマンス調査入門
cyberagentdevelopers
PRO
10
12k
Other Decks in Programming
See All in Programming
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
270
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
180
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
120
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
530
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
340
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
200
What's New in Android 2026
veronikapj
0
110
yield再入門 #phpcon
o0h
PRO
0
700
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
1.7k
Foundation Models frameworkで画像分析
ryodeveloper
1
130
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
490
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
400
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Typedesign – Prime Four
hannesfritz
42
3.1k
Claude Code のすすめ
schroneko
67
230k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
660
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
620
Believing is Seeing
oripsolob
1
170
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
340
Java REST API Framework Comparison - PWX 2021
mraible
34
9.5k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
380
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Paper Plane
katiecoart
PRO
2
52k
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時間後に 即座にタイムラインのリロードを要求 ・能動的なリロードはウィジェットに表示する授業情報 (科目名・教室・色)の変更があった時のみに要求
ウィジェットの予算は計画的に使おう👛 まとめ
ご清聴ありがとうございました!