Xcode 日志记录:“启用金属 API 验证”

Posted

技术标签:

【中文标题】Xcode 日志记录:“启用金属 API 验证”【英文标题】:Xcode logging: "Metal API Validation Enabled" 【发布时间】:2020-06-23 23:45:53 【问题描述】:

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

启用金属 API 验证

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

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

Metal 是否正在我的应用中使用?我可以或应该禁用它吗?

如何禁用此“Metal API Validation Enabled”日志消息?

【问题讨论】:

【参考方案1】:

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

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

这是一个复选框,所以可能的选项是EnabledDisabled

禁用会在您的 .xcscheme 文件中设置密钥 enableGPUValidationMode = 1

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

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

【讨论】:

它有什么用..? 方案>编辑方案...>运行>选项>金属API验证。【参考方案2】:

如何禁用消息:

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

Metal 是否在我的应用中使用?

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

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

我应该禁用 Metal API 验证吗?

启用验证会检查每个 Metal API 调用,这会导致“small, but measurable, impact on CPU performance.”这个验证的目的是

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

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

【讨论】:

NSColor 等 API 正在触发日志记录的详细信息。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

我最近开始着手更新我的 macOS 应用程序。

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

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

然后我查看了界面生成器,我的一个标签处于一个奇怪的位置。 所以我将该标签居中并再次运行应用程序,"fopen failed for data file: errno = 2 (No such file or directory)" 警告消失了。 每当我从该 .storyboard 文件加载该窗口时,它仍然会显示 “Metal API Validation Enabled”,但这并不困扰我。

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

【讨论】:

以上是关于Xcode 日志记录:“启用金属 API 验证”的主要内容,如果未能解决你的问题,请参考以下文章

如何象征崩溃日志Xcode?

从 xcode 运行的 iOS 应用程序向我显示一条消息以启用调试日志记录

Xcode 4.5 - 崩溃日志未符号化

Xcode 自动化 UI 测试日志内存使用情况

在 gitlab 日志中禁用 xcode 警告

5月30日