Xcode 日志记录:"Metal API Validation Enabled"
Xcode logging: "Metal API Validation Enabled"
我正在通过 Xcode 构建 macOS 应用程序。每次构建时,我都会得到日志输出:
Metal API Validation Enabled
据我所知,我的应用没有使用任何 Metal 功能。我没有使用硬件加速的 3D 图形或着色器或视频游戏功能或类似的东西。
为什么 Xcode 打印 Metal API 日志输出?
我的应用中是否使用了 Metal?我可以或应该禁用它吗?
如何禁用此"Metal API Validation Enabled"日志消息?
切换 Metal API 通过您的 Xcode 方案验证:
Scheme > Edit Scheme... > Run > Diagnostics > Metal API Validation.
它是一个复选框,所以可能的选项是 Enabled
或 Disabled
。
禁用会在您的 .xcscheme
文件中设置密钥 enableGPUValidationMode = 1
。
禁用后,Xcode 不再记录“Metal API Validation Enabled”日志消息。
注意:在 Xcode11 及以下版本中,该选项出现在方案编辑器的“选项”选项卡中(而不是“诊断”选项卡)。
我收到了完全相同的消息。
我在滚动视图结束时有一个 .onDelete(perform: deleteLocations)
。
我将滚动视图更改为列表,然后消息消失了。
我最近开始更新我的 macOS 应用程序。
它运行良好,没有错误,但后来我从一个较旧的 xcode 项目中添加了一个故事板文件,当我启动 .loadWindow() 时,我在我的日志中看到了这些:
- "Metal API Validation Enabled"
- "fopen failed for data file: errno = 2 (No such file or directory)"
然后我查看了界面生成器,发现我的其中一个标签处于一个奇怪的位置。
所以我再次将那个标签和 运行 应用程序居中,"数据文件的 fopen 失败:errno = 2(没有这样的文件或目录)" 警告消失了。
每当我从该 .storyboard 文件加载 window 时,它仍然显示 "Metal API Validation Enabled",但这不会打扰我。
所以我认为这与操作系统如何绘制 windows 和视图有关,或者可能与界面构建器版本差异有关。
如何禁用消息:
Select 你的方案在上面 window。单击下拉列表中的 Edit Scheme
,转到 Diagnostics
并取消选中 Metal API Validation
复选框。
我的应用中是否使用了 Metal?
是的,即使您的代码不直接与 GPU 交互,许多高级框架也会这样做——特别是 Core Image
、SpriteKit
和 SceneKit
。例如,我将我的应用程序中讨厌的“Metal API Validation Enabled”消息缩小到这一行:
layer.backgroundColor = NSColor(patternImage: image).cgColor
我应该禁用 Metal API 验证吗?
启用验证会检查每个 Metal API 调用,这会导致“small, but measurable, impact on CPU performance.”此验证的目的是
check for code that calls the Metal API incorrectly, including errors in resource creation, encoding Metal commands, and other common tasks.
像 Core Image 这样的 Apple 框架错误地使用 Metal API 的可能性很小,所以如果你的应用程序只使用那些高级 Apple 框架,那么我会说你应该放心禁用 API 验证。摆脱那该死的输出消息是值得冒险的。
我正在通过 Xcode 构建 macOS 应用程序。每次构建时,我都会得到日志输出:
Metal API Validation Enabled
据我所知,我的应用没有使用任何 Metal 功能。我没有使用硬件加速的 3D 图形或着色器或视频游戏功能或类似的东西。
为什么 Xcode 打印 Metal API 日志输出?
我的应用中是否使用了 Metal?我可以或应该禁用它吗?
如何禁用此"Metal API Validation Enabled"日志消息?
切换 Metal API 通过您的 Xcode 方案验证:
Scheme > Edit Scheme... > Run > Diagnostics > Metal API Validation.
它是一个复选框,所以可能的选项是 Enabled
或 Disabled
。
禁用会在您的 .xcscheme
文件中设置密钥 enableGPUValidationMode = 1
。
禁用后,Xcode 不再记录“Metal API Validation Enabled”日志消息。
注意:在 Xcode11 及以下版本中,该选项出现在方案编辑器的“选项”选项卡中(而不是“诊断”选项卡)。
我收到了完全相同的消息。
我在滚动视图结束时有一个 .onDelete(perform: deleteLocations)
。
我将滚动视图更改为列表,然后消息消失了。
我最近开始更新我的 macOS 应用程序。
它运行良好,没有错误,但后来我从一个较旧的 xcode 项目中添加了一个故事板文件,当我启动 .loadWindow() 时,我在我的日志中看到了这些:
- "Metal API Validation Enabled"
- "fopen failed for data file: errno = 2 (No such file or directory)"
然后我查看了界面生成器,发现我的其中一个标签处于一个奇怪的位置。 所以我再次将那个标签和 运行 应用程序居中,"数据文件的 fopen 失败:errno = 2(没有这样的文件或目录)" 警告消失了。 每当我从该 .storyboard 文件加载 window 时,它仍然显示 "Metal API Validation Enabled",但这不会打扰我。
所以我认为这与操作系统如何绘制 windows 和视图有关,或者可能与界面构建器版本差异有关。
如何禁用消息:
Select 你的方案在上面 window。单击下拉列表中的 Edit Scheme
,转到 Diagnostics
并取消选中 Metal API Validation
复选框。
我的应用中是否使用了 Metal?
是的,即使您的代码不直接与 GPU 交互,许多高级框架也会这样做——特别是 Core Image
、SpriteKit
和 SceneKit
。例如,我将我的应用程序中讨厌的“Metal API Validation Enabled”消息缩小到这一行:
layer.backgroundColor = NSColor(patternImage: image).cgColor
我应该禁用 Metal API 验证吗?
启用验证会检查每个 Metal API 调用,这会导致“small, but measurable, impact on CPU performance.”此验证的目的是
check for code that calls the Metal API incorrectly, including errors in resource creation, encoding Metal commands, and other common tasks.
像 Core Image 这样的 Apple 框架错误地使用 Metal API 的可能性很小,所以如果你的应用程序只使用那些高级 Apple 框架,那么我会说你应该放心禁用 API 验证。摆脱那该死的输出消息是值得冒险的。