在 XCode 11 上哪里可以找到 "Log Dyld API Usage" 和 "Log Library Loads"?

Where to find "Log Dyld API Usage" and "Log Library Loads" on XCode 11?

我想在 XCode 控制台中禁用记录动态加载程序事件 (dyld) 的打印。我找到了解决方案 here。 但是我在 XCode 11 的产品方案诊断中找不到 Log Dyld API UsageLog Library Loads 选项.请帮我找到他们。

PS: 如果Xcode11中有新的禁用日志的进程,请告诉我。

答案:下面的答案中建议了这个分步解决方案。我只是附上这张图片以便更好地理解。

动态加载器

有人会说您可以设置环境变量,例如 DYLD_PRINT_APIS=0DYLD_PRINT_APIS=falseDYLD_PRINT_APIS=no,...但这种方式不起作用。检查 source code:

else if ( strcmp(key, "DYLD_PRINT_APIS") == 0 ) {
    gLogAPIs = true;
}

换句话说,当变量存在时,gLogAPIs就是true。您可以将其设置为任何值,将其保留为空,如果变量存在,它将始终启用。

Xcode 方案

UI 这个设置在 Xcode 11 中消失了,但它仍然可以在方案文件中。假设您有一个简单的项目 Foo。该方案位于Foo/Foo.xcodeproj/xcshareddata/xcschemes/Foo.xcscheme1)。这是一个 XML 文件。退出 Xcode 并在任何编辑器中打开此文件并搜索 LaunchAction 元素。

将会有:

  • LaunchAction 元素属性如 enableAddressSanitizer = "YES"2)
  • DYLD_... 环境变量设置。

只需删除这个 attribute/environment 变量,您应该没问题。


1) 确切的路径可能会有所不同,因为它可以将方案包含在工作区、项目...

2) 我没有安装 Xcode 的先前版本 (10),无法检查确切名称,但它应该在那里很明显是哪一个。这个,我用过,用于地址消毒器复选框。如果您找到确切的名称,请告诉我,我会更新此答案或自己回答,然后我会删除这个。


更新

上面的说明帮助 OP 找到准确的 XML 元素名称。一个必须删除:

  • LaunchAction/AdditionalOptions/AdditionalOption 个元素
  • 其中 keyDYLD_PRINT_LIBRARIES and/or DYLD_PRINT_APIS