由于缺少消毒剂,XPC 进程在旧版 macOS 中崩溃

XPC Process Crashes in older macOS due to lack of Sanitizers

当我对内置于 Xcode 9.1 的 macOS 应用程序进行调试构建并将其移动到 Mac 运行 macOS 10.11 或 10.12 进行测试时,我发现我的应用程序的 XPC 进程在加载时崩溃,崩溃报告表明原因是系统无法在旧系统中找到新的消毒剂框架。好的,我知道这些框架在旧的 macOS 版本中不存在。而且,如果我在 运行 > Diagnosics 部分禁用地址消毒器、线程消毒器和未定义的行为消毒器 Xcode中的方案,重新构建,问题解决

有些东西在这里没有意义。为什么 运行 部分 Xcode Scheme 显然会影响 Build?为什么只有XPC进程崩溃?

Why does the Run section of the Xcode Scheme apparently affect the Build?

这确实没有意义,但可能有一个简单的解释。较旧的代码诊断工具(API 检查器、malloc 检查器等)不需要重新编译,因此将它们放入 运行 中是有意义的。消毒剂也是诊断工具,因此开发人员决定最好将它们放在同一个菜单中并强制人们重建应用程序。

Why does only the XPC process crash?

我在这里猜测,但 Asan 初始化通常非常复杂,特别是可能发生在其他库初始化之后。可能是主进程在初始化 Asan 之前启动了 XPC 子进程。