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

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

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

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

Daiki Katayama

March 24, 2022
Tweet

More Decks by Daiki Katayama

Other Decks in Technology

Transcript

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

    rformance ◦ アプリのパフォーマンスの重要性や改善サイクルの回し方の説明 • Ultimate application performance survival guide ◦ URLは後述 ◦ 様々なパフォーマンス計測と改善方法の紹介
  2. 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/
  3. 8 Xcode12 & iOS14 アップデートいくつか • xctraceの登場 ◦ CLIからのInstruments活用が加速 •

    MetircKit 2.0 ◦ 取れるMetricsが増えた、Diagnosticsの追加 • App Store Connect APIでMetricデータの取得
  4. 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/
  5. 10 Xcode13 & iOS15のアップデートいくつか • Xcode Organizer update ◦ Regression(Insights)の追加

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

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

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

    本当に許容できない問題かどうかは自己判断が必要 参考セッション • Diagnose Power and Performance regressions in your app ◦ https://developer.apple.com/videos/play/wwdc2021/10087
  9. 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/
  10. 18 MetricKit • どのタイミングでも送信処理さえあればデータ取得可能 ◦ 実際にはリリース後もしくはTestFlight版あたりがメインにはなる(はず) • 基本的にはXcode Organizerで取れるデータのより詳細 ◦

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

    GPUの使用状況 • 位置追跡機能の使用状況 • ネットワーク転送速度 • 致命的または非致命的なCPU例外 • フォア/バックグラウンドでのアプリ終了回数 • アプリのアクティブ時間 • メモリ使用量 • クラッシュ情報 • スクロール中にヒッチングに費やした時間の比率 • アプリの起動時間 • アプリがbusy状態で操作を応答できない時間のヒス トグラム • アプリがbusy状態で操作に応答できない時間 • ディスク使用量 • ディスク書き込み例外 それぞれの項目がさらに詳細が取れる 詳しくは以下ドキュメントが最も詳しい https://developer.apple.com/documentation/metrickit
  12. 22 • Navigatorのスプレーアイコン • CPU, Memory, Disk I/O, Network •

    より詳細を見るためにはInstrumentsへ... ◦ Profile in Instrumentsボタン • 開発時のデバッグ
  13. 24 Instruments • デバッグしながら • 一部データは実機が必要 ◦ Thermal Stateとか •

    最も詳細を見ることができるので、パフォーマンス劣化の原因となるコードの特定までで きる 様々なセッションで原因調査などの用途で使われている
  14. 26 Instrumentsの計測項目 とにかく多いのでいくつかの例 • CPU ◦ コア単位、スレッド単位 • Thermal State

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

    自動化がやりやすくなった • xctraceの自称日本最速ドキュメントを昔書きました ◦ https://swet.dena.com/entry/2020/10/26/112627
  16. 29

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

    • 経過時間 • データ書き込み量 • Signpost ◦ 任意で指定したbegin - end間の経過時間
  18. 33 まとめ • いくつかの計測方法を紹介しました ◦ 詳細は説明できていないので参考として参考 URLからWWDCのセッションやド キュメントを是非見てください ▪ ここで紹介しきれなかったドキュメントもあります

    ◦ これらを組み合わせてリリース前リリース後と継続的に計測をしましょう • 最も手軽に始められるのはXcode Organizerを利用した計測 ◦ そこから必要に応じてMetricKit使ったり、Instruments使ったり • 弊社でもまだまだ活用しきれていないところもあり、事例もそう多くはないため、こう使っ ているよ等あれば意見交換しましょう