ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Xcodeとオンデバイスでのハングの検出と追跡
Appの応答性を高め、ハングをなくして、さらに優れたエクスペリエンスを実現する方法をご覧ください。Performance Toolsチームより、ハングを追跡する方法や、ハングの発生を未然に防ぐ方法について解説します。iOSにおける最新の検出メカニズムを解説するので、リリース前のテスト中に発生したハングも追跡できるようになります。さらに、Xcode Organizerなどを使用するリリースビルドの問題を特定する方法も紹介します。
リソース
関連ビデオ
WWDC23
WWDC22
WWDC21
WWDC20
-
ダウンロード
♪インストゥルメンタル ヒップホップ・ミュージック♪ ♪ みなさん こんにちはJohn Crowsonです AppleのPerformance Teamの ソフトウェア・エンジニアです 今回の講演ではXcodeと オンデバイスのハングアップ検出を使用して Appのハングアップを追跡する 新しいツールを紹介します 私はApp開発プロセスのあらゆる段階で あなたのガイド役を努めます それぞれのフェーズで どのツールが最も適しているかを検討します この講演は 4つのセクションに分かれています まず最初にハングアップとは何かです 次に Appの開発やベータテスト中 そしてリリース後にハングアップを発見し 診断するためのツールを紹介します さあ 始めましょう! 私のチームが開発中の新しい Appについてお話します ドーナツを販売する フードトラックの運営を支援します 私が作ったドーナツの種類を紹介しましょう
ドーナツの種類をスクロールするのに 時間がかかりましたね Appは反応が遅くタッチしても反応しないです Appleは この無反応の時間を 「ハング」と呼んでいます Appのメインスレッドは ユーザーインタラクションの処理と Viewコンテンツの更新を担当します ハングアップはメインスレッドが作業中か 他のスレッドや システムリソースで待機しており Viewコンテンツの更新に少なくとも 250ミリ秒の遅延が発生した場合に ハングアップ報告されます メインスレッドはハングアップが 解消されるまでは 新しいユーザーインタラクションを 処理することもできません ユーザーにはAppが完全に 停止しているように見えます 反応の早いAppを作ることは 有益なユーザーエクスペリエンスを 提供するのに非常に重要です Appの反応が悪い状態が続くと ユーザーはAppを強制終了したり 別のAppに替えたり場合によっては 否定的なレビューを書くこともあります このため Appのハングアップの追跡は ユーザーベースを獲得し 維持するために重要です 敏感なユーザーエクスペリエンスの提供で Appを楽しんでもらうことができます
ハングアップの詳細とその原因や 回避する方法については2021年に行われた 「Appのハングアップの理解と解消」 をご覧ください App開発のプロセスは 3つのフェーズに分けることができます まず 机上でXcodeを使って 最新版のAppの開発です 次に AppのテストとXcodeを使用して データ版環境でのフィードバックの収集です 例えば Appのバージョンがデバイス上で 開発者署名がされていたりTestFlightを通じて 配布されるAppのバージョンがあります 最後にApp Storeで最新版Appのリリースです 先取的な開発者であっても 新しいハングアップの問題は どの段階でも発生する可能性があるので それぞれの段階で解決するためのツールを 知っておくことが重要です iOS 16とXcode 14以前に私たちはAppの ハングアップを見つけ診断するための 2つのツールを提供していました MetricKitはベータ版または公開版Appで 個々のユーザーから非集計の ハングレートメトリクスと 診断レポートを収集するフレームワークです Xcode Organizerは 公開したAppのユーザーからの ハングアップ率を集計し提供します 具体的に Appを開発する際や どのようなソースコードが ハングレート率の上昇の原因なのかを 理解しようとするとギャップが生じます iOS 16とXcode 14では いくつかの新しいツールを 精力的に導入しています それぞれを簡単に紹介してから その詳細を説明します XcodeのThe Thread Performance Checkerは Appのデバッグ中にハングの 原因となるスレッドの問題を 積極的なトレース無しで警告してくれます XcodeのInstrumentsはAppのトレース中に ハングアップ検出しラベルを 付けるようになりました デバイス上でのハングアップ検出は Xcodeやトレースを使用せず ハングアップを検出し 開発者署名付きまたはTestFlightAppを 使用している間はリアルタイムで ハングアップを通知し診断をサポートします そして最後にXcodeのオーガナイザーが ハングアップをサポートし フィールドのユーザーからの ハングアップ診断を集約し提供します ハングアップとは何かハングアップが発生する 様々な局面について ご理解いただけたと思います XcodeでAppを開発する際にどのように ハングアップを追跡するか説明します Xcode14では 新しい Thread Performance Checkerツールが 優先順位逆転やAppのメインスレッドでの 非UI作業を検出すると Xcode Issue Navigatorで通知します どちらもハングアップの一般的な原因です 以前 Food Truck Appで作成したドーナツを スクロールした時に観察されたハングアップを 診断するために 今Xcodeに戻ってきました Appをビルドして実行し ユーザーとの対話を繰り返したところ Thread Performance Checkerツールが 優先順位逆転による ハングアップの危険性を警告しました より高い優先順位のスレッドが より低い優先順位のスレッドと 同期しようとしたことを意味します これは メインスレッドが優先順位の低い別の スレッドを持っているためにハングアップが 発生していることを 示している可能性があります Appのメインスレッドで優先順位逆転や 非UIを検出するには該当するスキームの Diagnosticsセクションから Thread Performance Checkerツールを 有効にします Thread Performance Checkerのアラートにより ハングアップの原因である 可能性のあるものを 発見することができましたが さらにトリアージするために 他のスレッドが何をしていたかを 知りたいのです 別のツールを使って深掘りしてみましょう Time Profilerinstrumentは コールスタックの提供で Appの 各スレッドが時間の経過とともに 何をしていたかを知ることができるツールです Xcode 14の新機能である Time Profilerはハングアップを検出し プロセストラックに直接ラベル付けします Food Truck appではTime Profilerを使って ドーナツのスクロール時に ハングアップを確認し それが メインスレッドの 優先順位逆転によって引き起こされ 優先順位の低いスレッドが何をしていて メインスレッドが待たされたのかを 突き止めることにします 「Product」→「Profile」 をXcodeで実行します これはリリース用にAppをビルドし 設定済みのターゲットを Instrumentsで起動します Time Profilerテンプレートを起動し Food Truck Appで問題のある ユーザーインタラクションの トレースを記録し始めます
ハングアップが検出され タイムラインにラベル付きになっています ハングアップの期間も指定され 問題の重大性を評価するのに役立ちます 次に ハングアップ間隔を トリプルクリックすると ハングアップしている時間の フィルタが作成され 下部の詳細Viewの情報が この選択された時間間隔で発生した イベントのみにフィルタリングされます また この時間帯に何か起きていたかを 他のトラックで見ることもできます 最初に気が付いたのはハングアップしている間 CPUがほとんど使われていないことです つまり メインスレッドが応答しなかったのは 他のスレッドを待っていたからであり それ自身が 多くの作業を していたからではありません これは 先程のThread Performance Checkerの 優先順位逆転の警告と一致しています 次に ハングアップ中にCPU使用率が多い ワーカースレッドを見ます これはメインスレッドが 待機していると思われます 次のステップはハングアップ中に ワーカースレッドが何をしていたかを調べ 優先順位逆転を解決することです Instrumentsにおけるハング検出とラベリングは Appのプロファイリング中に 発生したハングアップを 明らかにする素晴らしい方法です Time ProfilerとCPU Profiler instrumentsで 利用可能です 新たにスタンドアローンの ハングトレースも用意し トレースドキュメントに追加して 他のinstrumentsと組み合わせて ハングアップ表示もできます ハングアップ検出とラベリングに加え ハング持続時間のしきい値を設定し 特定の期間の無応答を検出することができます これでXcodeを使って 机上でハングアップを発見し 診断する方法を学びました 開発中のテストカバレッジが優れていても ベータ版や一般公開の環境では 考慮していなかったコードパスの ハングアップが発見される可能性があります 次に ベータ版でAppをデプロイした後 ハングアップを追跡する方法を紹介します App Store Connectを通じて TestFlightにFood Truck Appのビルドを デプロイし 私の個人のデバイスに ダウンロードされています 街でドーナツを売るときなど ネットワークに十分つながらない場所でも Appを試してみます Xcpdeに接続されていない場合 どのように ハングアップを発見し診断するのでしょうか? これらの状況下でのハングアップを 継続的に監視するため iOS 16では開発者設定に オンデバイスでのハングアップ検出を導入し リアルタイムのハングアップ通知と 診断のサポートを提供します これは開発者署名付きのビルドと TestFlight Appで使用できます そろそろ販売開始です 現在の注文を開こうとするとオンデバイスで Appがハングアップしているという ハングアップ検出の通知が来て 今度は3秒以上ハングアップしています Xcodeを開発している時に なぜ このハングアップに 気づかなかったのでしょう? オンデバイスのハングアップ検出ツールで 提供される診断情報を使用する必要があります Appを開発するための設定が完了しました この機能は「Settings」→「Developer」→ 「Hang Detection」で開き スイッチを切り替えてください ハングしきい値の設定により ハングアップを検出する 最小時間を設定することができます 最短で250ミリ秒最大で500ミリ秒の ハングアップが可能です 長いハングアップはユーザーへの影響が 大きくなりがちですが 短いハングアップでも 特に連続して起こる場合は エクスペリエンスの妨げになることがあります Appをインストールすると 監視対象Appのリストに表示されます 最後に 警告を受けたハングアップについて 利用可能なログを時系列で表示します これらの診断はベストエフォート型であり パフォーマンスのオーバーヘッド最小化のため 低優先度でバックグランドで 処理されることに注意です 特にシステムがビジー状態の場合 処理に時間がかかることがあります 幸いなことに新しい診断が可能になると 受動的な通知が表示されます 街でドーナツを売りながら Appで注文を開いた時に検出された ハングアップの診断を調べてみましょう テキストベースのハングログと検出された ハングのtailspinが表示されます テキストベースのハングログは 情報量が少ないですが 一目でハングアップを 把握することができます より詳細な調査には Instrumentsのtailspinを開いて プロセス内のスレッドの 相互作用を表示したり システムリソースの使用状況を 確認することができます まず Shareボタンを使って テキストベースのハングログをMacに送り symbolicateしたり大きな画面で見たりします 転送してsymbolicateした テキストベースのハングログの抜粋から ハングアップの間に ネットワークへの同期リクエストを実行する メインスレッドのメソッドを 呼び出していることがわかります 自分の机でXcodeと強力なネットワーク接続を 使用してAppをテストしている場合 ネットワークからデータを要求する際に 遅延が発生しないかもしれません しかし ネットワーク接続が限られた場所で Appをテストするとリクエストに時間がかかり ハングアップしてしまいます Appのベータ版をこのような異なる実環境で テストすることは重要です オンデバイスのハングアップ検出することで 自分のデバイスだけで ハングアップを監視することができます 現時点では 開発およびベータフェーズを使って ハングアップを発見 診断し App Storeでお客様にFood Truck Appを 提供する準備が整っています Appがお客様の手に渡った後 様々なOSバーションやデバイス または 事前のテストでは再現できなかった 現実的な条件下で ハングアップを追求する方法を紹介します Xcode 14の新機能であるXcode Organizerは お客様のデバイスから集約された ハングアップ診断を提供する ハングアップレポートをサポートします 収集されたデータはApp解析の共有に 同意されたお客様からのもので メインスレッドのスタックトレースに関する 情報が含まれています ハングレポートはXcode Organizerの 左側のナビゲーションから利用できます 類似のスタックトレースが収集された場合 それらはグループ化し 1つのシグネチャを作ります リストでは シグネチャはユーザーへの 影響度に基づいてソートされ表示されます いくつかハングログの サンプルをご覧いただけます 各ハングログには原因であるコードを含む メインスレッドのスタックトレースや ハング時間 ログが発生したデバイスと OSバーションが含まれます 各シグネチャはそのシグネチャが担当した ハングログの数およびOSバーションや デバイス別の集計に関する 統計情報を提供します お客様に最も影響を与える ハングアップを特定するため 上位のシグネチャに 細心の注意を払う必要があります この場合 上位シグネチャは このリリースのハング時間の 21パーセントを占めています シンボル情報を付けてApp Storeに提出したので ハングアップレポートには ソースコードと同じ名前の 関数がすべて表示されています このメインスレッドの コールスタックにある関数の 調査で このハングアップは かなりの時間ブロックすると 言われるメインスレッドで ディスクからファイルを 同期的に読み取る事によって 起きたと推測できます お客様に 最も影響を及ぼしている パフォーマンスの問題に 取り組むことは重要です Organizerは それらを特定 する素晴らしいツールです Appをリリースするたびにこのデータを確認し 以前のハングアップが解決されたことを確認し 新たに発生するハングアップに対処します
App Store Connect REST APIsを通じて 同じハングレポートデータ を取得することができます これにより パフォーマンス データを自身のシステムと 統合または追跡の分析を 実行することができます 「Power and Performance APIで トレンドを特定する」のビデオで より詳しく学ぶことを強くお勧めします Xcode 13.2で追加された Appの電力とパフォーマンスメトリクスを 監視する時に通知を受け取れます Xcode OrganizerのRegressionsViewの 右上にあるNotificationsボタンで 通知を有効にすることをお勧めします これによりハングアップの 急激な上昇を警告します パフォーマンス回帰の詳細については 2021年の「Appのパワーとパフォーマンスに 関する不具合の診断」をご覧ください Xcode Organizerでの エクスペリエンス向上のため Appをビルドしてシンボル情報と一緒に App Storeに提出することを強くお勧めします このシンボル情報はAppの関数名を Xcode Organizerのレポートに 追加するために使用されます これによりスタックトレースが 格段に分かりやすくなりました また スタックトレース内の関数名から Xcodeソースエディタ内の関数定義に ワンクリックでナビゲートできます 抽出される情報は 関数とメソッド ソースコードファイルの名前とパス そして行番号の情報のみです 限定されたシンボル情報は安全に保管され 決して共有されることはありません なんて素晴らしいのでしょう 開発プロセスの各フェーズで ハングアップを発見し 診断する方法がお分かり いただけたかと思います 将来は ハングアップの発見 診断 修正を 開発プロセスの できるだけ早い段階で行います Instrumentsを使った 新機能のプロファイリングを 積極的に行うなど利用可能な ツールを活用してください Thread Performance Checkerとオンデバイス ハングアップ検出を必ず有効にしてください 各リリース後Xcode Organizerを使用して お客様に最も影響を与える ハングアップに取り組み 以前のAppのバージョンからハングアップが 解決されていることを確認します リグレッション通知を有効にすることで 電力やパフォーマンスの問題の最初の兆候となる パフォーマンスメトリクスの 後退に積極的に警告します そして最後にAppをビルドして シンボル情報を含むAppをApp Stpreに提出し Xcode Organizerの利便性を向上させます これらのステップを踏むことで Appの パフォーマンスが向上し最高の ユーザーエクスペリエンスを提供します WWDCにお付き合いいただき ありがとうございました!
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。