我正在通过 Xcode 构建一个 macOS 应用程序。每次构建时,我都会得到日志输出:
启用金属 API 验证
据我所知,我的应用程序没有使用任何 Metal 功能。我没有使用硬件加速的 3D 图形或着色器或视频游戏功能或类似的东西。
为什么 Xcode 打印 Metal API 日志输出?
我的应用程序中是否使用了 Metal?我可以或应该禁用它吗?
如何禁用此“启用金属 API 验证”日志消息?
通过 Xcode 方案切换 Metal API 验证:
方案 > 编辑方案... > 运行 > 诊断 > 金属 API 验证。
这是一个复选框,因此可能的选项是Enabled
or Disabled
。
禁用会enableGPUValidationMode = 1
在.xcscheme
文件中设置密钥。
禁用后,Xcode 不再记录“Metal API Validation Enabled”日志消息。
注意:在 Xcode 11 及更低版本中,该选项出现在方案编辑器的“选项”选项卡中(而不是“诊断”选项卡)。
在窗口顶部选择您的方案。单击Edit Scheme
下拉菜单,转到Diagnostics
并取消选中该Metal API Validation
复选框。
是的,即使您的代码不直接与 GPU 交互,许多高级框架也会这样做——特别Core Image
是 、SpriteKit
和SceneKit
. 例如,我将应用程序中讨厌的“Metal API Validation Enabled”消息缩小到这一行:
layer.backgroundColor = NSColor(patternImage: image).cgColor
启用验证会检查每个 Metal API 调用,这会对 CPU 性能造成“小而可衡量的影响”。此验证的目的是
检查错误调用 Metal API 的代码,包括资源创建错误、编码 Metal 命令和其他常见任务。
像 Core Image 这样的 Apple 框架错误地使用 Metal API 的可能性非常低,所以如果您的应用程序只使用那些高级 Apple 框架,那么我会说您应该放心禁用 API 验证。摆脱那个该死的输出消息是值得冒险的。
我收到了完全相同的信息。
我.onDelete(perform: deleteLocations)
在滚动视图关闭的末尾有一个。
我将滚动视图更改为列表,消息消失了。
我最近开始努力更新我的 macOS 应用程序。
它运行良好,没有错误,但后来我从一个较旧的 xcode 项目中添加了一个故事板文件,当我触发 .loadWindow() 时,我在我的日志中看到了这些:
- “启用金属 API 验证”
- “数据文件的 fopen 失败:errno = 2(没有这样的文件或目录)”
然后我查看了界面生成器,我的一个标签处于一个奇怪的位置。所以我将该标签居中并再次运行应用程序,“fopen 数据文件失败:errno = 2(没有这样的文件或目录)”警告消失了。每当我从该 .storyboard 文件加载该窗口时,它仍然显示“已启用金属 API 验证”,但这并不困扰我。
所以我认为这与操作系统如何绘制窗口和视图有关,或者可能与界面生成器版本差异有关。