uni-app iOS平台出现闪退问题,闪退位置在[PGDeviceStatus getCurrentType]

uni-app iOS平台出现闪退问题,闪退位置在[PGDeviceStatus getCurrentType]

开发环境 版本号 项目创建方式
Mac 12.3 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Mac

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

HBuilderX类型:正式

HBuilderX版本号:3.3.13

手机系统:iOS

手机系统版本号:iOS 15

手机厂商:苹果

手机机型:iphone 13

页面类型:vue

vue版本:vue2

打包方式:离线

项目创建方式:HBuilderX

### 操作步骤:
闪退日志未能复现

### 预期结果:
避免闪退

### 实际结果:
有闪退

### bug描述:
跟踪 iOS 闪退日志,大多数闪退都出现在  [PGDeviceStatus getCurrentType:] 位置,而且从 离线 SDK 3.2.3 到目前的 3.3.13 都一致存在,不太清楚这个函数作用,这个是核心 PDRCore 库里的封装,猜测对应的是 plus.networkinfo.getCurrentType() ,尝试切换网络,关闭网络,都没能复现这个闪退。

官方应该很容易知道函数作用,比我们瞎猜容易解决多了,离线包对应的 bundle,相关库肯定啥都不缺了。

请官方看一下,之前也反应过,期待有个回复,貌似社区不是太活跃

![图片](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20220416/2d4a19ef2bd37b92063129e3a7e2f52c.png)
13 回复

看下这边哪里用到 plus.networkinfo.getCurrentType() 这个API了 截图看下怎么调用的


我仅是自己猜测的,代码里没有使用

你这个还有更详细的崩溃信息吗 或者可以复现的步骤?

复现不出来,是app store 后台的奔溃日志,这个在 uniapp PDRCore里的,除了上面截图的,也找不到啥相信信息了

我今天又统计了下,这个 [PGDeviceStatus getCurrentType:] 的奔溃占比,可以达到70%, 大多数奔溃都是这个问题。希望官方能跟进下这个问题。
@DCloud_heavensoft @DCloud_IOS_XTY @DCloud_iOS_DJX @DCloud_iOS_XHY

同样的问题,线上近期的这种崩溃日志很多,而且我的离线打包,从3.3.13后都没办法获取到推送的个推设备id了,hook代码发现之前个推初始化的方法3.3.13后都没初始化,你有这个问题么

同样的问题,线上近期的这种崩溃日志很多

貌似crash 数量又翻了一倍

每周发现都有些新增,耐心等待官方反馈中 …

方便的话 发个ipa给我吧

回复 DCloud_iOS_WZT: 下载地址已发私信

在uni-app开发中,iOS平台出现闪退问题,且闪退位置在 [PGDeviceStatus getCurrentType],可能是由于以下几种原因导致的。以下是一些排查和解决的步骤:


1. 检查插件或模块的兼容性

  • PGDeviceStatus 可能是某个原生插件或模块的一部分,检查是否有使用到第三方原生插件。
  • 确保插件或模块的版本与当前 uni-app 和 iOS SDK 版本兼容。
  • 如果插件是自定义开发的,检查 getCurrentType 方法的实现,确保没有内存泄漏或空指针异常。

2. 检查权限配置

  • 某些设备状态信息(如网络状态、电池状态等)需要特定的权限。检查 Info.plist 文件中是否配置了必要的权限。
  • 例如,如果插件需要访问网络状态,确保 NSLocalNetworkUsageDescription 等权限已配置。

3. 调试日志

  • 在 Xcode 中运行项目,查看控制台输出的详细日志,定位具体的崩溃原因。
  • 如果崩溃是由于空对象或异常引起的,日志中通常会有明确的提示。

4. 更新 uni-app 和相关依赖

  • 确保 uni-app 的版本是最新的,旧版本可能存在已知的兼容性问题。
  • 更新所有依赖的插件和模块到最新版本。

5. 检查代码逻辑

  • 如果 getCurrentType 方法被频繁调用,可能会导致性能问题或崩溃。检查调用频率,优化代码逻辑。
  • 确保在调用 getCurrentType 之前,相关对象已正确初始化。

6. 测试设备环境

  • 测试不同 iOS 版本和设备型号,确认是否只在特定环境下崩溃。
  • 如果崩溃仅发生在某些设备上,可能是设备特定的问题。

7. 联系插件开发者

  • 如果问题无法解决,联系插件的开发者或社区,提供详细的崩溃日志和复现步骤,寻求帮助。

8. 临时解决方案

  • 如果问题无法立即解决,可以尝试注释掉相关代码,或者使用其他方式替代 getCurrentType 的功能。

示例代码(调试日志)

在 Xcode 中运行项目后,查看控制台日志,定位崩溃的具体原因:

// 示例:在 PGDeviceStatus.m 中添加调试日志
- (NSString *)getCurrentType {
    NSLog(@"Entering getCurrentType");
    // 检查对象是否为空
    if (!self) {
        NSLog(@"self is nil");
        return nil;
    }
    // 其他逻辑
    return @"Unknown";
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!