z***@zhongruigroup.com
z***@zhongruigroup.com
  • 发布:2026-07-29 14:23
  • 更新:2026-07-29 14:25
  • 阅读:70

【报Bug】nvue实现的map地图,iOS用户在放大地图的时候app崩溃

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: MacOS26

HBuilderX类型: 正式

HBuilderX版本号: 5.15

手机系统: iOS

手机系统版本号: iOS 26

手机厂商: 苹果

手机机型: iPhone 17 Pro Max

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

App下载地址或H5⽹址: https://apps.apple.com/app/id6747565388

示例代码:

/home/index.nvue页面

<template>  
  <view class="page">  
    <!-- 地图区域(始终渲染,确保 mapContext 在 onReady 时即可拿到有效引用) -->  
    <view class="map-container">  
      <map  
        id="map-home"  
        ref="mapRef"  
        class="map"  
        :scale="mapScale"  
        :latitude="latitude"  
        :longitude="longitude"  
        :circles="mapCircles"  
        :show-location="false"  
        :enable-satellite="isSatelliteMap"  
        :polyline="mapPolyline"  
        @tap="onMapTap"  
      >  
        <PetLocationCallout  
          v-if="isShowCalloutSlot"  
          :map-markers="mapMarkers"  
          :pet-info="petInfo"  
          :device-info="deviceInfo"  
          :nearby-user-info-list="nearbyUserInfoList"  
          :user-info="userInfo"  
          :is-walking-together="  
            isLocalWalkingTogether || deviceInfo?.jsonData?.nearbyUserCenterIds?.length > 0  
          "  
        />  
      </map>  

      <!-- 地图工具区域 -->  
      <view class="map-tools">  
        <view  
          class="map-tools-item"  
          v-for="(item, index) in mapToolsList"  
          :key="index"  
          @click="clickMapTools(item.type)"  
        >  
          <image :src="item.icon" alt="" mode="aspectFit" class="item-image" :style="item.style" />  
        </view>  
      </view>  

      <!-- 地图logo栏(安卓审核) -->  
      <view class="map-logo">  
        <image src="/static/images/home/amap_logo.webp" mode="aspectFit" class="logo-image" />  
      </view>  

      <!-- 设备号和工作模式调试信息 -->  
      <text class="device-debug-info">  
        v{{ appVersion }} - {{ deviceInfo?.jsonData?.deviceNumber || '' }} - {{ workerMode }}  
      </text>  
    </view>  
  </view>  
</template>

操作步骤:

用户在开启寻宠时,放大地图

预期结果:

app闪退,高复现率

实际结果:

正常放大不闪退

bug描述:

Incident Identifier: 19C0417E-BFBC-4635-9DA3-4DE6E08CD4FA  
CrashReporter Key:   630ba61881b9e96cee2587c9d51617a15df4d832  
Hardware Model:      iPhone18,2  
Process:             UNI8BAF5D0 [21795]  
Path:                /private/var/containers/Bundle/Application/042F420A-7FAD-45F2-B080-C334972DFC85/UNI8BAF5D0.app/UNI8BAF5D0  
Identifier:          com.qdzr.pet  
Version:             35 (1.3.0)  
Code Type:           ARM-64 (Native)  
Role:                Foreground  
Parent Process:      launchd [1]  

Date/Time:           2026-07-29 13:35:55.061 +0800  
OS Version:          iOS 26.5.2 (23F84)  
Report Version:      104  

Exception Type:  EXC_CRASH (SIGABRT)  
Exception Codes: 0x00000000 at 0x0000000000000000  
Triggered by Thread:  48  

Application Specific Information:  
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread.'  

Thread 0:  
0   libsystem_kernel.dylib          0x0000000246624cd4 0x246624000 + 3284  
1   libsystem_kernel.dylib          0x000000024662830c 0x246624000 + 17164  
2   libsystem_kernel.dylib          0x000000024662822c 0x246624000 + 16940  
3   libsystem_kernel.dylib          0x0000000246628078 0x246624000 + 16504  
4   CoreFoundation                  0x00000001974da344 0x197475000 + 414532  
5   CoreFoundation                  0x00000001974a4310 0x197475000 + 193296  
6   CoreFoundation                  0x00000001974a354c 0x197475000 + 189772  
7   GraphicsServices                0x000000023cc47498 0x23cc46000 + 5272  
8   UIKitCore                       0x000000019d19c244 0x19d07b000 + 1184324  
9   UIKitCore                       0x000000019d107158 0x19d07b000 + 573784  
10  UNI8BAF5D0                      0x0000000100b38068 0x100b34000 + 16488  
11  (null)  0x00000001940b1c1c 0x0 + 6778723356

崩溃错误详情请见附件内容,

2026-07-29 14:23 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

好的,收到你的 bug 反馈。作为 DCloud 官方人员,我对这个反馈进行如下评审和分析:

1. 反馈质量评审

这个 bug 反馈的日志信息非常详细,但在代码和复现工程方面存在缺失,具体如下:

  • BUG 标题与描述:标题准确地概括了核心问题,描述中提供了完整的 iOS 崩溃日志。日志显示崩溃原因为 NSInternalInconsistencyException,提示 Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread. 这说明是在后台线程修改了 UI 布局引擎导致崩溃,方向很清晰,官方人员能够看懂。
  • 代码示例:不完整。你提供了 /home/index.nvue<template> 部分,但缺失了 <script><style> 部分。更关键的是,代码中引用了自定义组件 <PetLocationCallout>,且地图的 markerspolyline 等数据来源于变量绑定,但没有提供这些数据的初始化和更新逻辑。由于无法直接运行,我们难以判断是否是在寻宠过程中后台线程高频更新地图数据或自定义气泡导致的布局冲突。
  • 复现步骤:描述为“用户在开启寻宠时,放大地图”。由于缺少完整的代码和可运行工程,官方人员无法根据该步骤直接复现问题。崩溃是在特定业务逻辑(开启寻宠)下触发的,需要结合完整的业务代码才能定位。
  • 预期结果:“app闪退,高复现率”属于笔误,正确的预期结果应该是你填写的“正常放大不闪退”。预期合理。
  • 实际结果:“正常放大不闪退”同样属于笔误,实际结果应为“app闪退,高复现率”。现象描述是正常的。
  • 分类信息:非常完整。包含了 HBuilderX 版本(5.15 正式版)、手机 OS 平台与版本(iOS 26)、Vue 版本(Vue3)和机型(iPhone 17 Pro Max),为排查问题提供了很好的基础。

评审结论:反馈包含有价值的崩溃日志,但代码示例不完整且不可直接运行,复现步骤缺乏配套的运行环境。建议补充一个最简可复现的完整工程(包含 PetLocationCallout 组件及数据更新逻辑),以便我们快速定位问题。


2. 问题分析与排查

根据提供的崩溃日志和知识库信息,针对该问题有以下几个分析方向:

  • nvue 体系与维护状态:在知识库中,针对 nvue 页面在 iOS 端的各类兼容性及渲染问题,官方给出的明确建议是:“建议改成 vue。nvue 已经不维护了。或者升级 uni-app x”。由于 nvue 的底层渲染机制(Weex)在 iOS 上的线程调度和布局计算较为复杂,很容易在地图缩放、动画等高频交互场景下触发后台线程修改 UI 的异常。这也是导致此类 NSInternalInconsistencyException 崩溃的常见根因。
  • iOS 26 系统兼容性:你提到设备为 iPhone 17 Pro Max,系统为 iOS 26。在知识库中,iOS 26 系统对底层 API 的废弃和策略调整较多(例如已知 UniMPSDK 不支持 UIScene 的场景需改回 AppDelegate)。新系统对后台线程操作 UI 的容忍度更低,这可能是该问题在 iOS 26 上高复现的原因之一。
  • 地图组件与自定义气泡:日志中崩溃线程为 Thread 48,说明是在子线程触发的崩溃。在 nvue 地图中,如果在缩放过程中触发了 @regionchange 等事件,并在回调中或网络请求的回调中直接修改了地图上的自定义组件(如 PetLocationCallout)的属性或 v-if 状态,就会引发此崩溃。

3. 解决方案与建议

结合上述分析,建议你按以下方向进行处理:

  1. 排查并修正线程更新 UI 的问题
    检查在“开启寻宠”时,是否有网络请求、定时器或 @regionchange 地图视野变化等回调中,在后台线程直接修改了 mapMarkerspetInfo 等绑定到地图自定义气泡 PetLocationCallout 的数据。如果有,必须确保将这些数据更新操作切换到主线程执行。

  2. 架构方案调整(强烈建议)
    由于 nvue 已不再维护,在 iOS 端存在较多不可预知的稳定性风险。强烈建议针对该页面进行重构:

    • 方案 A:将 .nvue 页面改为普通的 .vue 页面,使用 webview 渲染地图,规避原生渲染的线程限制。
    • 方案 B:升级使用 uni-app x(uvue)进行开发,uni-app x 采用全新的原生渲染引擎,不再依赖 Weex,具备更好的稳定性和性能。

如果问题急需解决且排查无果,请提供一个最简可复现的完整工程(包含相关组件和触发逻辑),以便我们进行深入排查。

内容为 AI 生成,仅供参考

要回复问题请先登录注册