美文网首页IOS开发路上的故事程序员
iOS--可视化App Store返回的Crash日志

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

作者: 乐逍遥的笔记 | 来源:发表于2018-03-02 18:20 被阅读785次

    最近在向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附件文件了。


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

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


    屏幕快照 2018-03-02 下午5.40.07.png
    但是当我们打开的时候,却发现全是二进制流,根本看不懂:
    屏幕快照 2018-03-02 下午5.41.27.png

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

    1.我们首先在桌面创建一个文件夹,起名Crash 屏幕快照 2018-03-02 下午5.43.59.png

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

    点击Xcode->Windows->organzier 找到你上架时的包。
    屏幕快照 2018-03-02 下午5.47.30.png
    屏幕快照 2018-03-02 下午5.49.22.png

    右键点击你的包,选择showInFinder


    屏幕快照 2018-03-02 下午5.50.35.png
    找到包名字之后,右键点击显示包内容
    屏幕快照 2018-03-02 下午5.51.18.png
    然后找到dsyms文件夹,双击进去,将里面的.dsym文件拉去到我们的Crash文件夹中 屏幕快照 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文件夹下面了。是不是发现已经转化好了,那样就可以根据报错信息进行调试了。


    屏幕快照 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日志可视化就是这些流程,如果有更好的办法,欢迎小伙伴们留言啊!

    相关文章

      网友评论

      • 空城_1c66:然而我发现按照你的做根本没有用
      • 6310ffb20d0c:最后你发现是什么原因触发的看门狗机制
        乐逍遥的笔记:@doubleJJ 是的 ,如果自己测试的没问题的话,多提交两次就过了。我遇到的时候就是多提交两次才给过的。
        doubleJJ:@橘子star 博主,我好像也是这个原因崩溃而被拒的,Termination Description: SPRINGBOARD, scene-create watchdog transgression,可是我自己测试了,没有出现过呀,你最后是怎么搞定的?重复提交审核就可以了吗??
        乐逍遥的笔记:@林思聪 一开始以为程序真的有bug,检查好多次也没发现,最后提交了几次才给过的。

      本文标题:iOS--可视化App Store返回的Crash日志

      本文链接:https://www.haomeiwen.com/subject/muaaxftx.html