iOS - 如何理解和正确调试此类崩溃:com.apple.root.background-qos?

iOS - How to understand and properly debug this type of crash : com.apple.root.background-qos?

我知道这个问题已经被问过好几次了,但要么没有得到回答,要么答案完全没有帮助。

这是我的崩溃报告:

尤其是评论帮助我理解了(某种程度上)我的问题。

It seems from your crash log com.apple.root.background-qos, this is the thread request which might be over committed due to which it exist as it cannot take any more request.

如果我没理解错,处理请求的线程可能无法处理更多的请求?

如何调试和测试它?我无法重现崩溃。

注意: 在我的启动器服务中,我正在执行 5 或 6 个请求,每个请求在 dispatchGroup.enter / .leave 完成后分开,如下所示:

dispatchGroup.enter()
self.fetchObservationForecast(lat: lat, lon: lon) { result in
     switch result {
     case .success(let observationForecast) :
          print("Observation Forecast request succeeded")
          model["observationForecast"] = observationForecast
          break
     case .failure(let error) :
          print("Observation Forecast request failed : \(error)")
          model["observationForecast"] = error
          break
     }
     dispatchGroup.leave()
}

我是不是看错地方了?我如何测试和重现它以提交修复?

如有任何帮助,我们将不胜感激。

崩溃是由指示的 LauncherService 方法中的闭包引起的。跟踪表明您在设置字典值时崩溃了。

可变 Swift 字典不是线程安全的,这个事实连同 background.qos 指示器让我认为你是 reading/writing 多线程上的字典。

这可能类似于下面的 model["observationForecast"] = 代码。

dispatchGroup.enter()
self.fetchObservationForecast(lat: lat, lon: lon) { result in
     switch result {
     case .success(let observationForecast) :
          print("Observation Forecast request succeeded")
          model["observationForecast"] = observationForecast
          break
     case .failure(let error) :
          print("Observation Forecast request failed : \(error)")
          model["observationForecast"] = error
          break
     }
     dispatchGroup.leave()
}