# Xcode フレームデバッガーの Unity インテグレーション

> Explains about Unity integration with the Xcode frame debugger on supported platforms to analyze GPU performance.

[Xcode](https://developer.apple.com/xcode/) の [フレームデバッガーツール](https://developer.apple.com/documentation/metal/frame_capture_debugging_tools) では、アプリケーションのフレームをキャプチャして、フレームで GPU が実行したコマンドを確認したり、GPU メモリのデータを調べたり、シェーダーのボトルネックを特定したりすることができます。これにより、GPU パフォーマンスを詳細に分析できます。

Unity は、Xcode のフレームデバッガーと以下のように統合されています。

* macOS、iOS、tvOS では、Xcode のフレームデバッガーを使って、ターゲットデバイス上で実行中のアプリケーションのフレームを解析することができます。
* macOS では、Xcode のフレームデバッガーを使って、Unity エディターのフレームを解析することができます。

**重要:**

* フレームデバッグは、Xcode がサポートするプラットフォームとグラフィックス API で Unity が 実行されている場合にのみ機能します。
* Xcode は Metal グラフィックスの macOS のみをサポートします。
* Unity が別の API を使用する場合、サポートされているグラフィックス API を選択するまで Xcode のインテグレーションは無効になります。

## アプリケーションからフレームをキャプチャする##capture-a-frame-from-your-application

Xcode のフレームデバッガーを使用してフレームをキャプチャするには、以下のいずれかを行います。

* Xcode からアプリケーションを起動し、Xcode UI または [FrameCapture](/engine/6000.0/script-reference/unity-engine-apple/frame-capture.md) API を使用してフレームキャプチャをリクエストします。フレームキャプチャは、Xcode ですぐに解析することも、ディスクに保存することも可能です。このワークフローは、Metal を使用するすべてのプラットフォームでサポートされます。
* Xcode プロジェクトを使用せずに、コマンドラインから直接アプリケーションを起動し、[FrameCapture](/engine/6000.0/script-reference/unity-engine-apple/frame-capture.md) API を使用してフレームキャプチャをディスクに保存することができます。**ノート:** iOS では、このワークフローはサポートされません。

### Xcode でアプリケーションのフレームをキャプチャする##capture-a-frame-from-your-application-with-xcode

ここでは、アプリケーションを起動し、Xcode UI か FrameCapture API を使用してフレームキャプチャーを実行する方法について説明します。このワークフローは、Metal を使用するすべてのプラットフォームでサポートされます。

**1. Xcode のプロジェクトを作成します。**

Unity エディターから Xcode プロジェクトを作成するか、その他の Xcode プロジェクトを使用して macOS アプリケーションを起動できます。

Unity エディターで Xcode プロジェクトをビルドするには以下を行います。

1. Build Settings ウィンドウを開きます (**File > Build Settings**)。
2. macOS のみ: **Create Xcode Project** を有効にします。
3. Build をクリックします。

別の Xcode プロジェクトを使用して macOS アプリケーションを起動するには、以下を行います。

1. Xcode で、新しい空の macOS プロジェクトを作成するか、既存の macOS プロジェクトを開きます。
2. Product > Scheme > Edit scheme の順に移動し、Info タブを開きます。
3. **Executable** をビルドした Unity アプリケーションに設定します。

**2. Xcode プロジェクトのスキームを編集して、フレームキャプチャを実行できるようにします。**

いずれも、Xcode GUI を使用します。これを行う際は、Xcode ドキュメントの [Enabling Frame Capture ガイド](https://developer.apple.com/documentation/metal/frame_capture_debugging_tools/enabling_frame_capture) に従って、プロジェクトスキームの GPU **Frame Capture** の設定を Metal に設定してください。

XcScheme API を使用して Xcode プロジェクトスキームを設定することもできます。これは、自動化されたビルドに役立ちます。詳細については、[XcScheme API のドキュメント](/engine/6000.0/script-reference/unity-editor/i-os/xcode-xc-scheme.md) を参照してください。

**3. Xcode からプロジェクトを起動し、フレームキャプチャを実行します。**

Xcode で、Frame Capture ボタン (カメラアイコン) を押すと、次のフレームのデータがキャプチャされます。

また、[FrameCapture](/engine/6000.0/script-reference/unity-engine-apple/frame-capture.md) API を使って、スクリプトからフレームキャプチャを実行することもできます。Xcode でのフレームキャプチャデータの分析については、[Xcode のフレームデバッガーに関するドキュメント](https://developer.apple.com/documentation/metal/frame_capture_debugging_tools) を参照してください。

### コマンドラインでアプリケーションのフレームをキャプチャする##capture-a-frame-from-your-application-with-the-command-line

ここでは、コマンドラインからアプリケーションを起動し、[FrameCapture](/engine/6000.0/script-reference/unity-engine-apple/frame-capture.md) API を使ってフレームキャプチャを実行し、その結果をディスクに保存する方法を説明します。\*\*重要:\*\*このワークフローは iOS ではサポートされません。iOS でフレームキャプチャを行うには、必ず Xcode からアプリケーションを起動する必要があります。

1. [FrameCapture.BeginCaptureToFile](/engine/6000.0/script-reference/unity-engine-apple/frame-capture/begin-capture-to-file.md) と [EndCapture](/engine/6000.0/script-reference/unity-engine-apple/frame-capture/end-capture.md) の呼び出しをコードに追加します。これにより、必要に応じてフレームキャプチャを実行できます。
2. `-enable-metal-capture.` というフラグを付けて、コマンドラインからアプリケーションを起動します。Xcode は、コードのリクエストに応じてフレームキャプチャを実行し、その結果をディスクに保存します。

Xcode でフレームキャプチャデータを分析する方法については、Apple の [Xcode のフレームデバッガーに関するドキュメント](https://developer.apple.com/documentation/metal/frame_capture_debugging_tools) を参照してください。

## Unity エディターからフレームをキャプチャする##capture-a-frame-from-the-unity-editor

macOS では、Xcode のフレームデバッガーを使って、Unity エディターのフレームを解析することができます。Xcodeを使用してUnity エディターを起動した場合、Unity エディターの UI からフレームキャプチャをリクエストすることができます。

### Xcode で Unity エディターからフレームをキャプチャする##capture-a-frame-from-unity-editor-with-xcode

以下のステップに従って Xcode から Unity エディターを起動し、Unity エディター UI、Xcode UI、FrameCapture API を使用してフレームキャプチャを実行します。フレームキャプチャを即座に解析したり、結果をディスクに保存することができます。このワークフローは macOS に対応しています。

**前提条件:** Unity エディターが開いている場合は閉じます。

1. Xcode で、新しい空の macOS プロジェクトを作成するか、既存の macOS プロジェクトを開きます。

2. **Product > Scheme > Edit scheme** の順に移動し、**Info** タブを開きます。

3. **Executable** を Unity エディターに設定します。

4. [Xcode ドキュメントの Enabling Frame Capture ガイド](https://developer.apple.com/documentation/metal/frame_capture_debugging_tools/enabling_frame_capture) に従って、プロジェクトスキームの **GPU Frame Capture** の設定を **Metal** に設定してください。

5. **任意 - Unity Hub がインストールされている場合:** Xcode Scheme 設定ウィンドウの **Arguments** タブに移動し、`-projectPath` を使用して Unity プロジェクトへのパスを引数として渡します。これは、Xcode がエディターを起動する際に Unity Hub が開かないようにし、代わりにプロジェクトでエディターを直接デバッグするためです。
   **プロジェクトパスが表示された FrameDebug ウィンドウ:**
   ![](/api/media?file=/engine/6000.0/media/images/xcode-frame-debugger-cmd.png)

6. Xcode プロジェクトを実行して、Unity エディターを立ち上げます。

7. 以下のいずれかの方法でフレームキャプチャを実行します。

   * **Unity エディター:** シーンビューやゲームビューの右にある **Xcode Capture** ボタンを使って、フレームキャプチャーを行います。
   * **Xcode:** **Frame Capture** ボタン (カメラアイコン) を選択すると、次のフレームのデータがキャプチャされます。
   * **Script:** `FrameCapture` API を使用します。詳しくは、[FrameCapture API](https://docs.unity3d.com/ScriptReference/Apple.FrameCapture.html) のドキュメントを参照してください。Xcode でのフレームキャプチャデータの分析については、Apple の [Xcode のフレームデバッガーに関するドキュメント](https://developer.apple.com/documentation/metal/frame_capture_debugging_tools) を参照してください。

### Unity エディターからコマンドラインでフレームをキャプチャする##capture-a-frame-from-the-unity-editor-with-the-command-line

ここでは、コマンドラインから Unity エディターを起動し、[FrameCapture API](/engine/6000.0/script-reference/unity-engine-apple/frame-capture.md) を使ってフレームキャプチャを実行し、その結果をディスクに保存する方法を説明します。このワークフローは macOS に対応しています。

1. [FrameCapture.BeginCaptureToFile](/engine/6000.0/script-reference/unity-engine-apple/frame-capture/begin-capture-to-file.md) と [EndCapture](/engine/6000.0/script-reference/unity-engine-apple/frame-capture/end-capture.md) の呼び出しをコードに追加します。これにより、必要に応じてフレームキャプチャを実行できます。
2. `-enable-metal-capture` というフラグを付けて、[コマンドラインから Unity エディターを起動](/engine/6000.0/manual/unity-editor/editor-features/command-line-arguments.md) します。Xcode は、コードのリクエストに応じてフレームキャプチャを実行し、その結果をディスクに保存します。

Xcode でフレームキャプチャデータを分析する方法については、[Xcode のフレームデバッガーに関するドキュメント](https://developer.apple.com/documentation/metal/frame_capture_debugging_tools) を参照してください。

## その他の参考資料##additional-resources:

* [XcScheme API のドキュメント](/engine/6000.0/script-reference/unity-editor/i-os/xcode-xc-scheme.md)
* [FrameCapture API](/engine/6000.0/script-reference/unity-engine-apple/frame-capture.md)
* [コマンドラインから Unity エディターを起動する](/engine/6000.0/manual/unity-editor/editor-features/command-line-arguments.md)
