当我使用内置Xcode 9.1的macOS应用程序的Debug Build,并将其移动到运行macOS 10.11或10.12进行测试的Mac时,我发现我的应用程序的XPC进程在加载时崩溃,崩溃报告指出原因是系统无法在旧系统中找到新的清洁剂框架。好的,我知道这些框架在较旧的macOS版本中不存在。并且,如果我在Xcode中的Scheme的Run> Diagnosics部分中禁用了Address Sanitizer,Thread Sanitizer和Undefined Behavior Sanitizer,并重建,问题就解决了。
有些事情在这里没有意义。为什么Xcode Scheme的Run部分显然会影响Build?为什么只有XPC进程崩溃?
为什么Xcode Scheme的Run部分显然会影响Build?
这确实没有意义,但可能有一个简单的解释。较旧的代码诊断工具(API检查器,malloc检查器等)不需要重新编译,因此将它们放入Run中是有意义的。消毒剂也是诊断工具,因此开发人员认为最好将它们放在同一菜单中并迫使人们重建应用程序。
为什么只有XPC进程崩溃?
我在这里猜测,但Asan初始化通常非常复杂,特别是在其他库初始化之后可能会发生。在初始化Asan之前,可能是主进程启动了XPC子进程。