ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Appのパワーとパフォーマンスに関する不具合の診断
パワーとパフォーマンスの不具合を確認する際のプライオリティの特定方法を素早く見つけましょう。デバイスやパーセンタイル固有の情報を用いて低下したメトリクスを追跡する方法を確認し、最適化に注力して貴重な開発時間を節約しましょう。また、デバイスのストレージを消耗させるAppの一般的なアンチパターンを追跡する方法、ワークフローのカスタマイズを支援する方法、App Store Connect APIを追加してAppの実世界でのパフォーマンスを常に把握する方法についても紹介します。
リソース
- Analyzing the performance of your shipping app
- App Store Connect API
- Measuring App Performance
- MetricKit
- Reducing terminations in your app
関連ビデオ
WWDC22
WWDC21
WWDC20
-
ダウンロード
こんにちは Soniaです Performance Toolsのエンジニアです 今日はShreyasと共に パワー及びパフォーマンスリグレッションの 診断方法を お伝えします 毎年 最高のAppのリリースに 努力されているでしょう ユーザーに最高の経験を提供するには パワーとパフォーマンスの最適化が 非常に重要です ここではパフォーマンスに影響する 大切なメトリクス リグレッションを発見するツール ディスク書込みを減らすコツ ワークフローを自動化するAPIについてお話しします パフォーマンスの最適化のために Xcode OrganizerとApp Store Connect APIで Appに変更を加えることなく 幅広いメトリクスと診断方法が利用できます パフォーマンスの最適化は困難です 数多くのメトリクスと診断方法があるため 情報の波に呑まれてしまいかねません リリース毎に改善したいものの 性能優先度を素早く 把握せねばなりません Xcode Organizerはパフォーマンスの理解に 最適のツールです 7つのメトリクスからデータを収集します それらはバッテリー立ち上がり時間・停止率 メモリー・ディスク書込み スクロールヒッチと終了です これらは多大な情報量です ではXcode Organizerで リグレッションを診断してみましょう まずメトリクスから始まります 左側のナビゲーションバーから 7つのメトリクスが選べます バッテリーや終了などには 違ったタイプのイベントに伴う 細かい部門とサブカテゴリがあります また 数々のデバイスを 選ぶことができ トップ及び典型的なユーザー パーセンタイルを選べます Organizerの中央には 過去16リリースのデータチャートがあります ここでは終了について 調べます
このチャートから最新バージョンは 終了が多いことがわかり 青で記されたillegal instruction exitsが 増えていることからこのリリースに 問題があるとわかります 各カテゴリでのパフォーマンスを理解できる メトリクスが豊富にあります デバイスとメトリクスのカテゴリ そしてサブカテゴリが多すぎて 混乱するかもしれません そこでOrganizerの insights sectionで 優先事項がハイライトされ ワークフローを合理化できます Xcode Organizerはリグレッションなどの メトリクスデータを処理し 動向を確認します 詳細に入る前に パフォーマンスリグレッションと 診断方法についてお話ししましょう Appの最新リリースでパワーとパフォーマンスに 貧弱性があるとリグレッションが起こります ローンチ時間が 長いのがその例です この例では最新リリースの 数値が上昇しているか メトリクスを分析します 過去のリリースの平均値と 最新リリースの数値が比較されます もしメトリクスが上昇傾向で 過去の平均値より高ければ リグレッションとしてinsightsに フラグされます この例ではAppのローンチ平均は これまで1.1秒でしたが 最新リリースで2.5秒となり リグレッションとして フラグされました どうフラグされるかわかったところで organizerに戻っていくつか例を見てみましょう これはregressionsタブです ここでパフォーマンスの 優先事項を一目できます 最新リリースでAppが突然終了しますか? カメラ機能によりバッテリーが激減しますか? これらの質問の答えが insightsにあります パフォーマンスを理解するため 必要データはすべて ハイライトされています トップと典型的パーセンタイルの 全デバイスにおけるリグレッションの メトリクスのカテゴリとサブカテゴリを ご覧いただけます 左側にどのメトリクスがどれだけ どのパーセンタイルを対象に退化したか ハイライトすることで Appの向上に何が必要か 理解することができます この例では終了とメモリー ディスク書込みにおいて リグレッションが見られます 次に それぞれの例で 分析方法をご紹介します 終了リグレッションからです 終了に関しては Why is my app getting killed?を ご参照ください 各リグレッションは 最新リリースの最大課題を要約します invalid function pointerに Appがアクセスして起きる illegal instructionsが終了を起こしていると 一番上に表示されています その下に 過去4リリースの illegal instructionによる 終了のデータがチャートで表示されています チャートの上には影響を受けたグループと デバイスが表示されます この例ではトップユーザーが すべてのiPhoneにおいて新リリースで終了を 経験しています チャートの右側にはillegal instructionの平均 及び最新数が表示されています この例では最新リリースにおいて 10日毎に終了が起きています オンスクリーン終了はホーム画面に戻って Appを何度もローンチせねばならず 非常に不便です crash diagnosticsで終了を引き起こしている invalid function pointerのリファレンスを消去し さらに分析することができます Triage TestFlight crashes with Xcodeを ご参照ください
regressionsとcrash diagnosticsを使い 次のリリースまでに 終了を減らさねばならないとわかりました しかし それだけではなく できることがまだあるはずです 他のエリアのリグレッションを 確認してみましょう
task timeoutsでもリグレッションが見られます メトリクスによっては複数のデバイスやグループで 退化が見られます この例の場合task timeoutsが すべてのiPhoneと両パーセン タイルで増加しています 右にある各リグレッションをスクロールして メトリクスの最新数値 及び過去の平均値などを 確認できます バックグラウンドになる時 システムにより終了されるまで タスク実行に30秒あります つまりbackground tasksを終了できないため Appが頻繁に終了してしまい 再ローンチ時に 時間がかかるのです バックグラウンドでは3日毎に 終了しています オンスクリーン終了ほど面倒ではないものの バックグラウンド終了はよく起こります Appがバックグラウンドで終了させられても シームレスなローンチは重要です UIKitのstate restoration機能で スムーズな再ローンチが実現できます 最後にregressionsを見ると 注目すべき箇所が もう1つあります ディスク書込みが28%増加していますが 原因ははっきりしていません 問題があるとわかっているものの Appを最適化する前に何をすべきか 知る必要があります 次にShreyasがディスク書込みの リグレッションでの原因発見についてお話しします
ありがとう Sonia こんにちは Shreyasです ストレージ・ソフトウェア・エンジニアです ディスク書込みリグレッションの修正と パフォーマンスの維持についてお話しします その前にディスク書込みは なぜ重要なのでしょう? CPUとメモリー同様ストレージは 有限資源です 無検査のディスク書込みは デバイスをダメージしかねません また画面のフリーズとUIエラーの 原因にもなります 気をつけなければ バッテリーの激減につながります ユーザー体験の向上に これらがディスク書込みで重要になります それを念頭にディスク書込みの 診断方法についてお話ししましょう Xcode Organizerのdisk writes reportが いい出発点になります これらのレポートはApp分析の共有に 同意したデバイスから収集されたもので 書込みにつながった スタックトレースの情報が含まれます スタックトレースは数々のシグネチャに 分類されておりレポートを通して 書込みはシグネチャで追跡されます このレポートリストではシグネチャが 書込み数で分類されています 各シグネチャに 詳細のスタックトレースがあり 書込みの原因がわかり ログの受信数や どのOS及びデバイスか などの詳細が 記録されています 問題箇所の発見には トップシグネチャに注目してください この例ではトップシグネチャが 書込みの原因の67%を占めています コールスタックから SQLite functionが原因だと推定できます 多くの場合問題の原因を知ることで 問題解決に非常に役に立ちます しかし この例のように原因が不明な時もあります コードは機能に重要ですが はっきりとした問題が見えず どうすればいいかもわかりません 答えはスタックトレースにあります 見てみましょう 時々 ライブラリーなどスタックの奥に 何が原因かわかる functionsが潜んでおり リサーチ次第で修復できます しかし それは困難です たいていドメイン知識が必要で 時間のかかる作業です この手間を省くためXcode 13では organizerには新しいinsightsがあります 水面下で 書込みを増やす アンチパターンを含むリポジトリが維持されます レポートを受信するとアンチパターンを示す functionsを検索します 一致するものがあれば問題がここにハイライトされ 問題を解決するための 最適化が提案されます これにより修正に時間を取られず Appの書き込みを減らし パフォーマンスを向上できます 例えば トップシグネチャに indexを足す最適化の提案が見られます また問題の詳細を説明し 修正過程を記した 書類ページへのリンクがあります 最高ですね では それに従い解決してみましょう そのためにfile activities instrumentsを立ち上げます これはストレージ関連の問題解決に 素晴らしいリソースで Appが行ったすべての 書込み読込みの詳細を閲覧することができます 修正の確認に最適です
これまで一時ファイルに約180MBの 書込みがありました
また780msのレイテンシーが見られます
インデックスの後 functionで書込みがゼロになりました SQLiteの能率が高まったためです 780msのレイテンシーがなくなったのです SQLiteは一つの例です Appのパフォーマンスを高める方法は 他にもたくさんあり 常にこのリストは拡張しています Appのinsightsをぜひご覧ください
ではinsightsに戻ります リグレッションが3つあり それぞれを調べた結果手元にあるリソースで すべて解決できることがわかりました 素晴らしいですね Xcode Organizerにはたくさん分析法があり insightsはAppのパフォーマンスにおいて 欠く事のできない 情報リソースです ぜひご活用ください regressionsとinsightsを定期的にチェックし リリースの後は特にです Xcode Organizerに加え 別の方法で分析法に アクセスできます App Store Connect APIsです プログラムでデータにアクセスし カスタム解決策を作りたいなら最適です おそらく既に分析経路が あるでしょう これらのAPIsはそれらの組み入れに 最適のツールです Identify trends with Power and Performance APIを ご参照ください APIエンドポイントと反応の詳細をご覧いただけます ではAPIレスポンスについてお話ししましょう perfPowerMetricsエンドポイントに GETリクエストができます 最新版Appのメトリクスとinsightsの JSONレスポンスが呼び戻されます insightsを見てみましょう 発見されたすべてのリグレッションが 確認できます 各リグレッションのメトリクスカテゴリと 概要が表示されます
これは先程Xcode Organizerで発見した illegal terminationsによる オンスクリーン終了です
次にpopulationsがあります これは影響のあるパーセンタイルとデバイスの 構造化された詳細を提供します これにより集中した対策を 取ることができます
同様にdiagnostic reportsには diagnosticSignaturesの エンドポイントにGETリクエストができます responsesにはトップシグネチャのリストと 各シグネチャにはそれに伴う 詳細のリンクがあります
このリンクへのGETリクエストは 詳細の分析ログと シグネチャに関連するinsightsが提供されます 分析経路にこれらのAPIsを使い insightが見られればすぐ対処しましょう パフォーマンスリグレッションと その診断方法 そして修正データの場所がわかりました 次に必要なことは Xcode Organizerを開けregressionsを確認し 一番のパフォーマンスリグレッションを確認します 書込みを調べてください 書込みのコールバックは期待通りですか? それともバグでAppがスローになっていますか? 最後に Appのパフォーマンスを 常に監視しましょう Xcode Organizerを定期的に確認し App Store Connect APIsを カスタム分析経路に使いましょう ご視聴いただきありがとうございました [明るい音楽]
-
-
13:00 - App Store Connect API Metrics
GET /v1/apps/{application-id}/perfPowerMetrics GET /v1/builds/{id}/perfPowerMetrics
-
13:01 - App Store Connect API Diagnostics
GET /v1/builds/{id}/diagnosticSignatures GET /v1/diagnosticSignatures/{id}/logs
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。