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

    View Slide

  2. 2
    自己紹介

    kariad
    ● iOSチーム
    ● 最近はバグ分析とプロセス改善
    ○ ODC分析
    DeNA 品質管理部SWET第二グループ
    @kariad_uu


    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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は後述
    ○ 様々なパフォーマンス計測と改善方法の紹介

    View Slide

  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/

    View Slide

  8. 8
    Xcode12 & iOS14 アップデートいくつか
    ● xctraceの登場
    ○ CLIからのInstruments活用が加速
    ● MetircKit 2.0
    ○ 取れるMetricsが増えた、Diagnosticsの追加
    ● App Store Connect APIでMetricデータの取得

    View Slide

  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/

    View Slide

  10. 10
    Xcode13 & iOS15のアップデートいくつか
    ● Xcode Organizer update
    ○ Regression(Insights)の追加
    ○ Terminationsの追加
    ● MetircKit update
    ○ Diagnosticsが即時送信に

    View Slide

  11. 11
    Appleも力を入れている?
    ● それなりにアップデートは入っている
    ○ 今後も使いやすくなっていくと思いたい
    ● WWDCのセッションでの解説も増えているので取り組み方もわかりやすくなっているしド
    キュメントも増えてきている

    View Slide

  12. 12
    計測ツール紹介

    View Slide

  13. 13
    Xcode Organizer

    View Slide

  14. 14
    Xcode Organizer
    ● 基本的にはリリース済みアプリ
    ○ クラッシュ等のレポートはTestFlightでも
    ● 実際のユーザー環境でのデータが送信される
    ○ 同意済みの場合のみ
    ● 送信されたデータはAppleのサーバーで保存
    ● 一定量データがないと表示されない
    ○ しきい値は公開されていない
    Xcode Organizerの使い方参考
    ● Diagnose performance issues with the Xcode Organizer
    ○ https://developer.apple.com/videos/play/wwdc2020/10076/

    View Slide

  15. 15
    Xcode Organizer 計測項目
    ● バッテリー消費量
    ○ オンスクリーン, バックグラウンド
    ● ディスク書き込み量
    ● ハングレート
    ● 起動時間
    ● メモリ使用量
    ○ ピークメモリ, バックグラウンド&サスペンション時
    ● スクロールヒッチレート
    ● Termination
    直近16バージョンのデータがグラフで表示

    View Slide

  16. 16
    Xcode Organizer Insights
    Xcode13から登場
    ● 直近4バージョンと比較してパフォーマンスが劣化している場合に自動で検知
    ● しきい値は自分で設定できない
    ○ 本当に許容できない問題かどうかは自己判断が必要
    参考セッション
    ● Diagnose Power and Performance regressions in your app
    ○ https://developer.apple.com/videos/play/wwdc2021/10087

    View Slide

  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/

    View Slide

  18. 18
    MetricKit
    ● どのタイミングでも送信処理さえあればデータ取得可能
    ○ 実際にはリリース後もしくはTestFlight版あたりがメインにはなる(はず)
    ● 基本的にはXcode Organizerで取れるデータのより詳細
    ○ Xcode Organizerにはない項目もある
    ● 自分で送信処理の実装が必要
    ● 送信したデータは自分で保存する必要がある
    ● データ送信は24時間に1回
    ○ iOS15からクラッシュ等のデータは即時になった

    View Slide

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

    View Slide

  20. 20
    ● MetricKitの実装方法などについては以下のセッションが最も参考になる
    ○ ただしWWDC2021でのUpdateもあるので一部情報は古い
    ● What's new in MetricKit
    ○ https://developer.apple.com/videos/play/wwdc2020/10081/

    View Slide

  21. 21
    Debug navigator

    View Slide

  22. 22
    ● Navigatorのスプレーアイコン
    ● CPU, Memory, Disk I/O, Network
    ● より詳細を見るためにはInstrumentsへ...
    ○ Profile in Instrumentsボタン
    ● 開発時のデバッグ

    View Slide

  23. 23
    Instruments

    View Slide

  24. 24
    Instruments
    ● デバッグしながら
    ● 一部データは実機が必要
    ○ Thermal Stateとか
    ● 最も詳細を見ることができるので、パフォーマンス劣化の原因となるコードの特定までで
    きる
    様々なセッションで原因調査などの用途で使われている

    View Slide

  25. 25
    Instrumentsの計測項目

    View Slide

  26. 26
    Instrumentsの計測項目
    とにかく多いのでいくつかの例
    ● CPU
    ○ コア単位、スレッド単位
    ● Thermal State
    ○ 端末温度(実機のみ)
    ● メモリリーク
    ● ディスクI/O
    ● Energy templateはXcode13で消えて、Xcode Organizerのみに

    View Slide

  27. 27
    InstrumentsをCLIで使う
    xctrace
    ● Instrumentsコマンドが消えて代わりに登場
    ● CLIからInstrumentsを実行できる
    ● 最大の特徴はInstrumentsの結果ファイル(.trace)をXMLに出力できる
    ○ 自動化がやりやすくなった
    ● xctraceの自称日本最速ドキュメントを昔書きました
    ○ https://swet.dena.com/entry/2020/10/26/112627

    View Slide

  28. 28
    XCTMetric
    ● XCTest上で実行するパフォーマンステスト
    ● 関数など小さな単位での計測が可能
    ● テストを5回実行し平均をベースラインとして設定できる
    ○ ベースラインより劣化していれば
    fail
    使い方参考
    ● Performance XCTests
    ○ https://developer.apple.com/videos/play/wwdc2020/10077/

    View Slide

  29. 29

    View Slide

  30. 30
    XCTMetricの計測項目
    ● CPU
    ○ CPU実行時間, CPUサイクル, リタイアされたCPU命令
    ● メモリ使用量
    ● 経過時間
    ● データ書き込み量
    ● Signpost
    ○ 任意で指定したbegin - end間の経過時間

    View Slide

  31. 31
    各ツールについて
    ● それぞれ使えるタイミング、計測できる項目は異なる
    ● 目的に合わせて適切に使い分ける

    View Slide

  32. 32
    まとめ

    View Slide

  33. 33
    まとめ
    ● いくつかの計測方法を紹介しました
    ○ 詳細は説明できていないので参考として参考
    URLからWWDCのセッションやド
    キュメントを是非見てください
    ■ ここで紹介しきれなかったドキュメントもあります
    ○ これらを組み合わせてリリース前リリース後と継続的に計測をしましょう
    ● 最も手軽に始められるのはXcode Organizerを利用した計測
    ○ そこから必要に応じてMetricKit使ったり、Instruments使ったり
    ● 弊社でもまだまだ活用しきれていないところもあり、事例もそう多くはないため、こう使っ
    ているよ等あれば意見交換しましょう

    View Slide

  34. 34
    採用情報
    ● SWET
    ○ https://herp.careers/v1/denacareer/ZYS4eo84F20e
    ● QAスペシャリスト
    ○ https://herp.careers/v1/denacareer/6aB5WBU0OpT8

    View Slide

  35. © DeNA Co.,Ltd.

    View Slide