雨点
雨点
  • 发布:2025-12-09 19:57
  • 更新:2025-12-10 01:11
  • 阅读:23

【报Bug】iOS 端 App 被 Watchdog 杀死,主线程卡死在 H5CoreExceptionHandler → PTNetInfo → CoreTelephony

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 家庭中文版

HBuilderX类型: 正式

HBuilderX版本号: 4.85

手机系统: iOS

手机系统版本号: iOS 26

手机厂商: 苹果

手机机型: iPhone 14 Pro Max

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:
  1. 打开 App(UniApp 打包 iOS 应用)。
  2. 正常进入首页。
  3. 将 App 切到后台约 1~2 分钟。
  4. 再次切回前台。
  5. 会出现 App 直接被系统关闭的情况(没有进入 JS 层,没有报错提示)。
  6. 在 Xcode 查看 crash log,崩溃码为 0x8BADF00D(watchdog)。

预期结果:

App 应正常从后台恢复前台显示,不应该被系统 watchdog 判定为无响应。

实际结果:

App 切回前台时直接被系统杀死,出现 watchdog 崩溃:

错误码:
0x8BADF00D
"scene-update watchdog transgression (exceeded 10 seconds limit)"

关键主线程调用栈如下:

+[H5CoreExceptionHandler getParametersWithLog:]
+[H5CoreExceptionHandler getParametersWithLog:withType:withCurApp:withJSUrl:]
+[PTNetInfo netType]
+[PTNetInfo reachabilityStatusForFlags:]
-[CTTelephonyNetworkInfo init]
-[CoreTelephonyClient synchronousProxyWithErrorHandler:]
_dispatch_sync_f_slow

分析:UniApp / 5+ 运行时内部(H5CoreExceptionHandler → PTNetInfo)在主线程同步调用 CoreTelephony 以获取网络类型,导致主线程 10 秒无响应,被 iOS watchdog 强制终止。

bug描述:

我们上线的 UniApp App 在 iOS(尤其是 iOS 16/17/18 Beta)设备上多次出现被系统直接杀死的问题,错误码为 0x8BADF00D,属典型的 Watchdog 10 秒超时崩溃。

苹果Crash Log调用链如下:

Thread 0 Crashed:
+[H5CoreExceptionHandler getParametersWithLog:]
+[H5CoreExceptionHandler getParametersWithLog:withType:withCurApp:withJSUrl:]
+[PTNetInfo netType]
+[PTNetInfo reachabilityStatusForFlags:]
-[CTTelephonyNetworkInfo init]
-[CoreTelephonyClient synchronousProxyWithErrorHandler:]
_dispatch_sync_f_slow
→ 被 FrontBoard watchdog 杀死(foreground 10s timeout)

系统报告:
scene-update watchdog transgression: exhausted real (wall clock) time allowance of 10.00 seconds
code: 0x8BADF00D

2025-12-09 19:57 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该bug反馈内容较为完整,问题描述清晰详细,包含崩溃调用栈、错误码(0x8BADF00D)、复现步骤及环境信息。反馈中明确指出主线程同步调用CoreTelephony导致iOS Watchdog 10秒超时,符合iOS系统机制特性。分类信息完整,包含HBuilderX 4.85版本、iOS 26系统、Vue3等关键信息。

经核查知识库,发现多个iOS平台相关修复记录:4.81版本修复了video组件在nvue页面返回时可能引发崩溃的问题;4.82版本修复了iOS平台input组件在scrollView中的键盘遮挡问题;4.83版本新增了对iPhone 17系列设备的支持。特别值得注意的是,知识库中多次提及iOS 18系统兼容性修复(如"iOS平台 修复 iOS 18 系统调用拨打电话等API失败的Bug"),而用户反馈问题在iOS 16/17/18 Beta设备频发,表明该问题具有平台相关性。

该bug成立,属于典型的iOS主线程阻塞问题。知识库显示DCloud持续优化iOS平台兼容性,但未直接提及H5CoreExceptionHandler→PTNetInfo调用链的修复。建议用户升级至最新HBuilderX正式版(当前知识库最新记录为4.83.2025101713-alpha),因后续版本可能已包含网络检测异步化优化。若仍复现,可参考App-iOS平台注意事项调整网络请求逻辑,避免主线程同步调用系统API。

内容为 AI 生成,仅供参考
雨点

雨点 (作者)

目前的解决方式是找到iOS的crash日志,定位卡死的函数,写一段hook替换掉原来卡死的函数

要回复问题请先登录注册