NO_CRASH_STACK崩溃报告求助:符号缺失问题判断验证
你的判断完全正确,问题确实出在你怀疑的那行代码上,且是部分iOS版本缺少对应API导致的启动崩溃,和地区无关,具体分析如下:
崩溃日志核心信息解读
从Finder中查看的崩溃详情明确显示:
Exception Type: EXC_CRASH (SIGABRT)
Termination Reason: DYLD 4 Symbol missing
Symbol not found: _$s10Foundation26MeasurementFormatUnitUsageVAASo14NSUnitPressureCRszrlE10barometricACyAEGvgZ
这个缺失的符号对应Swift API MeasurementFormatUnitUsage.barometric——也就是你代码中.measurement(width: .abbreviated, usage: .barometric)里的.barometric参数。
代码关联验证
你怀疑的代码行:
Text(currentWeather.pressure.formatted(.measurement(width: .abbreviated, usage: .barometric)))
确实直接调用了barometric这个枚举值,而该API是iOS 16.0及以上版本的Foundation框架才新增的,在iOS 15及更低版本的系统中不存在这个符号。当App在这些低版本系统启动时,dyld(动态链接器)会因为找不到该符号直接触发启动崩溃,这和你看到的(terminated at launch; ignore backtrace)日志完全吻合。
补充说明
这类崩溃属于启动时的动态链接错误,不会生成完整的应用线程栈,所以你在Organizer里看到的是NO_CRASH_STACK标记,且崩溃发生在App启动阶段,无法进入运行时。
内容的提问来源于stack exchange,提问作者Alexnnd

