Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iOS 14 でのMetricKitの新機能について / New function of MetricKit on iOS 14

Sansan
November 06, 2020

iOS 14 でのMetricKitの新機能について / New function of MetricKit on iOS 14

■イベント
【iOSエンジニア向け勉強会】アプリ開発に強みを持つ3社がiOS14の開発事情を語る
https://sansan.connpass.com/event/191775/

■登壇概要
タイトル:iOS 14 でのMetricKitの新機能について
登壇者:Sansan事業部 プロダクト開発部 多鹿 豊

▼Sansan Builders Blog
https://buildersbox.corp-sansan.com/

Sansan

November 06, 2020
Tweet

More Decks by Sansan

Other Decks in Technology

Transcript

  1. iOS 14 での
    MetricKitの新機能について
    1

    View Slide

  2. - Twitter
    - @Yut_Taji
    - GitHub
    - @taji-taji
    2

    View Slide

  3. - これまでの MetricKit について理解する
    - iOS 14 で追加された MetricKit の新機能の概要を把握する
    ゴール
    3

    View Slide

  4. MetricKitとは?
    4

    View Slide

  5. - 各ユーザ環境で実行されるアプリのパフォーマンスに関するデータを収
    集するフレームワーク
    MetricKitとは?
    5

    View Slide

  6. - 各ユーザ環境で実行されるアプリのパフォーマンスに関するデータを収
    集するフレームワーク
    - アプリのパフォーマンス向上を目指す上で役に立つフレームワーク
    MetricKitとは?
    6

    View Slide

  7. - 各ユーザ環境で実行されるアプリのパフォーマンスに関するデータを収
    集するフレームワーク
    - アプリのパフォーマンス向上を目指す上で役に立つフレームワーク
    - WWDC 2019 にて発表
    MetricKitとは?
    7

    View Slide

  8. - 各ユーザ環境で実行されるアプリのパフォーマンスに関するデータを収
    集するフレームワーク
    - アプリのパフォーマンス向上を目指す上で役に立つフレームワーク
    - WWDC 2019 にて発表
    - iOS 13 以降で使用可能
    MetricKitとは?
    8

    View Slide

  9. 開発プロセスとツール
    9

    View Slide

  10. 開発プロセスとツール
    10

    View Slide

  11. 開発プロセスとツール
    Development
    and
    Testing
    Beta
    Public
    Release
    11

    View Slide

  12. 開発プロセスとツール
    Development
    and
    Testing
    Beta
    Public
    Release
    Instruments
    XCTest Metrics MetricKit
    Xcode Metrics
    Organizer
    12

    View Slide

  13. 開発プロセスとツール
    Development
    and
    Testing
    Beta
    Public
    Release
    MetricKit
    XCTest Metrics
    Instruments Xcode Metrics
    Organizer
    実際のユーザ端末のデータを収集
    13

    View Slide

  14. これまでの MetricKit のおさらい
    14

    View Slide

  15. 実装方法
    15

    View Slide

  16. 実装方法
    AppDelegate に実装する例
    16

    View Slide

  17. 実装方法
    17

    View Slide

  18. 実装方法
    18

    View Slide

  19. 実装方法
    19

    View Slide

  20. 実装方法
    20

    View Slide

  21. データはいつ収集されるか?
    21

    View Slide

  22. データはいつ収集されるか?
    最大で1日に1回、過去24時間のデータを MXMetricPayload に集約する
    22

    View Slide

  23. 実装方法
    23

    View Slide

  24. どんなデータが取れるのか?
    24

    View Slide

  25. - Battery
    どんなデータが取れるのか?(iOS 13では)
    25
    - Performance

    View Slide

  26. - Battery
    - ネットワークの接続状況
    > シグナルバーの本数
    - ディスプレイの輝度
    > Average pixel luminance: APL
    - CPU, GPUの使用状況
    - 位置情報追跡の使用状況
    - ネットワーク転送
    > セルラー, Wifiでのアップロード、
    ダウンロード量
    どんなデータが取れるのか?(iOS 13では)
    26
    - Performance
    - ハングが起こった時間
    - ディスクの書き込み総量
    - アプリ起動
    > 起動・復帰
    - メモリ使用量

    View Slide

  27. どんなデータが取れるのか?(iOS 13では)
    - JSONにするとこんな感じ
    - 一部ですが、、
    27

    View Slide

  28. どんなデータが取れるのか?(iOS 13では)
    参照:https://developer.apple.com/documentation/metrickit/mxmetricpayload
    28

    View Slide

  29. もう少し
    実装について
    29

    View Slide

  30. 実装方法
    30

    View Slide

  31. - 何を実装する?
    func didReceive(_ payloads: [MXMetricPayload])
    31

    View Slide

  32. - 何を実装する?
    - リリース後の実際の収集データを参照できるようにしたい
    func didReceive(_ payloads: [MXMetricPayload])
    32

    View Slide

  33. - 何を実装する?
    - リリース後の実際の収集データを参照できるようにしたい
    - 自社サーバーや3rdパーティ製ログ収集サービスに MXMetricPayload の内容
    を送信する
    func didReceive(_ payloads: [MXMetricPayload])
    33

    View Slide

  34. - 何を実装する?
    - リリース後の実際の収集データを参照できるようにしたい
    - 自社サーバーや3rdパーティ製ログ収集サービスに MXMetricPayload の内容
    を送信する
    - 送信データの整形
    func didReceive(_ payloads: [MXMetricPayload])
    34

    View Slide

  35. - 何を実装する?
    - リリース後の実際の収集データを参照できるようにしたい
    - 自社サーバーや3rdパーティ製ログ収集サービスに MXMetricPayload の内容
    を送信する
    - 送信データの整形
    - MXMetricPayload や MXMetric には func jsonRepresentation() -> Data とい
    うインスタンスメソッドが生えている
    func didReceive(_ payloads: [MXMetricPayload])
    35

    View Slide

  36. - 何を実装する?
    - リリース後の実際の収集データを参照できるようにしたい
    - 自社サーバーや3rdパーティ製ログ収集サービスに MXMetricPayload の内容
    を送信する
    - 送信データの整形
    - MXMetricPayload や MXMetric には func jsonRepresentation() -> Data とい
    うインスタンスメソッドが生えている
    - これを使用するとサーバーに送る際のデータ整形が楽
    func didReceive(_ payloads: [MXMetricPayload])
    36

    View Slide

  37. - 何を実装する?
    - リリース後の実際の収集データを参照できるようにしたい
    - 自社サーバーや3rdパーティ製ログ収集サービスに MXMetricPayload の内容
    を送信する
    - 送信データの整形
    - MXMetricPayload や MXMetric には func jsonRepresentation() -> Data とい
    うインスタンスメソッドが生えている
    - これを使用するとサーバーに送る際のデータ整形が楽
    func didReceive(_ payloads: [MXMetricPayload])
    37

    View Slide

  38. - 何を実装する?
    - リリース後の実際の収集データを参照できるようにしたい
    - 自社サーバーや3rdパーティ製ログ収集サービスに MXMetricPayload の内容
    を送信する
    - 送信データの整形
    - MXMetricPayload や MXMetric には func jsonRepresentation() -> Data とい
    うインスタンスメソッドが生えている
    - これを使用するとサーバーに送る際のデータ整形が楽
    func didReceive(_ payloads: [MXMetricPayload])
    38

    View Slide

  39. - デバッグ
    func didReceive(_ payloads: [MXMetricPayload])
    39

    View Slide

  40. - デバッグ
    - Xcodeの 「Debug > Simulate MetricKit Payloads」
    func didReceive(_ payloads: [MXMetricPayload])
    40

    View Slide

  41. - デバッグ
    - Xcodeの 「Debug > Simulate MetricKit Payloads」
    - 実機をつないで Run する必要がある
    func didReceive(_ payloads: [MXMetricPayload])
    41

    View Slide

  42. - デバッグ
    - Xcodeの 「Debug > Simulate MetricKit Payloads」
    - 実機をつないで Run する必要がある
    - 実行すると didReceive メソッドが呼ばれ、ダミーの
    データを受け取れる
    func didReceive(_ payloads: [MXMetricPayload])
    42

    View Slide

  43. iOS 14 での新機能
    43

    View Slide

  44. 新しいメトリクスの追加
    44

    View Slide

  45. - Battery
    - ネットワークの接続状況
    > シグナルバーの本数
    - ディスプレイの輝度
    > Average pixel luminance: APL
    - CPU, GPUの使用状況
    - 位置情報追跡の使用状況
    - ネットワーク転送
    > セルラー, Wifiでのアップロード、ダウンロード量
    【再掲】どんなデータが取れるのか?(iOS 13では)
    45

    View Slide

  46. - Performance
    - ハングが起こった時間
    - ディスクの書き込み総量
    - アプリ起動
    > 起動・復帰
    - メモリ使用量
    【再掲】どんなデータが取れるのか?(iOS 13では)
    46

    View Slide

  47. CPU命令数
    47

    View Slide

  48. - iOS 13 では CPU時間のみ集計されていた
    CPU命令数
    48

    View Slide

  49. - iOS 13 では CPU時間のみ集計されていた
    - CPU時間はクロック周波数等に依存するデータなので、正確に状況を把
    握することが困難
    CPU命令数
    49

    View Slide

  50. - iOS 13 では CPU時間のみ集計されていた
    - CPU時間はクロック周波数等に依存するデータなので、正確に状況を把
    握することが困難
    - それらに依存しないCPU命令数を追加
    CPU命令数
    50

    View Slide

  51. - iOS 13 では CPU時間のみ集計されていた
    - CPU時間はクロック周波数等に依存するデータなので、正確に状況を把
    握することが困難
    - それらに依存しないCPU命令数を追加
    - より正確に状況を把握できる
    CPU命令数
    51

    View Slide

  52. スクロールヒッチ率
    52

    View Slide

  53. スクロールヒッチ率
    - スクロールヒッチ
    53

    View Slide

  54. - スクロールヒッチ
    - スクロールが引っかかる
    - スクロール時のフレーム落ち
    スクロールヒッチ率
    参照:https://developer.apple.com/videos/play/wwdc2020/10077
    54

    View Slide

  55. - スクロールヒッチ
    - スクロールが引っかかる
    - スクロール時のフレーム落ち
    - スクロールヒッチ時間
    - スクロールヒッチが発生した時間(ms)
    スクロールヒッチ率
    参照:https://developer.apple.com/videos/play/wwdc2020/10077
    55

    View Slide

  56. - スクロールヒッチ
    - スクロールが引っかかる
    - スクロール時のフレーム落ち
    - スクロールヒッチ時間
    - スクロールヒッチが発生した時間(ms)
    - スクロールヒッチ率
    - 1秒あたりのスクロールヒッチ時間
    スクロールヒッチ率
    参照:https://developer.apple.com/videos/play/wwdc2020/10077
    56

    View Slide

  57. - スクロールヒッチ
    - スクロールが引っかかる
    - スクロール時のフレーム落ち
    - スクロールヒッチ時間
    - スクロールヒッチが発生した時間(ms)
    - スクロールヒッチ率
    - 1秒あたりのスクロールヒッチ時間
    スクロールヒッチ率
    参照:https://developer.apple.com/videos/play/wwdc2020/10077
    57

    View Slide

  58. アプリケーション終了・強制終了の理由と発生回数
    58

    View Slide

  59. アプリケーション終了・強制終了の理由と発生回数
    参照:https://developer.apple.com/videos/play/wwdc2020/10078
    59

    View Slide

  60. MetricKit Diagnostics
    診断APIの追加
    60

    View Slide

  61. - 次の診断データを収集
    MetricKit Diagnostics
    61

    View Slide

  62. - 次の診断データを収集
    - ハング
    > ハングが発生した時間
    MetricKit Diagnostics
    62

    View Slide

  63. - 次の診断データを収集
    - ハング
    > ハングが発生した時間
    - クラッシュ
    MetricKit Diagnostics
    63

    View Slide

  64. - 次の診断データを収集
    - ハング
    > ハングが発生した時間
    - クラッシュ
    - ディスク書き込み例外処理
    > 書き込み量
    MetricKit Diagnostics
    64

    View Slide

  65. - 次の診断データを収集
    - ハング
    > ハングが発生した時間
    - クラッシュ
    - ディスク書き込み例外処理
    > 書き込み量
    - CPU例外処理
    > CPU時間
    > 高いCPU使用率がサンプリングされた合計時間
    MetricKit Diagnostics
    65

    View Slide

  66. - それぞれに backtrace が
    CallStackTree の形で提供さ
    れる
    MetricKit Diagnostics
    66

    View Slide

  67. - それぞれに backtrace が
    CallStackTree の形で提供さ
    れる
    - atos コマンド等を使ってシン
    ボル化することで追跡できる
    ようになる
    MetricKit Diagnostics
    67

    View Slide

  68. - MXMetricManagerSubscriber に追加されたデリゲートメソッドを実装
    する
    - MXMetricPayload を受け取る時とほぼ同じ
    MetricKit Diagnostics
    68

    View Slide

  69. まとめ
    69

    View Slide

  70. - MetricKit はリリース後のアプリのパフォーマンスに関して、実際のユー
    ザー環境でのメトリクスを収集できるツール
    まとめ
    70

    View Slide

  71. - MetricKit はリリース後のアプリのパフォーマンスに関して、実際のユー
    ザー環境でのメトリクスを収集できるツール
    - 収集したデータは自社サーバーなどに送信して保存することで分析でき
    るようになる
    まとめ
    71

    View Slide

  72. - MetricKit はリリース後のアプリのパフォーマンスに関して、実際のユー
    ザー環境でのメトリクスを収集できるツール
    - 収集したデータは自社サーバーなどに送信して保存することで分析でき
    るようになる
    - iOS 14 では
    - MXMetricPayload に CPU命令数, スクロールヒッチ率, アプリケーション終
    了理由・回数 のメトリクスが追加
    まとめ
    72

    View Slide

  73. - MetricKit はリリース後のアプリのパフォーマンスに関して、実際のユー
    ザー環境でのメトリクスを収集できるツール
    - 収集したデータは自社サーバーなどに送信して保存することで分析でき
    るようになる
    - iOS 14 では
    - MXMetricPayload に CPU命令数, スクロールヒッチ率, アプリケーション終
    了理由・回数 のメトリクスが追加
    - MXDiagnosticPayload が追加され、診断データとCallStackTreeも取得でき
    るように
    まとめ
    73

    View Slide

  74. 最後に
    74

    View Slide

  75. - Sansanアプリではまだ導入していない
    最後に
    75

    View Slide

  76. - Sansanアプリではまだ導入していない
    - 他のツールも含め、パフォーマンス向上のための1ツールとして活用方法を
    探っていきたい
    最後に
    76

    View Slide

  77. - Sansanアプリではまだ導入していない
    - 他のツールも含め、パフォーマンス向上のための1ツールとして活用方法を
    探っていきたい
    - 実際に導入したら、分析〜改善に関する知見も溜めていきたい
    最後に
    77

    View Slide

  78. - Sansanアプリではまだ導入していない
    - 他のツールも含め、パフォーマンス向上のための1ツールとして活用方法を
    探っていきたい
    - 実際に導入したら、分析〜改善に関する知見も溜めていきたい
    - 良いユーザー体験を目指してパフォーマンス改善しましょう
    最後に
    78

    View Slide

  79. ご清聴ありがとうございました
    79

    View Slide

  80. 80

    View Slide

  81. - WWDC 2020
    - What's new in MetricKit
    > https://developer.apple.com/videos/play/wwdc2020/10081
    - Eliminate animation hitches with XCTest
    > https://developer.apple.com/videos/play/wwdc2020/10077
    - Diagnose performance issues with the Xcode Organizer
    > https://developer.apple.com/videos/play/wwdc2020/10076
    - Why is my app getting killed?
    > https://developer.apple.com/videos/play/wwdc2020/10078
    参考資料(1)
    81

    View Slide

  82. - WWDC 2019
    - Improving Battery Life and Performance
    > https://developer.apple.com/videos/play/wwdc2019/417/
    - Apple Developer Documentation
    - MetricKit
    > https://developer.apple.com/documentation/metrickit
    - JSONデータ
    - MXMetricPayloadのJSONデータ
    > https://gist.github.com/taji-taji/040be779c54dc54109704a77c772bf12
    - MXDiagnosticPayloadのJSONデータ
    > https://gist.github.com/taji-taji/7feff7106cdd014d865e080399b1a49f
    参考資料(2)
    82

    View Slide