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
2027年のMetricKit
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kanta Oikawa
August 20, 2026
Technology
57
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2027年のMetricKit
Kanta Oikawa
August 20, 2026
More Decks by Kanta Oikawa
See All by Kanta Oikawa
はじめてのCoreSpotlight
kantacky
0
120
もう怖くないバックグラウンド処理 Background Tasks のすべて - Hakodate.swift #1
kantacky
0
450
ヘッドジェスチャを検知して Vibe Cooking - iOSDC Japan 2025
kantacky
0
660
Other Decks in Technology
See All in Technology
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
事業価値と Engineering 2026年度版
recruitengineers
PRO
51
25k
LanceDB入門
mocobeta
9
600
Adding Right-to-Left support to your web application with CSS logical properties — Lessons from Redmine
vividtone
0
130
小粒でもパワフルなJS Runtime Antjsについて
comamoca
0
100
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.7k
Goでデータパイプラインを作ろう
sansantech
PRO
1
510
Apache Icebergインフラストラクチャ:ストレージ・カタログ・エンジンの選択肢とClouderaプラットフォームでの実装
tsugiyama
0
120
ハーレムエンジニアリング
kazuma777777
0
180
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
その“隠したつもり”が命取り ── 自前と平文をやめて「正解」に委ねる
kuroneko13
0
130
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.6k
Featured
See All Featured
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
210
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
780
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Fireside Chat
paigeccino
42
4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Site-Speed That Sticks
csswizardry
13
1.4k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Bash Introduction
62gerente
615
220k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
220
WCS-LA-2024
lcolladotor
0
800
Transcript
2027年のMetricKit potatotips #96 Kanta Oikawa - 2026/08/20
2 自己紹介 Kanta Oikawa - かんたっきー • 公立はこだて未来大学 修士2年 •
修論を書き終えれば来年からiOSエンジニア • Twitter : @kanta̲cky
3 MetricKit OSが集計するメトリクス/診断をレポートとして受け取る
4 MetricKit iOS 13 - iOS 26 • MXMetricManagerSubscriber を実装
• デリゲートメソッドでレポート受け取る • メトリクス MXMetricPayload • 起動時間、ハング、CPU/GPU/メモリ/ディスク書き込み/ネットワーク転送量、電力 • 独自区間のメトリクス MXSignpostMetric • 診断 MXDiagnosticPayload(iOS 14+) • クラッシュ/ハング/ディスク書き込み例外/CPU例外、コールスタック
5 MetricKit iOS 13 - iOS 26 class AppMetrics: NSObject,
MXMetricManagerSubscriber { func receiveReports() { let manager = MXMetricManager.shared manager.add(self) } func pauseReports() { let manager = MXMetricManager.shared manager.remove(self) } // Receive daily metrics. func didReceive(_ payloads: [MXMetricPayload]) { // Process metrics. } } // Receive diagnostics immediately when available. func didReceive(_ payloads: [MXDiagnosticPayload]) { // Process diagnostics. }
6 MetricKit iOS 27+ • AsyncStreamでレポートを受け取る • メトリクス MetricReport •
診断 DiagnosticReport • どちらのレポートもCodableに準拠
7 MetricKit iOS 27+ import MetricKit let manager = MetricManager()
Task { for await report in manager.metricReports { process(report) } } Task { for await report in manager.diagnosticReports { process(report) } }
8 StateReporting 状態遷移の報告を受けてメトリクスを状態ごとに集計する
9 StateReporting iOS 27+ • アプリ全体のスクロールヒッチが 15ms/s • タブAのスクロールヒッチは 1ms/s、タブBのスクロールヒッチは
71ms/s • タブBの修正が必要であることがわかる
10 StateReporting ReportableMetadata import StateReporting @ReportableMetadata struct GraphicsSettings { let
graphicsQuality: String let engineVersion: String @ReportableMetadataKey("api") let graphicsAPIName: String @ReportableMetadataIgnored let localCacheID: String } @ReportableMetadata struct GameplayVolatileMetadata { let playerHealth: Int }
11 StateReporting 状態遷移の報告とメタデータのアップデート let gameplayReporter = StateReporter.reporter( for: "com.mygame.gameplay", stableMetadata:
GraphicsSettings.self, volatileMetadata: GameplayVolatileMetadata.self ) gameplayReporter.reportTransition( to: "Playing", stableMetadata: GraphicsSettings( graphicsQuality: "High", engineVersion: "1.2.3" ), volatileMetadata: GameplayVolatileMetadata(playerHealth: 100) ) gameplayReporter.reportVolatileMetadataUpdate( GameplayVolatileMetadata(playerHealth: 75) )
12 デバッグ • Xcode 27から実機でアプリを起動 • XcodeのDebug > MetricKit >
Simulate MetricKit Payloads • ダミーのレポートを受け取ることができる • 本番と同じレポートは取得できない
13 デバッグ Xcode 26 と Xcode 27 の Debug メニュー
14 押さえておきたいポイント • レポートを取りこぼさないようにアプリ起動直後に購読を開始する • 受信タイミングはシステム依存 • デバッグには実機が必要
15 他のツールとの比較 Instruments Xcode Organizer MetricKit Firebase Performance Datadog RUM
計測できる場所 開発者端末 ユーザー端末 ユーザー端末 ユーザー端末 ユーザー端末 データソース OS OS OS SDK SDK 対象ユーザー 開発者自身 解析を共有をON 解析を共有をON すべて すべて リアルタイム リアルタイム リアルタイム性 即時 数日遅れ メトリクス=日次 診断=即時 粒度 関数・スレッド 集計 端末・日・状態 トレース・画面 セッション わかること なぜ遅いか 遅いという事実 どの状態で遅いか どの処理が遅いか 誰がいつ遅いか 無料 従量(高い) 有り 有り コスト 無料 無料 無料 送信先は自前 オーバーヘッド 有り ゼロ ほぼゼロ
16 References • MetricKit | Apple Developer Documentation • StateReporting
| Apple Developer Documentation • Meet the new MetricKit - WWDC26
17 新旧MetricKitの共存