友盟统计平台crash信息UUID与打包时生成.dSYM的UUID不一致

前言

在iOS应用的开发工作中,我们经常会用到一些开源的三方库或者一些三方服务,为了保证项目的稳定性,我们通常不会频繁的对项目中一些三方引用进行更新。一般情况下,只有在我们的项目中遇到一些由于三方依赖引起的问题时,我们才会尝试更新一下三方依赖去解决问题,但这也仅限于你能定位到这些问题是由三方依赖引发的。其实,为了保证这些三方依赖可能隐含的一些问题可以被及时被解决,你最好关注一下这些三方依赖每次更新解决的问题,及时做更新处理。

一、问题

我们的iOS应用在某个版本的线上crash问题分析中,突然发现友盟统计平台的crash统计信息中的UUID与我们备份的appstore包dSYM文件UUID不一致。这导致我们想要查找crash的堆栈具体信息时,变的比以往麻烦了很多,解决问题的效率大打折扣。

二、原因定位

1、现象分析

通过查看umeng统计到的crash信息,我们发现同一个线上包有两种crash错误信息。

第一种:

dSYM UUID: AAC5A273-C820-33E8-8CC4-249CE20C4999
CPU Type: arm64
Slide Address: 0x0000000000000000
Binary Image: libswiftUIKit.dylib
Base Address: 0x00000001028cc000

第二种:

dSYM UUID: 8C32F38E-8CFE-3EFD-B9EA-27BC98AA1E43
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: Product Name
Base Address: 0x000000010002c000

注意到,其中除了UUID不一致外,“Binary Image”选项的输出信息也是不一致的。
然而由于对友盟统计信息的收集机制并不了解,只能猜测,UUID不一致可能与“Binary Image”是有关的。

2、原因确认

既然问题是出在了友盟提供的统计服务上面,最直接的解决方法当然是联系友盟平台了。
我直接发送邮件到友盟开发者支持的邮箱,第二天就收到回复,告知我:

这是因为当前我们使用的友盟统计SDK版本过低导致的,更新到最新版本即可。

三、解决方案

升级友盟统计SDK。

在后续的版本中,我们升级到了友盟SDK的最新版本,这个问题果然就不存在了。

四、原因分析

  1. 原因整理补充和总结

    • 在我们应用以往的版本中,并没有UUID不一致的问题,这个问题是突然出现的。
    • 在友盟统计到的crash中UUID不一致的同时,还伴随着“Binary Image”的不一致。其中一个与以往版本的一致,都是工程名称,而另外一个则是“libswiftUIKit.dylib”,似乎与swift有关。
    • 对UUID不一致的打包结果进行解压后,发现确实存在swift的相关lib,它们被放在了SwiftSupport文件夹下(你可以自己试一试或者,看这里)。
    • 查看.ipa文件的UUID信息,确实存在swift lib的UUID。
    • 在该版本我们由原来的纯OC开发,引入了部分swift代码。
  2. 分析和确认
    查看以上原因,猜测UUID不一致的问题,是由于我们以往使用的友盟统计SDK版本过老,没有对swift lib的处理,后续版本加入了对swift lib的处理。
    同时,此猜测在官方的更新日志也得到了验证:

    3.6.6(更新时间:2015-11-24)
    去掉在线参数,如果使用在线参数功能,请下载独立的在线参数SDK
    修复swift crash解析问题
    修复接口调用顺序导致的crash问题

小结:

如前言所讲,如果项目中使用的一些三方服务或者开源库出现了问题,你可以查看一下官方文档或者联系一下服务提供者、开源库作者,确认问题后,解决问题也就会容易很多。

参考

友盟SDK文档

相关

如何校验.ipa包、.dSYM、.crash文件的一致性

你可能感兴趣的:(ios,友盟,友盟统计,crash统计,UUID不一致)