# 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 时才有效。
* Xcode 仅支持 macOS 上的 Metal 图形 API。
* 如果 Unity 使用其他图形 API，则 Xcode 集成将被禁用，直到您选择一个受支持的图形 API。

## 从应用程序捕获帧##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：启用**创建 Xcode 项目 (Create Xcode Project)** 选项
3. 点击构建 (Build)。

要使用其他 Xcode 项目启动 macOS 应用程序：

1. 在 Xcode 中，创建一个新的空 macOS 项目，或者打开一个现有的 macOS 项目。
2. 转到产品 (Product) > 方案 (Scheme) > 编辑方案 (Edit scheme)，并打开信息 (Info) 选项卡。
3. 将 **Executable** 设置为已构建的 Unity 应用程序。

**2.编辑 Xcode 项目方案，以便可以执行帧捕获。**

您可以使用 Xcode 图形界面进行此操作。为此，请按照 Xcode 文档中的[启用帧捕获指南](https://developer.apple.com/documentation/metal/frame_capture_debugging_tools/enabling_frame_capture)将项目方案的 GPU **帧捕获**设置为 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 文档中的启用帧捕获指南](https://developer.apple.com/documentation/metal/frame_capture_debugging_tools/enabling_frame_capture)，将项目方案的 **GPU 帧捕获 (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 编辑器：\*\*在 Unity 编辑器中，使用 Scene 视图或 Game 视图右侧的 **Xcode Capture** 按钮执行帧捕获。
   * **Xcode：**按下**帧捕获 (Frame Capture)** 按钮（摄像机图标），以捕获下一帧数据。
   * \*\*脚本：\*\*使用 `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. 使用以下标志从命令行[启动 Unity 编辑器](/engine/6000.0/manual/unity-editor/editor-features/command-line-arguments.md)：`-enable-metal-capture`。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)
