Articles

アプリのパフォーマンスを向上させる Xcode Instruments の使用法

Xcode Instruments は、Xcode に無料で付属している開発者用ツールです。 アプリを検査し、改善するための多くの便利なツールがあります。 5618>

このブログ投稿では、Xcode Instruments を使用して、Collect by WeTransfer アプリの重要な部分のパフォーマンスをどのように向上させたかを紹介します。 その結果、「写真をインポートする」以降の部分が劇的に改善されました。

ViRE – Visual Regular Expressions (Mac & iPad)ViRE は Visual Regular Expressions(視覚的正規表現)ツールです。 読みやすい正規表現 – コードコンプリート / チートシート – ユニットテスト – 強力な置換システム – ステップバイステップ検索 & Replace – Regex Visual Scheme – Regex History / Playground. ViRE は Mac & iPad で利用可能です。

ご覧のとおり、インポートのポップアップは旧バージョンではかなり長く表示され、最終的な共有シートもかなり遅れています。

アプリのこの部分が優れていれば、それだけアプリはより良いパフォーマンスを示すことになります。

それでは、このフローをどのように改善したかを見ていきましょう!

Xcode Instruments とは? これは、Create ML や Accessibility Inspector などのツールを含む Xcode ツール セットの一部です。

  • ソース コードの問題を追跡する
  • アプリのパフォーマンスを分析する
  • メモリの問題を見つける

その他多数!

Xcode Instruments にアクセスするにはどうすればよいですか。

Xcode メニューから Product ➔ Profile を使用し、ショートカット ハンドル ⌘ + I を使用して、インストルメントにアクセスできます。 5618>

Xcode Instruments Overview
Xcode Instruments Overview

各インストルメントの使用方法を知っておくべきですか。 それぞれは非常に貴重なものですが、すべてのアプリに必要なわけではありません。 ゲーム パフォーマンス測定器のように、ゲームを開発している場合にのみ価値がある測定器もあります。

シミュレータで測定器を使用できますか。

ほとんどの測定器はシミュレータで実行できますが、そうすることは常に推奨されるわけではありません。

Using the Xcode Instruments Time Profile to investigate and improve the performance

The Time Profiler instrument gives insights into the system’s CPUs and how effective multiple cores and threads are used in the system. アプリのこの部分が優れていればいるほど、アプリのパフォーマンスが向上します。

Collect アプリのパフォーマンスの例では、アプリにコンテンツを追加するフローを高速化することを目標としていました。

Time Profiler Instrument を使用して新しい記録を作成する

Time Profiler Instrument を選択したら、左上の赤いボタンまたは ⌘ + R を使用して、新しい記録を開始できます。

改善したいフローが終了したら、記録を停止して結果に飛び込むことができます。 まず、メイン スレッドがどのように使用されるかを知りたいと思います。 5618>

Using filters to create an overview of threads

Threads タブを選択すると、フィルター バーを使用して概要を絞り込み、使用されているスレッドに関するより良い洞察を得ることができます。 下にスクロールすると、メイン スレッドが頻繁に使用され、他のスレッドはそれほど忙しくないことがわかります。

Time Profiler main thread usage insights in Xcode Instruments
Time Profiler main thread usage

コードのどの部分を最適化できるかを特定する

⌘ + D を使用して詳細領域を表示しない場合は、それを開くようにします。 これには、ハイライトされた期間のシンボル名が表示されます。 前の例では、グラフのピークが青でハイライトされているのがわかります。

最初は、詳細領域のシンボル名を見ていると、かなり使い物にならないように見えます:

Unclear symbol names in the detail area
Uncle symbol names in the detail area

詳細領域の右側には Heaviest Stack Trace がありますが、Call Tree 入力フィルターを使用してさらに良い概観を得ることができます。 5618>

Hide system libraries in the detail area
Hide system libraries in the detail area

Hide system libraries で開始し、制御できない、最適化できない低レベルのシンボルをすべて削除します。 ご覧のように、Heaviest Stack Trace の概要はすでにかなりきれいになっています。

次は Invert Call Tree フィルターで、各コール ツリーをクリックしなくてもトップレベルのメソッドを表示できるようにします。 Weight カラムでのソートと組み合わせて、どのメソッドを最適化すべきかを正確に確認できます。

Time Profile input filters to narrow down the results
Time Profile 入力フィルターで結果を絞り込む

PHImageManagerコードが、合計 11.16 秒から 3.36 秒かかり、最もパフォーマンスが悪いことは明らかです。 5618>

もう 1 つ気づいたことは、テスト中のフローでは何もしていないにもかかわらず、常に高さを再計算している BucketHeaderView です。

結果を検証する

コードを改善したら、タイム プロファイラーを再実行して結果を検証し、実際に改善されたかどうかを確認する必要があります。

Validating results in the time profiler
Time Profiler で結果を検証する

先に共有したビフォー/アフター ビデオですでに改善点を確認しましたが、同じフローに最も重いスタック トレースとして PHImageManager が含まれていないことも確認できます。

ヘッダーも再計算されなくなり、フローのパフォーマンスが向上しました。

ViRE – Visual Regular Expressions (Mac & iPad)ViRE は Visual Regular Expressions (日本語) ツールです。 読みやすい正規表現 – コードコンプリート / チートシート – ユニットテスト – 強力な置換システム – ステップバイステップ検索 & Replace – Regex Visual Scheme – Regex History / Playground. ViRE は Mac & iPad で利用可能です。

結論

Xcode Instruments には、アプリのパフォーマンスを改善するための貴重なツールがたくさん含まれています。 タイム プロファイラーは、特定のフローに飛び込み、コードの一部を改善し、直後に検証するために使用できます。

利用可能なツールに飛び込んで、どれがいつ役に立つかを知り、アプリの改善に着手してください。 もし、さらに改善したいのであれば、ビルド パフォーマンスの改善に関する私のブログ投稿も読んでみてください!