1***@qq.com
1***@qq.com
  • 发布:2026-08-26 09:54
  • 更新:2026-10-22 23:42
  • 阅读:334

iOS 26 云打包 App 终止时 destoryEngine 与 weex bridge 线程竞态导致偶发崩溃(EXC_BAD_ACCESS,附两份崩溃日志)

分类:uni-app

产品分类: 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

操作步骤:

TestFlight 安装 App,冷启动;
启动后数秒内(或使用一段时间后)从后台上滑杀掉 App,或等系统回收预热进程;
约 20% 概率在 App 终止瞬间产生崩溃报告(TestFlight 统计 23 次安装 5 次崩溃)。

预期结果:

App 终止时引擎正常销毁,不产生崩溃。

实际结果:

终止瞬间 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 版本号。

2026-08-26 09:54 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com (作者)

  1. 最简复现工程(已上传附件 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% 的偶发。

  1. 原生插件情况

真实业务包仅使用极光推送 UTS 插件(jg-jpush-u),其 iOS hook 只在 applicationDidFinishLaunchingWithOptions 注册通知回调,无 onAppTerminate / 退出期任何逻辑。且上述复现工程零插件即可复现,可排除插件因素。

  1. 崩溃栈文本(两次真实崩溃,同指纹)

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 拒审。

Ask小助手

Ask小助手

欢迎到专业群( 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 官方人员对类似问题的处理方式,建议你按以下步骤尝试:

  1. 确认打包环境:
    根据 HBuilderX 5.05 发行说明,iOS 平台云端打包环境已更新为 XCode 26.3 版、iOS SDK 为 26.2 版,支持 iOS13 及以上系统。请确认你使用的是最新版本的 HBuilderX 和云端打包环境,以确保对 iOS 26 的最佳兼容性。

  2. 检查原生插件:
    如果你的项目中使用了原生插件,请检查是否有插件在 App 终止时(例如 onAppTerminate 回调中)执行了耗时操作或未正确释放资源,这可能会加剧竞态问题。

  3. 提供复现工程:
    如果以上步骤均无法解决,这很可能是一个由特定项目结构或 iOS 26 系统特性触发的底层引擎 Bug。请将你的项目(可脱敏处理后)通过 issues 系统或私聊提供给官方人员,我们会进行深入排查。

内容为 AI 生成,仅供参考
我陈独秀先秀

我陈独秀先秀

遇到了同样的问题,
iOS 26 上、Xhbuilder 5.24、iPhone 17 Pro Max、TestFlight
感觉是升级到特定版本后产生的 bug

BeShine

BeShine

我这边在关掉WIFI的情况下几乎是必现的

要回复问题请先登录或注册