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
2027年のMetricKit
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kanta Oikawa
August 20, 2026
Technology
240
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
170
もう怖くないバックグラウンド処理 Background Tasks のすべて - Hakodate.swift #1
kantacky
0
520
ヘッドジェスチャを検知して Vibe Cooking - iOSDC Japan 2025
kantacky
0
710
Other Decks in Technology
See All in Technology
AIに任せた品質は、誰が見立てるのか - AI時代のテストマネジメント
nakanao
3
3.2k
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
1
1k
AI臭い文章とは何なのか
nasuvitz
21
27k
AWS App Runnerから Cloudflare Workersへ移行した話
ryota09
0
110
HacobuにおけるFDEとは/登壇資料(戸井田 裕貴)
hacobu
PRO
1
140
Mastering Agentic Development: Harness Engineering for Effective Coding Agents
konippi
3
600
JSONataとAWS Step Functionsで目指すRuntimelessな世界
mu7889yoon
1
540
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
480
Amazon Bedrock Agents ClassicからAmazon Bedrock AgentCoreへ移行した際、ガードレール設定が2箇所に割れた話
matsunobu
0
140
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
800
AIは推し活である。
kurazuuuuuu
2
990
メルカリにおけるAI時代の高速プロトタイピング基盤「Arca」
ryotarai
16
13k
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.3k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
360
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
How to Ace a Technical Interview
jacobian
281
24k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Color Theory Basics | Prateek | Gurzu
gurzu
1
480
Design in an AI World
tapps
1
340
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
250
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
RailsConf 2023
tenderlove
30
1.6k
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の共存