IOS Crash日志分析(appStore提交返回的crash日志分析)

      最近新提交一个新版本到AppStore,就收到被拒邮件,打开一看,We were unable to review your app as it crashed on launch. We have attached detailed crash logs to help troubleshoot this issue.神马情况,Crash,测试测过多少次,都没有crash的情况啊,还是app启动就crash,再看看苹果给我的三个.txt的crash日志,崩溃了,神马都看不懂,如何下手啊,我这边各种机型测试OK,都没有crash的情况,真是心碎,欲哭无泪啊,, 查了一些资料,真心幻想是苹果测试环境出了问题,哈哈。木有办法,真心按不出来哪里有crash啊,硬着头皮看苹果的log呗,真心不想看,太难看了


      苹果的 xxx.txt Log日志需要借助xcode 的 symbolicatecrash 工具进行解析符号化,才能解析成我们熟悉的堆栈信息


      1. 在桌面创建 crash 文件夹,稍后将所有的 crash 工具信息都放这里面,方便管理

      2.找到 symbolicatecrash 工具位置 :每个人的存储位置可能有所差异,通过命令可以找出其位置: 

              find /Applications/Xcode.app -name symbolicatecrash -type f 

          例如我的: 

       /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

   3.复制 symbolicatecrash 工具到 crash 文件夹中:

      

       cp /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /Users/xxxx/Desktop/Crash 


    4.因为app打好包的所有信息都存放在 projectName.app.dSYM 这个文件中,需要将 projectName.app.dSYM 及 projectName.app 复制到 crash 文件夹中。

       Xcode --> Window --> Organize 中找到自己上传 appStore 中的包,右键 --> Show in Finder --> 显示包内容 --> 将上述两个文件 copy 到 crash 文件夹中

    5.将 appStore 的反馈回来的 Crash 日志 (三个 .txt 文件) 下载下来,放到 crash 文件夹下



       IOS Crash日志分析(appStore提交返回的crash日志分析)_第1张图片


  

   注意: 红框2 中的文件在此时是没有的,是将红框1 中的三个.txt 文件解析生成 红框2 中的三个可读文件。


   6.解析appStore的三个 .txt crash 日志文件

        1) cd crash文件夹内

        2) 三个文件分别为 xxxCD.txt xxxDC.txt xxxAD.txt , crashcd.crash 为输出文件名,输出分别对应 crashcd.crash crashad.crash crashdc.crash

           ./symbolicatecrash ./xxxCD.txt ./ProjectName.app.dSYM > crashxx.crash

        

        注: 如果解析报错:Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69. 输入命令: export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer",之后继续解析剩下文件,解析完成之后就能得到上图文件夹中的 .crash 文件。


    7.查找原因: 比如解析后的文件为,系统调用的可以忽略,着重看自己调用的方法


                   IOS Crash日志分析(appStore提交返回的crash日志分析)_第2张图片


      8.查看对应文件代码:

           发现在对应的方法里有这样一行代码

           

         


          在字符串里面直接截取了“-CN”串,没有“-CN”串程序就crash掉了

   

          说说 crash 原因吧:因为做多语言, 这句代码之前 tmp 为获取的系统的当前语言字符串,简体中文,英文(无地区)的都是以 "-CN"结尾,但英文有地区可选,比如系统语言如果选择的是English(印度),其后面的地区就不是“-CN”结尾了,而是其它的字符串结尾,比如 appStore 在审核的时候,审核人员的系统语言设置为English(USA),程序刚启动,运行到这里就直接 crash 掉了,说到底还是程序写的不严谨,当时没考虑清楚,之后测试也没测到,造成直接crash,问题相对也比较隐蔽,都不知道什么原因,看到苹果的 crash 日志的第一眼,也是一脸懵逼,虽然开始看不懂,但也是真有用,不然问题出在哪里都不知道, 所以记录一下。


你可能感兴趣的:(技巧心得)