21

我正在通过 Xcode 构建一个 macOS 应用程序。每次构建时,我都会得到日志输出:

启用金属 API 验证

据我所知,我的应用程序没有使用任何 Metal 功能。我没有使用硬件加速的 3D 图形或着色器或视频游戏功能或类似的东西。

为什么 Xcode 打印 Metal API 日志输出?

我的应用程序中是否使用了 Metal?我可以或应该禁用它吗?

如何禁用此“启用金属 API 验证”日志消息?

4

4 回答 4

41

通过 Xcode 方案切换 Metal API 验证:

方案 > 编辑方案... > 运行 > 诊断 > 金属 API 验证。

这是一个复选框,因此可能的选项是Enabledor Disabled

禁用会enableGPUValidationMode = 1.xcscheme文件中设置密钥。

禁用后,Xcode 不再记录“Metal API Validation Enabled”日志消息。

注意:在 Xcode 11 及更低版本中,该选项出现在方案编辑器的“选项”选项卡中(而不是“诊断”选项卡)。

于 2020-03-11T23:00:37.097 回答
3

如何禁用消息:

在窗口顶部选择您的方案。单击Edit Scheme下拉菜单,转到Diagnostics并取消选中该Metal API Validation复选框。

我的应用程序中是否使用了 Metal?

是的,即使您的代码不直接与 GPU 交互,许多高级框架也会这样做——特别Core Image是 、SpriteKitSceneKit. 例如,我将应用程序中讨厌的“Metal API Validation Enabled”消息缩小到这一行:

layer.backgroundColor = NSColor(patternImage: image).cgColor

我应该禁用 Metal API 验证吗?

启用验证会检查每个 Metal API 调用,这会对 CPU 性能造成“小而可衡量的影响”。此验证的目的是

检查错误调用 Metal API 的代码,包括资源创建错误、编码 Metal 命令和其他常见任务。

像 Core Image 这样的 Apple 框架错误地使用 Metal API 的可能性非常低,所以如果您的应用程序只使用那些高级 Apple 框架,那么我会说您应该放心禁用 API 验证。摆脱那个该死的输出消息是值得冒险的。

于 2022-01-16T06:00:10.630 回答
1

我收到了完全相同的信息。

.onDelete(perform: deleteLocations)在滚动视图关闭的末尾有一个。

我将滚动视图更改为列表,消息消失了。

于 2020-07-11T13:36:14.157 回答
0

我最近开始努力更新我的 macOS 应用程序。

它运行良好,没有错误,但后来我从一个较旧的 xcode 项目中添加了一个故事板文件,当我触发 .loadWindow() 时,我在我的日志中看到了这些:

  • “启用金属 API 验证”
  • “数据文件的 fopen 失败:errno = 2(没有这样的文件或目录)”

然后我查看了界面生成器,我的一个标签处于一个奇怪的位置。所以我将该标签居中并再次运行应用程序,“fopen 数据文件失败:errno = 2(没有这样的文件或目录)”警告消失了。每当我从该 .storyboard 文件加载该窗口时,它仍然显示“已启用金属 API 验证”,但这并不困扰我。

所以我认为这与操作系统如何绘制窗口和视图有关,或者可能与界面生成器版本差异有关。

于 2020-11-21T07:12:19.000 回答