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

13d936e697fe0f4fa96f926d0a712f6c?s=47 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/

13d936e697fe0f4fa96f926d0a712f6c?s=128

Sansan

November 06, 2020
Tweet

Transcript

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

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

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

    ゴール 3
  4. MetricKitとは? 4

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

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

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

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

    iOS 13 以降で使用可能 MetricKitとは? 8
  9. 開発プロセスとツール 9

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

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

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

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

    Instruments Xcode Metrics Organizer 実際のユーザ端末のデータを収集 13
  14. これまでの MetricKit のおさらい 14

  15. 実装方法 15

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

  17. 実装方法 17

  18. 実装方法 18

  19. 実装方法 19

  20. 実装方法 20

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

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

  23. 実装方法 23

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

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

  26. - Battery - ネットワークの接続状況 > シグナルバーの本数 - ディスプレイの輝度 > Average

    pixel luminance: APL - CPU, GPUの使用状況 - 位置情報追跡の使用状況 - ネットワーク転送 > セルラー, Wifiでのアップロード、 ダウンロード量 どんなデータが取れるのか?(iOS 13では) 26 - Performance - ハングが起こった時間 - ディスクの書き込み総量 - アプリ起動 > 起動・復帰 - メモリ使用量
  27. どんなデータが取れるのか?(iOS 13では) - JSONにするとこんな感じ - 一部ですが、、 27

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

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

  30. 実装方法 30

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

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

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

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

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

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

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

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

    送信データの整形 - MXMetricPayload や MXMetric には func jsonRepresentation() -> Data とい うインスタンスメソッドが生えている - これを使用するとサーバーに送る際のデータ整形が楽 func didReceive(_ payloads: [MXMetricPayload]) 38
  39. - デバッグ func didReceive(_ payloads: [MXMetricPayload]) 39

  40. - デバッグ - Xcodeの 「Debug > Simulate MetricKit Payloads」 func

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

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

    実機をつないで Run する必要がある - 実行すると didReceive メソッドが呼ばれ、ダミーの データを受け取れる func didReceive(_ payloads: [MXMetricPayload]) 42
  43. iOS 14 での新機能 43

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

  45. - Battery - ネットワークの接続状況 > シグナルバーの本数 - ディスプレイの輝度 > Average

    pixel luminance: APL - CPU, GPUの使用状況 - 位置情報追跡の使用状況 - ネットワーク転送 > セルラー, Wifiでのアップロード、ダウンロード量 【再掲】どんなデータが取れるのか?(iOS 13では) 45
  46. - Performance - ハングが起こった時間 - ディスクの書き込み総量 - アプリ起動 > 起動・復帰

    - メモリ使用量 【再掲】どんなデータが取れるのか?(iOS 13では) 46
  47. CPU命令数 47

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

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

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

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

    - より正確に状況を把握できる CPU命令数 51
  52. スクロールヒッチ率 52

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

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

  55. - スクロールヒッチ - スクロールが引っかかる - スクロール時のフレーム落ち - スクロールヒッチ時間 - スクロールヒッチが発生した時間(ms)

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

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

    - スクロールヒッチ率 - 1秒あたりのスクロールヒッチ時間 スクロールヒッチ率 参照:https://developer.apple.com/videos/play/wwdc2020/10077 57
  58. アプリケーション終了・強制終了の理由と発生回数 58

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

  60. MetricKit Diagnostics 診断APIの追加 60

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

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

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

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

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

    > 書き込み量 - CPU例外処理 > CPU時間 > 高いCPU使用率がサンプリングされた合計時間 MetricKit Diagnostics 65
  66. - それぞれに backtrace が CallStackTree の形で提供さ れる MetricKit Diagnostics 66

  67. - それぞれに backtrace が CallStackTree の形で提供さ れる - atos コマンド等を使ってシン

    ボル化することで追跡できる ようになる MetricKit Diagnostics 67
  68. - MXMetricManagerSubscriber に追加されたデリゲートメソッドを実装 する - MXMetricPayload を受け取る時とほぼ同じ MetricKit Diagnostics 68

  69. まとめ 69

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

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

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

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

    では - MXMetricPayload に CPU命令数, スクロールヒッチ率, アプリケーション終 了理由・回数 のメトリクスが追加 - MXDiagnosticPayload が追加され、診断データとCallStackTreeも取得でき るように まとめ 73
  74. 最後に 74

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

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

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

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

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

  80. 80

  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
  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