WWDC Quick Look 💓 By SwiftGGTeam
Diagnose Power and Performance regressions in your app

Diagnose Power and Performance regressions in your app

元の動画を見る

ハイライト

Xcode Organizer には、過去 16 バージョンのパフォーマンス データを自動的に比較する Regressions タブが追加され、バッテリー、起動時間、ハング、メモリ、ディスク書き込み、スクロール ラグ、異常終了を含む 7 つの指標の劣化傾向がマークされ、デバイスとユーザーのパーセンタイルごとに分類されます。

主要内容

新しいバージョンをリリースしました。ユーザーは「少し動かなくなる」「電力消費が早い」と報告しています。問題を特定し、Xcode Organizer を開き、7 つの主要カテゴリの指標、数十のデバイス モデル、および典型的なユーザーと高頻度ユーザーに関するさまざまなデータに直面したいと考えています。情報が多すぎてどこから始めればよいのかわかりません。

WWDC21 の解決策は、システムに問題を見つけてもらうことです。

Xcode Organizer には、新しい「Regressions」タブがあります。過去 16 バージョンのパフォーマンス データを自動的に分析し、最新バージョンで大幅に悪化したメトリクスを特定します。各回帰には、どのメトリックがどの程度低下しているか、どのデバイスとどのユーザー グループが影響を受けているかがラベル付けされています。

[回帰] タブを開くと、異常終了の増加、バックグラウンド タスクのタイムアウトの増加、ディスク書き込みの 28% 増加という 3 つの問題が表示されます。重大度順に並べ替えて、1 つずつ解決します。

詳細

回帰の検出原理

03:01

システムは各指標の傾向分析を実行します。

  1. 最新バージョンの平均をベースラインとして採用します。
  2. 最新バージョンの値をベースラインと比較します
  3. 傾向が上昇傾向にあり、最新の値がベースラインよりも大幅に高い場合は、回帰としてマークします。

例: アプリの平均起動時間は 1.1 秒ですが、最新バージョンでは突然 2.5 秒に跳ね上がります。 [回帰] タブでは、この問題が強調表示されます。

キーポイント:

  • 分析は最新の 16 バージョンをカバーします
  • デバイスモデルおよび一般的/高頻度のユーザーパーセンタイルによるフィルタリングをサポート
  • 回帰は指標のカテゴリとサブカテゴリごとにグループ化されて表示されます

異常終了リターン

04:52

異常終了は、フォアグラウンドクラッシュ (不正な命令) とバックグラウンドタイムアウト (タスクタイムアウト) の 2 つのカテゴリに分類されます。

フォアグラウンドのクラッシュは最も最悪で、ユーザーがアプリを使用中に突然ホーム画面にリダイレクトされる場合です。一般的な原因は、無効な関数ポインターにアクセスすることです。回帰では次のことがわかります。

  • クラッシュの種類 (不正な命令/不正なアクセスなど)
  • 影響を受けるデバイスとパーセンタイル
  • 過去 4 つのバージョンの傾向グラフ
  • 平均値と最新値

サンプル データ: 最新バージョンは 10 日に 1 回クラッシュします (高頻度ユーザー)。修理指示:放棄されたものがないか確認してください@objcメソッドが呼び出されたか、サードパーティ SDK が無効なポインターを使用しました。

キーポイント:

  • フォアグラウンドのクラッシュはユーザー エクスペリエンスに最大の損害を与えるため、修復を優先する必要があります。
  • クラッシュ診断と組み合わせて特定のスタックを表示
  • WWDC21「私のアプリが強制終了されるのはなぜですか?」を参照してください。解雇理由について詳しく知るためのセッション

バックグラウンド タスクのタイムアウトが返されました

06:27

アプリはバックグラウンドに切り替えられてから 30 秒以内に実行され、タイムアウト後にシステムによって終了されます。回帰結果: 最新バージョンは 3 日に 1 回バックグラウンドで終了します。

バックグラウンドでの終了は、フォアグラウンドでのクラッシュほど影響はありませんが、より頻繁に発生します。ユーザーは次回アプリに切り替えるときにアプリを再起動する必要があるため、起動が遅くなります。

修理の方向:

  • バックグラウンドタスクが適切なタイミングで呼び出されているかどうかを確認しますendBackgroundTask
  • エクスプロイトbackgroundTimeRemaining事前に進行状況を保存する
  • UIKitの状態復元を統合して、終了後のシームレスな回復を保証します

キーポイント:

  • 通常、バックグラウンドでの終了はフォアグラウンドでのクラッシュよりも頻繁に発生します。
  • 30 秒はハードリミットであり、延長することはできません
  • 状態の復元により、バックグラウンド終了の悪影響を隠すことができます

ディスク書き込み回帰とアンチパターン検出

08:47

過剰なディスク書き込みはストレージ ハードウェアを消耗させ、UI のフリーズを引き起こし、電力を消費します。回帰分析では、ディスク書き込みが 28% 増加していることが示されています。

Xcode 13 のオーガナイザーは、ディスク書き込みレポートに新しい Insights フィールドを追加します。このシステムは、既知のアンチパターンのライブラリを維持し、報告されたスタックを自動的にスキャンし、アンチパターンが一致した場合に最適化の提案を直接提供します。

例: 上位の署名は書き込みの 67% を占め、スタック ポイントは SQLite 操作を指します。 Insights は、「インデックスを追加する」ことを提案します。

ファイル アクティビティ インストゥルメントを使用して修復効果を確認します。

  • 修正前: 一時ファイルは 180MB を書き込み、780ms の遅延が発生します。
  • インデックスを追加した後: 関数の書き込みが 0 に低下し、遅延が解消されます。

キーポイント:

  • インサイトは、SQLite インデックスの欠落や一時ファイルへの過剰な書き込みなどの一般的なアンチパターンをカバーします
  • アンチパターン ライブラリは拡大し続けます
  • File activity Instruments は修復効果を検証するための最良のツールです

App Store Connect API

12:57

カスタム分析パイプラインがある場合は、API を使用して同じデータをプログラムで取得できます。

# 性能指标和回归洞察
GET /v1/apps/{application-id}/perfPowerMetrics
GET /v1/builds/{id}/perfPowerMetrics

# 诊断签名和日志
GET /v1/builds/{id}/diagnosticSignatures
GET /v1/diagnosticSignatures/{id}/logs

返された JSON 構造では、insights検出されたすべての回帰が含まれます。populations影響を受けるデバイスとパーセンタイルをリストします。診断シグネチャの応答には、詳細なスタックと最適化の推奨事項へのリンクが含まれています。

キーポイント:

  • API によって返されるデータは Xcode Organizer とまったく同じです
  • 既存の監視プラットフォームへの統合に適しています
  • 各リリース後にデータを取得する自動プロセスを設定することをお勧めします。

重要ポイント

  1. 「リグレッションのチェック」をリリース プロセスに組み込みます。リリースから 1 週間後、Xcode Organizer の Regressions タブを開き、異常終了 > タスクのタイムアウト > ディスク書き込み > その他のインジケーターの重大度の順に処理します。エントリ: Xcode → ウィンドウ → オーガナイザー → 回帰。

  2. 適切なインデックスを SQLite テーブルに追加します。ディスク書き込みレポートの上位署名が SQLite 操作を指している場合、インデックスの欠落が原因でテーブル全体のスキャンが発生する可能性が高くなります。使用EXPLAIN QUERY PLAN遅いクエリを特定し、インデックスを追加した後にファイル アクティビティ インストゥルメントで書き込みボリュームの変化を確認します。入り口: Xcode Organizer → Disk Writes → Insights。

  3. バックグラウンド タスクに時間予算チェックを追加します。バックグラウンドタスク実行ループで定期的にチェックするbackgroundTimeRemaining、進行状況を保存し、10 秒未満になると自動的に終了します。システムが終了するのを受動的に待つことは避けてください。入り口:UIApplication.shared.backgroundTimeRemaining

  4. App Store Connect API を使用してパフォーマンス監視パイプラインを構築します。毎日プルするスケジュールされたタスクを作成する/v1/builds/{id}/perfPowerMetrics、データを時系列データベースに保存します。アラームを設定する: 特定の指標が 20% 以上低下したときにチームに通知します。入り口: App Store Connect API + カスタム ダッシュボード。

  5. 上位パーセンタイル ユーザーのデータを追跡します。一般的なユーザーのデータは正常に見えるかもしれませんが、高頻度ユーザー (上位パーセンタイル) は最初にパフォーマンスの問題を経験することがよくあります。オーガナイザーは、2 種類のユーザーのデータを個別に表示することをサポートし、上位パーセンタイルの回帰を優先します。エントリ: 右上隅のオーガナイザー パーセンタイル フィルター。

関連セッション

コメント

GitHub Issues · utterances