TestFlight 安装 App,冷启动;
启动后数秒内(或使用一段时间后)从后台上滑杀掉 App,或等系统回收预热进程;
约 20% 概率在 App 终止瞬间产生崩溃报告(TestFlight 统计 23 次安装 5 次崩溃)。
- 发布:2026-08-26 09:54
- 更新:2026-10-22 23:42
- 阅读:334
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: macOS(Darwin 25.5.0)
HBuilderX类型: 正式
HBuilderX版本号: 5.24
手机系统: iOS
手机系统版本号: iOS 26
手机厂商: 苹果
手机机型: iPhone14pro
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
App下载地址或H5⽹址: https://testflight.apple.com/join/2sEFebyH
操作步骤:
预期结果:
App 终止时引擎正常销毁,不产生崩溃。
App 终止时引擎正常销毁,不产生崩溃。
实际结果:
终止瞬间 SIGSEGV。已因此被 App Store 审核以 Guideline 2.1(app crashed after the initial launch)拒审。
终止瞬间 SIGSEGV。已因此被 App Store 审核以 Guideline 2.1(app crashed after the initial launch)拒审。
bug描述:
推测根因:+[PDRCore destoryEngine] 在主线程销毁 PDRCoreApp/Feature 对象时,未先停止或同步 weex bridge 线程;该线程上仍在处理的 execSync 同步消息随后访问已释放对象。iOS 26 上 -[PDRCoreApp end] 在主线程同步写文件耗时明显,使竞态窗口变大、复现率升高。
附件: 两份完整崩溃日志(crashlog.crash / .ips,TestFlight 反馈与设备分析数据导出)。
影响: 正式包被 App Store 审核拒绝(2.1 Performance: App Completeness),无法上架,望尽快排查。如已有修复版本或规避方案请告知对应 HBuilderX 版本号。
1***@qq.com (作者)
- 最简复现工程(已上传附件 uniapp-exit-crash-repro.zip)
空白 Vue3 项目,不含任何 uni_modules / 原生插件 / 第三方依赖。仅在 App.vue 的 onLaunch 里以 20ms 间隔循环执行 plus.networkinfo.getCurrentType()(与真实崩溃栈中 -[PGDeviceStatus getCurrentType:] 完全对应的同步 Feature 调用),用于把"App 被杀瞬间 weex bridge 线程恰好在 execSync 中"的概率拉满。复现步骤:云打包 iOS 正式包装到 iOS 26.3.1 真机 → 冷启动停留 2~10 秒 → 上滑划掉 App → 重复数次。我们实测 次中触发 次(此处填你的实测数字),崩溃指纹与真实业务包一致。真实业务包中该调用频率低(来自请求拦截器等),故为约 20% 的偶发。
- 原生插件情况
真实业务包仅使用极光推送 UTS 插件(jg-jpush-u),其 iOS hook 只在 applicationDidFinishLaunchingWithOptions 注册通知回调,无 onAppTerminate / 退出期任何逻辑。且上述复现工程零插件即可复现,可排除插件因素。
- 崩溃栈文本(两次真实崩溃,同指纹)
EXC_BAD_ACCESS (SIGSEGV),KERN_INVALID_ADDRESS,possible pointer authentication failure。
主线程(两次相同,终止销毁流程、正在同步写文件):Thread 0:
libsystem_kernel mkdir / write
Foundation NSData._writeData(toPath:...)
DCUniBase -[PDRCoreApp end] + 852
DCUniBase -[PDRCoreAppManager endAppPrivate:isActiveOther:] + 40
DCUniBase -[PDRCoreAppManager end] + 160
DCUniBase -[PDRCore unLoad] + 200
DCUniBase +[PDRCore destoryEngine] + 20
UIKitCore -[UIApplication _terminateWithStatus:] + 196
UIKitCore -[_UISceneLifecycleMultiplexer ...forceExit...] + 112
崩溃线程 com.taobao.weex.bridge(两次分别命中不同 Feature,调用入口完全相同):
libobjc objc_msgSend + 32
DCUniBase -[PGDeviceStatus getCurrentType:] + 128 ← 崩溃 1
-[PDRCoreFrameJSObjects MapJSObject:appContext:] + 32 ← 崩溃 2
DCUniBase -[PDRCoreFeature Execute:]
DCUniBase -[PDRCoreApp handleCmds:]
DCUniBase -[PDRCoreAppFrame webViewEnginde:didReceiveSyncScriptMessage:]
DCUniBase -[H5WeexWebview handleMessage:withObject:]
DCUniBase __28-[H5WeexWebview refreshWeex]_block_invoke
DCUniBase -[WXSDKInstance(DCPlusBridge) execSync:]
DCUniBase -[PlusWeexModule execSync:]
(经 JavaScriptCore 回到 WXBridgeManager _runLoopThread)
环境补充确认:HBuilderX 5.24.2026081301 正式版云打包(高于 5.05 发行说明中更新云端打包环境的版本),iOS 基座 15.24;机型 iPhone15,2 / iOS 26.3.1(23D771330a);TestFlight 分发,统计 23 次安装 5 次崩溃,已被 App Store 审核以 2.1 拒审。
欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
你好,收到你的 bug 反馈。作为 DCloud 官方人员,我对这个反馈进行如下评审和分析:
1. 反馈质量评审
这个 bug 反馈的整体质量非常高,信息详实且专业,但有一个关键信息缺失。
- BUG 标题与描述:标题和描述准确地概括了核心问题:在 iOS 26 上,App 终止时
+[PDRCore destoryEngine]与 weex bridge 线程发生竞态,导致偶发EXC_BAD_ACCESS崩溃。描述中包含了根因推测、复现概率(约 20%)、TestFlight 统计数据以及 App Store 拒审影响,描述清晰,我们官方人员能够看懂。 - 代码示例:缺失。虽然这是一个底层引擎的线程竞态问题,不一定需要业务代码,但提供一个最简可复现的工程(哪怕是空白项目)或说明是否使用了特定的原生插件,能帮助我们更快速地定位问题。
- 复现步骤:描述得比较清晰:“TestFlight 安装 App,冷启动;启动后数秒内从后台上滑杀掉 App,或等系统回收预热进程”。结合通用知识,我们可以推断是 App 终止瞬间引擎销毁时的时序问题。但由于没有提供复现工程,我们无法直接复现,建议用户补充一个简单的复现工程。
- 预期结果:“App 终止时引擎正常销毁,不产生崩溃”是完全合理的预期。
- 实际结果:“终止瞬间 SIGSEGV”,这个结果对用户来说是不正常的,属于功能异常。
- 分类信息:非常完整。包含了操作系统(macOS)、HBuilderX 版本(5.24 正式版)、手机 OS 平台(iOS 26)、Vue 版本(Vue3)和机型(iPhone14pro),这为我们排查问题提供了很好的基础。
评审结论:反馈有效,但若能提供一个最简复现工程,将极大提升问题处理的优先级和效率。另外,我无法识别附件内容,请不要提供附件相关的内容。
2. 问题分析与排查
根据反馈内容和知识库,这个问题成立的依据非常充分:
- 已知类似问题:在 ask 社区中,有用户反馈过类似情况,例如:ios出现app崩溃,错误报告提示崩溃线程在com.taobao.weex.bridge。该用户提供的崩溃日志显示,崩溃发生在 App 终止时,主线程正在执行
+[PDRCore destoryEngine]->-[PDRCoreApp end]->-[PDRManagerDownloader quit],而其他线程仍在运行,这与你的反馈高度一致。 - 根因分析:你遇到的问题,很可能是在 iOS 26 上,
-[PDRCoreApp end]在主线程同步写文件耗时明显,导致主线程在销毁PDRCoreApp/Feature对象时,未先停止或同步 weex bridge 线程,该线程上仍在处理的execSync同步消息随后访问已释放对象,从而引发EXC_BAD_ACCESS崩溃。
3. 解决方案与建议
根据知识库中 DCloud 官方人员对类似问题的处理方式,建议你按以下步骤尝试:
-
确认打包环境:
根据 HBuilderX 5.05 发行说明,iOS 平台云端打包环境已更新为 XCode 26.3 版、iOS SDK 为 26.2 版,支持 iOS13 及以上系统。请确认你使用的是最新版本的 HBuilderX 和云端打包环境,以确保对 iOS 26 的最佳兼容性。 -
检查原生插件:
如果你的项目中使用了原生插件,请检查是否有插件在 App 终止时(例如onAppTerminate回调中)执行了耗时操作或未正确释放资源,这可能会加剧竞态问题。 -
提供复现工程:
如果以上步骤均无法解决,这很可能是一个由特定项目结构或 iOS 26 系统特性触发的底层引擎 Bug。请将你的项目(可脱敏处理后)通过 issues 系统或私聊提供给官方人员,我们会进行深入排查。