iOS--可视化App Store返回的Crash日志

最近在向App Store上传App的时候被拒了,理由如下:

Guideline 2.1 - Performance - App Completeness

We were unable to review your app as it crashed on launch. We have attached detailed crash logs to help troubleshoot this issue.

Next Steps

To resolve this issue, please revise your app and test it on a device to ensure it will launch without crashing.

Resources

For information on how to symbolicate and read a crash log, please review Tech Note TN2151 Understanding and Analyzing Application Crash Reports.

看报错返回的日志,一开始以为是IPv6的问题。但是在拒绝理由中,并没有IPv6的字眼,而且在开发测试的时候,也并没有发现App启动的时候出现Crash。所以重要的线索就集中在了被拒邮件中的txt附件文件了。


iOS--可视化App Store返回的Crash日志_第1张图片
屏幕快照 2018-03-02 下午1.53.36.png

我们可以右键点击txt文件,将其下载到桌面上。


iOS--可视化App Store返回的Crash日志_第2张图片
屏幕快照 2018-03-02 下午5.40.07.png

但是当我们打开的时候,却发现全是二进制流,根本看不懂:
iOS--可视化App Store返回的Crash日志_第3张图片
屏幕快照 2018-03-02 下午5.41.27.png

下面我们就需要对txt文件进行可视化,方便我们对BUG的调试。

1.我们首先在桌面创建一个文件夹,起名Crash
iOS--可视化App Store返回的Crash日志_第4张图片
屏幕快照 2018-03-02 下午5.43.59.png

2.我们找到上架AppStore的包中的.dsym文件。

点击Xcode->Windows->organzier 找到你上架时的包。
iOS--可视化App Store返回的Crash日志_第5张图片
屏幕快照 2018-03-02 下午5.47.30.png

屏幕快照 2018-03-02 下午5.49.22.png

右键点击你的包,选择showInFinder


iOS--可视化App Store返回的Crash日志_第6张图片
屏幕快照 2018-03-02 下午5.50.35.png

找到包名字之后,右键点击显示包内容
iOS--可视化App Store返回的Crash日志_第7张图片
屏幕快照 2018-03-02 下午5.51.18.png

然后找到dsyms文件夹,双击进去,将里面的.dsym文件拉去到我们的Crash文件夹中
iOS--可视化App Store返回的Crash日志_第8张图片
屏幕快照 2018-03-02 下午5.52.30.png

3.找到symbolicatecrash工具

根据以下目录可以找到symbolicatecrash工具: /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash。 注意Xcode.app是你的Xocde名字,假如你的Xcode名字叫Xcode8.0的话,就应该写成Xcode8.0.app。找到symbolicatecrash工具之后,将其拷贝到我们的Crash文件夹中。

4.生成可视化.log文件

<1>打开终端,cd到你刚才创建的Crash文件夹。

cd /Users/apple/Desktop/Crash 

<2>输入以下命令,来创建.log文件。

./symbolicatecrash  /Users/apple/Desktop/crashlog-FC6BB5BA9B69.txt  /Users/apple/Desktop/Crash/HengShuaTest.app.dSYM >mrCrash.log

注意:/Users/apple/Desktop/crashlog-FC6BB5BA9B69.txt 是你的txt文件路径 。/Users/apple/Desktop/Crash/HengShuaTest.app.dSYM是你的.dSYM文件路径,mrCrash.log是你要生成的.log文件。
然后可能会出现累类似以下提示:

Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.

如果出现以上提示,则输入以下命令:

export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
注意:Xcode.app中的Xcode仍然是你的Xcode名字。

如果没有出现以上提示,则直接忽略。

最后重复输入该命令:

./symbolicatecrash  /Users/apple/Desktop/crashlog-FC6BB5BA9B69.txt  /Users/apple/Desktop/Crash/HengShuaTest.app.dSYM >mrCrash.log

最后骚等几秒钟,你的.log文件已经在Crash文件夹下面了。是不是发现已经转化好了,那样就可以根据报错信息进行调试了。


iOS--可视化App Store返回的Crash日志_第9张图片
屏幕快照 2018-03-02 下午6.11.50.png

4.最后附上Crash日志中的一些相关信息:

<1>App Store的审核版本,系统等信息

Incident Identifier: F3573A...E2F244A              //crash的id
CrashReporter Key:   cc2298...es77eeb              //crash的设备id
Hardware Model:      iPhone7,2                     //手机型号
Process:             [AppName] [1816]              //APP的名字[进程的id]
Path:                /private/.../Application...   //APP的位置
Identifier:          com....                       //bundle ID
Version:             14 (2.3.5)                    //版本号
Code Type:           ARM-64 (Native)               //app的应用架构之类不大清楚,^_^
Parent Process:      launchd [1]

Date/Time:           2015-10-26 15:03:29.29 +0800    //crash发生时间
Launch Time:         2015-10-26 14:58:28.28 +0800    //进入应用时间
OS Version:          iOS 11.2.6 (13B143)                //iOS版本
Report Version:      105

<2>异常报错信息

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0

<3>回溯信息

Application Specific Information:
abort() called

Filtered syslog:
None found

Last Exception Backtrace:
0   CoreFoundation                  0x18430f164 __exceptionPreprocess + 124
1   libobjc.A.dylib                 0x183558528 objc_exception_throw + 55
2   CoreFoundation                  0x18430f038 +[NSException raise:format:arguments:] + 103
3   Foundation                      0x184ca97f4 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 111
4   UIKit                           0x18e384fa8 -[UICollectionViewFlowLayout _getSizingInfosWithExistingSizingDictionary:] + 3303
5   UIKit                           0x18e38640c -[UICollectionViewFlowLayout _fetchItemsInfoForRect:] + 143
6   UIKit                           0x18da25090 -[UICollectionViewFlowLayout prepareLayout] + 227
7   UIKit                           0x18d924cfc -[UICollectionViewData _prepareToLoadData] + 159
8   UIKit                           0x18d924314 -[UICollectionViewData validateLayoutInRect:] + 103
9   UIKit                           0x18d923cc8 -[UICollectionView layoutSubviews] + 259
10  UIKit                           0x18d8c6e18 -[UIView+ 52760 (CALayerDelegate) layoutSublayersOfLayer:] + 1275
11  QuartzCore                      0x188353948 -[CALayer layoutSublayers] + 183
12  QuartzCore                      0x188357ad0 CA::Layer::layout_if_needed+ 1206992 (CA::Transaction*) + 331
13  QuartzCore                      0x1882c431c CA::Context::commit_transaction+ 602908 (CA::Transaction*) + 335
14  QuartzCore                      0x1882ebb40 CA::Transaction::commit+ 764736 () + 539
15  UIKit                           0x18db42b6c __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 139
16  CoreFoundation                  0x1842b7590 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 19
17  CoreFoundation                  0x1842b6e60 __CFRunLoopDoBlocks + 287
18  CoreFoundation                  0x1842b4b70 __CFRunLoopRun + 1067
19  CoreFoundation                  0x1841d4c58 CFRunLoopRunSpecific + 435
20  GraphicsServices                0x186080f84 GSEventRunModal + 99

基本上App Store返回的Crash日志可视化就是这些流程,如果有更好的办法,欢迎小伙伴们留言啊!

你可能感兴趣的:(iOS--可视化App Store返回的Crash日志)