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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kanta Oikawa
August 20, 2026
Technology
260
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
210
もう怖くないバックグラウンド処理 Background Tasks のすべて - Hakodate.swift #1
kantacky
0
610
ヘッドジェスチャを検知して Vibe Cooking - iOSDC Japan 2025
kantacky
0
730
Other Decks in Technology
See All in Technology
試験勉強はGrokBotでやれ
maigo999
0
110
GCASアップデート(202607-202610)
techniczna
1
210
Copilot Coworkで「みのるん式」やってみた
minorun365
PRO
2
1.6k
公共システムAdventCalendar2026
toru_kubota
0
270
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
200
Building Audio Plugin Ecosystem for Android in 2026
atsushieno
2
160
ゼロから作るWebアプリの新定番!?Amplify Gen 2 × AWS Blocksで実現する「開発速度とRDBの柔軟性のいいとこ取り」
amixedcolor
1
160
SLOを阻む不安
sraku2159
0
230
ライフワーク「猫でもわかるDirectConnect」
kentapapa
0
240
Context Ontology Accelerator 入門 (業務データの意味を、AI エージェントに渡す)
inariku
PRO
3
470
生成AI時代のIAMのマニアックな話
takuros
6
2.6k
企画からFlutter実装まで、1つの機能を一貫して開発したプロセスと成果物
khiroyuki1003
1
160
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
660
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
300
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
370
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
330
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
The Invisible Side of Design
smashingmag
301
52k
The Curious Case for Waylosing
cassininazir
1
610
Designing Experiences People Love
moore
143
24k
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の共存