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 验证。
这是一个复选框,所以可能的选项是Enabled
或Disabled
。
禁用会在您的 .xcscheme
文件中设置密钥 enableGPUValidationMode = 1
。
禁用后,Xcode 不再记录“Metal API Validation Enabled”日志消息。
注意:在 Xcode 11 及更低版本中,该选项出现在方案编辑器的“选项”选项卡中(而不是“诊断”选项卡)。
【讨论】:
它有什么用..? 方案>编辑方案...>运行>选项>金属API验证。【参考方案2】:如何禁用消息:
在窗口顶部选择您的方案。点击下拉列表中的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.”这个验证的目的是
检查错误调用 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 验证”的主要内容,如果未能解决你的问题,请参考以下文章