最近在向 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 日志可视化就是这些流程, 如果有更好的办法, 欢迎小伙伴们留言啊!
来源: http://www.jianshu.com/p/dfbdf3a742f2