对于很多人来说,每次苹果审核打回来最担心的就是一个crash日志,然后还没也一个截屏,不知道怎么修改,因为错误日志全是十六进制,欲哭无泪?

今天项目也提交了,悠闲了,就来说说这个苹果错误日志该如何看的问题。(但愿自己的app也一次就过?)

首先我们要做的就是如何将这个该死的十六进制转换为可以看懂的类名和方法名,也就是所谓的将无符号或者半符号化的文本转化为符号化的文件。

1、我先创建一个测试demo,写一个crash错误(这个相信大家都很在行,我就不多说了),将错误日志弄出来。如果你只是想看苹果审核的错误日志如何符号化,这块可以跳过,直接进入第2部。

创建测试项目,写crash代码。运行crash。

ios 日志 错误 iphone手机错误日志_苹果审核

运行:

ios 日志 错误 iphone手机错误日志_Desktop_02

相信大家都不陌生,一看错误就知道是咋回事,现在看看,错误日志下的十六进制是什么样子吧。

选择window-Devices and Simulators 

 

ios 日志 错误 iphone手机错误日志_错误日志_03

 

如下图,选中phone,在点击viewDeviceLogs,记得选中最下面的app。我这是TestDemo

ios 日志 错误 iphone手机错误日志_Desktop_04

弹出日志,在左侧选中自己app的错误日志,我这是刚刚这有这一个错误日志,如果你的app开发很久了,一般这都会有好几条的,除非你牛逼,写代码的时候没有crash过。这里日期时间,我这个是刚刚运行的。

 

ios 日志 错误 iphone手机错误日志_错误日志_05

当然我这里已经是符号化了,因为以及将那一坨转化为了上面的内容了,不要注意这个细节,因为相信大家看到苹果审核回复的crash日志要么就是那一坨十六进制,要么就是类似我上面的,只不过没有后面的类名和方法名属于半符号化。比如从我之前的项目审核打回的一次内容附上:

 

ios 日志 错误 iphone手机错误日志_苹果审核_06

看到的就是上面这,后面看不到具体的类名。这就是半符号化。

 

然后右键导出crash文件:

ios 日志 错误 iphone手机错误日志_ios 日志 错误_07

为啥不选择Re-Symbolicate Log呢,如果选则这项,我这后面还写个毛呀?。

ios 日志 错误 iphone手机错误日志_错误日志_08

接下来就是打个包啦,这里就不多说了,只是为了下一步可以继续,我将TestDemo给archive一下,你们可以不关注。

2.准备dSYM文件(想看苹果审核的crash日志符号化的朋友们可以从这个地方开始看了)

注:在桌面上创建一个Crash文件夹,把上面的crash日志文件拷贝进去,如果你的是苹果审核给你的文件,你下载下来应该后缀是.txt文件,你把后缀改为.crash。

ios 日志 错误 iphone手机错误日志_苹果审核_09

打开xcode->window->organizer 

ios 日志 错误 iphone手机错误日志_错误日志_10

选中自己的app:TestDemo

ios 日志 错误 iphone手机错误日志_错误日志_11

选中自己的包,右键ShowInFinder,然后-> 显示包内容

ios 日志 错误 iphone手机错误日志_错误日志_12

ios 日志 错误 iphone手机错误日志_苹果审核_13

然后就可以看到dSYM文件:

ios 日志 错误 iphone手机错误日志_错误日志_14

把这个dSYM文件也拷贝Crash文件夹

 

3.准备symbolicatecrash文件

我的code版本是10.1,这个文件所在位置可能跟xcode版本有关系,如果你用下面的路径没有找,那你就百度一下你自己的xcode版本下的symbolicatecrash文件位置。

symbolicatecrash文件所在位置目录:/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash 
把symbolicatecrash文件拷贝一份

桌面->commd+Shift+G,粘贴路径回车前往

ios 日志 错误 iphone手机错误日志_错误日志_15

ios 日志 错误 iphone手机错误日志_苹果审核_16

然后将symbolicatecrash拷贝到刚才创建的Crash文件夹里去

好了,到这里准备工作就做完了,Crash文件夹里就有了.crash文件、.dSYM文件以及symbolicatecrash工具

ios 日志 错误 iphone手机错误日志_错误日志_17

4.准备符号化

打开终端,cd 到Crash目录下。 

cd /Users/XXX/Desktop/Crash
输入符号化命令: 

./symbolicatecrash /Users/本机用户名/Desktop/crash/aaa.crash / Users/本机用户名/Desktop/crash/xxx.app.dSYM > new_symbol.cash

如果报错

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

这是提示我们需要设置 "DEVELOPER_DIR" 这个环境变量

输入命令

export DEVELOPER_DIR=”/Applications/XCode.app/Contents/Developer”

这个是临时设置改环境变量

注:xcode-select --print-path 可以找到DEVELOPER_DIR

然后再重新输入上面命令进行符号化,成功后打开log.crash就是符号化后的日志了。

如果还报错:

$ ./symbolicatecrash /Users/XXX/Desktop/crash/TestDemo.crash /Users/XXX/Desktop/crash/TestDemo.app.dSYM > log.crash
xcrun: error: missing DEVELOPER_DIR path: ”/Applications/XCode.app/Contents/Developer”
## Warning: can't find tool named 'otool' in iOS SDK, falling back to searching the Mac OS X SDK
xcrun: error: missing DEVELOPER_DIR path: ”/Applications/XCode.app/Contents/Developer”
Error: can't find tool named 'otool' in the macosx SDK or any fallback SDKs at ./symbolicatecrash line 122.

把symbolicatecrash删除,按上面的不住重新拷贝。多试几次就好了。