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

iOSアプリのパフォーマンス計測をおさらいする

 iOSアプリのパフォーマンス計測をおさらいする

iOSアプリのパフォーマンス計測について、Appleが提供しているツールを中心にそれぞれ何ができるのか、どんなタイミングで使えるのか、ここ数年のアップデートなどをおさらいします

Aaf94d61dec57d1c3cf2de7c09e472d4?s=128

Daiki Katayama

March 24, 2022
Tweet

More Decks by Daiki Katayama

Other Decks in Technology

Transcript

  1. iOSアプリのパフォーマンス計測をおさ らいする kariad 品質管理部SWET第二グループ 株式会社ディー・エヌ・エー © DeNA Co.,Ltd.

  2. 2 自己紹介
 kariad • iOSチーム • 最近はバグ分析とプロセス改善 ◦ ODC分析 DeNA

    品質管理部SWET第二グループ @kariad_uu

  3. 3 はじめに iOSアプリのパフォーマンス計測について Apple公式ではどんなツールがあるのか、何が計 測できるのか概要を紹介しつつ、 AppleのドキュメントやWWDCセッションのどれを見ればよ り深く理解することができるのか載せていくのでこれからパフォーマンス計測をやるという方へ の導線になれたらいいなと思います。

  4. 4 目次 パフォーマンス計測へのAppleの取り組み 計測ツール紹介 まとめ 1 2 3

  5. 5 パフォーマンス計測への Appleの取り組み

  6. 6 パフォーマンス計測の重要性 導入として読む、見るには以下がおすすめ • Improving Your App's Performance ◦ https://developer.apple.com/documentation/metrickit/improving_your_app_s_pe

    rformance ◦ アプリのパフォーマンスの重要性や改善サイクルの回し方の説明 • Ultimate application performance survival guide ◦ URLは後述 ◦ 様々なパフォーマンス計測と改善方法の紹介
  7. 7 Appleの近年のパフォーマンス計測事情 WWDC 2020 関連セッション(Metal系除く, 漏れあるかも) • What’s new in

    MetricKit ◦ https://developer.apple.com/videos/play/wwdc2020/10081/ • Identify trends with the Power and Performance API ◦ https://developer.apple.com/videos/play/wwdc2020/10057/ • Why is my app getting killed? ◦ https://developer.apple.com/videos/play/wwdc2020/10078/ • 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/
  8. 8 Xcode12 & iOS14 アップデートいくつか • xctraceの登場 ◦ CLIからのInstruments活用が加速 •

    MetircKit 2.0 ◦ 取れるMetricsが増えた、Diagnosticsの追加 • App Store Connect APIでMetricデータの取得
  9. 9 Appleの近年のパフォーマンス計測事情 WWDC 2021 関連セッション(Metal系除く, 漏れあるかも) • Ultimate application performance

    survival guide ◦ https://developer.apple.com/videos/play/wwdc2021/10181/ • Diagnose Power and Performance regressions in your app ◦ https://developer.apple.com/videos/play/wwdc2021/10087/ • Detect and diagnose memory issues ◦ https://developer.apple.com/videos/play/wwdc2021/10180/ • Understand and eliminate hangs from your app ◦ https://developer.apple.com/videos/play/wwdc2021/10180/
  10. 10 Xcode13 & iOS15のアップデートいくつか • Xcode Organizer update ◦ Regression(Insights)の追加

    ◦ Terminationsの追加 • MetircKit update ◦ Diagnosticsが即時送信に
  11. 11 Appleも力を入れている? • それなりにアップデートは入っている ◦ 今後も使いやすくなっていくと思いたい • WWDCのセッションでの解説も増えているので取り組み方もわかりやすくなっているしド キュメントも増えてきている

  12. 12 計測ツール紹介

  13. 13 Xcode Organizer

  14. 14 Xcode Organizer • 基本的にはリリース済みアプリ ◦ クラッシュ等のレポートはTestFlightでも • 実際のユーザー環境でのデータが送信される ◦

    同意済みの場合のみ • 送信されたデータはAppleのサーバーで保存 • 一定量データがないと表示されない ◦ しきい値は公開されていない Xcode Organizerの使い方参考 • Diagnose performance issues with the Xcode Organizer ◦ https://developer.apple.com/videos/play/wwdc2020/10076/
  15. 15 Xcode Organizer 計測項目 • バッテリー消費量 ◦ オンスクリーン, バックグラウンド •

    ディスク書き込み量 • ハングレート • 起動時間 • メモリ使用量 ◦ ピークメモリ, バックグラウンド&サスペンション時 • スクロールヒッチレート • Termination 直近16バージョンのデータがグラフで表示
  16. 16 Xcode Organizer Insights Xcode13から登場 • 直近4バージョンと比較してパフォーマンスが劣化している場合に自動で検知 • しきい値は自分で設定できない ◦

    本当に許容できない問題かどうかは自己判断が必要 参考セッション • Diagnose Power and Performance regressions in your app ◦ https://developer.apple.com/videos/play/wwdc2021/10087
  17. 17 Xcode Organizer App Store Connect APIからの利用 • 各種データはApp Store

    Connect APIからも取得が可能 ◦ Insightsももちろん取得可能 参考セッション • Identify trends with the Power and Performance API ◦ https://developer.apple.com/videos/play/wwdc2020/10057/
  18. 18 MetricKit • どのタイミングでも送信処理さえあればデータ取得可能 ◦ 実際にはリリース後もしくはTestFlight版あたりがメインにはなる(はず) • 基本的にはXcode Organizerで取れるデータのより詳細 ◦

    Xcode Organizerにはない項目もある • 自分で送信処理の実装が必要 • 送信したデータは自分で保存する必要がある • データ送信は24時間に1回 ◦ iOS15からクラッシュ等のデータは即時になった
  19. 19 MetricKit 計測項目 • セルラーネットワークの状態 • CPU使用状況 • ディスプレイの光度 •

    GPUの使用状況 • 位置追跡機能の使用状況 • ネットワーク転送速度 • 致命的または非致命的なCPU例外 • フォア/バックグラウンドでのアプリ終了回数 • アプリのアクティブ時間 • メモリ使用量 • クラッシュ情報 • スクロール中にヒッチングに費やした時間の比率 • アプリの起動時間 • アプリがbusy状態で操作を応答できない時間のヒス トグラム • アプリがbusy状態で操作に応答できない時間 • ディスク使用量 • ディスク書き込み例外 それぞれの項目がさらに詳細が取れる 詳しくは以下ドキュメントが最も詳しい https://developer.apple.com/documentation/metrickit
  20. 20 • MetricKitの実装方法などについては以下のセッションが最も参考になる ◦ ただしWWDC2021でのUpdateもあるので一部情報は古い • What's new in MetricKit

    ◦ https://developer.apple.com/videos/play/wwdc2020/10081/
  21. 21 Debug navigator

  22. 22 • Navigatorのスプレーアイコン • CPU, Memory, Disk I/O, Network •

    より詳細を見るためにはInstrumentsへ... ◦ Profile in Instrumentsボタン • 開発時のデバッグ
  23. 23 Instruments

  24. 24 Instruments • デバッグしながら • 一部データは実機が必要 ◦ Thermal Stateとか •

    最も詳細を見ることができるので、パフォーマンス劣化の原因となるコードの特定までで きる 様々なセッションで原因調査などの用途で使われている
  25. 25 Instrumentsの計測項目

  26. 26 Instrumentsの計測項目 とにかく多いのでいくつかの例 • CPU ◦ コア単位、スレッド単位 • Thermal State

    ◦ 端末温度(実機のみ) • メモリリーク • ディスクI/O • Energy templateはXcode13で消えて、Xcode Organizerのみに
  27. 27 InstrumentsをCLIで使う xctrace • Instrumentsコマンドが消えて代わりに登場 • CLIからInstrumentsを実行できる • 最大の特徴はInstrumentsの結果ファイル(.trace)をXMLに出力できる ◦

    自動化がやりやすくなった • xctraceの自称日本最速ドキュメントを昔書きました ◦ https://swet.dena.com/entry/2020/10/26/112627
  28. 28 XCTMetric • XCTest上で実行するパフォーマンステスト • 関数など小さな単位での計測が可能 • テストを5回実行し平均をベースラインとして設定できる ◦ ベースラインより劣化していれば

    fail 使い方参考 • Performance XCTests ◦ https://developer.apple.com/videos/play/wwdc2020/10077/
  29. 29

  30. 30 XCTMetricの計測項目 • CPU ◦ CPU実行時間, CPUサイクル, リタイアされたCPU命令 • メモリ使用量

    • 経過時間 • データ書き込み量 • Signpost ◦ 任意で指定したbegin - end間の経過時間
  31. 31 各ツールについて • それぞれ使えるタイミング、計測できる項目は異なる • 目的に合わせて適切に使い分ける

  32. 32 まとめ

  33. 33 まとめ • いくつかの計測方法を紹介しました ◦ 詳細は説明できていないので参考として参考 URLからWWDCのセッションやド キュメントを是非見てください ▪ ここで紹介しきれなかったドキュメントもあります

    ◦ これらを組み合わせてリリース前リリース後と継続的に計測をしましょう • 最も手軽に始められるのはXcode Organizerを利用した計測 ◦ そこから必要に応じてMetricKit使ったり、Instruments使ったり • 弊社でもまだまだ活用しきれていないところもあり、事例もそう多くはないため、こう使っ ているよ等あれば意見交換しましょう
  34. 34 採用情報 • SWET ◦ https://herp.careers/v1/denacareer/ZYS4eo84F20e • QAスペシャリスト ◦ https://herp.careers/v1/denacareer/6aB5WBU0OpT8

  35. © DeNA Co.,Ltd.