Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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


Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

6 パフォーマンス計測の重要性 導入として読む、見るには以下がおすすめ ● Improving Your App's Performance ○ https://developer.apple.com/documentation/metrickit/improving_your_app_s_pe rformance ○ アプリのパフォーマンスの重要性や改善サイクルの回し方の説明 ● Ultimate application performance survival guide ○ URLは後述 ○ 様々なパフォーマンス計測と改善方法の紹介

Slide 7

Slide 7 text

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/

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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/

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

12 計測ツール紹介

Slide 13

Slide 13 text

13 Xcode Organizer

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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/

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

21 Debug navigator

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

23 Instruments

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

25 Instrumentsの計測項目

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

29

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

32 まとめ

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

© DeNA Co.,Ltd.