1.Flex(所有机子)
2.View Device Logs(连接过XCode的测试机)
1.使用symbolicatecrash分析崩溃日志(客户使用的外部机子)
- 在你的桌面创建一个新文件夹,并且命名为"CrashReport"
- 打开终端输入
find /Applications/ -name symbolicatecrash -type f
,然后终端会返回这个文件的路径,只要找到symbolicatecrash
文件, 复制然后粘贴到刚才创建的 "CrashReport" 文件夹里面. - 从Xcode Archive的二进制文件中找到.dSYM文件和.app文件拷贝到刚才创建的
CrashReport
文件夹里面. - 打开终端进入CrashReport文件夹,依次输入以下命令行:
1. cd /Users/username/Desktop/CrashReport
2. export DEVELOPER_DIR=/Applications//Contents/Developer
3. ./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
这时候终端将会进行处理,处理结果是生成一个新的文件symbol.crash。然后打开这个文件,你就会看到日志跟我们调试APP的控制台输出的内容一样了!
extention({
相信每个做iOS开发的TX都应该不会对symbolicatecrash陌生,我们第一次遇到真机上产生的崩溃日志时,在网上搜到的大部分教程都告诉我们说要用symbolicatecrash来解析crash log,我信了,所以相当长一段时间内,我都是用这个工具来解析crash log的。
每次都去敲命令来解析crash log本身就是一件很蛋疼的事情,但这还不是麻烦的,最麻烦的是用symbolicatecrash还经常遇到问题:怎么crash log又解析失败了?怎么批量解析crash log?
问题出在方法上,实际上我们完全用不着symbolicatecrash的,因为Xcode中自带的organizer就是很好的解析crash log工具了。
举个例子,如果我们的应用是在自己的机器上编译生成的,把应用装在真机上如果有崩溃产生,把真机通过数据线连接到Mac电脑上,打开Xcode菜单上的Window——Organizer,找到设备的device logs项中的crash log,稍等片刻,你就会发现这里的crash log已经被自动解析过了(大部分情况会自动解析,如果不行请右键点击选择Re-Sysbomlicate)。
但是如果应用不是在自己的编译上生成的,你会发现organizer不会自动解析crash log(除了系统函数)。怎么在这种情况下也让organizer也能自动解析crash log呢?
其实之前的organizer之所以能自动解析你设备上的crash log,是因为它能根据spotlight的索引来找到对应的.app和dSYM文件,对于这一点,我的猜测是在自己的Mac电脑上编译生成应用时,系统自动对其进行了索引。这个索引应该是根据app uuid来索引的。这个uuid可以执行下面的命令得到:
dwarfdump —uuid /YourApp
dwarfdump —uuid .dSYM
如果要能解析出crash log,crash log中携带的uuid与dSYM文件的uuid必须与app uuid一致。
既然spotlight能自动进行索引,那是不是也可以手动进行索引呢?答案是能,这正是自动解析的关键。手动索引的命令是mdimport。比如,把iOS应用的.app和.dSYM文件放到一个文件夹中,执行命令mdimport foldername就可以。命令执行完成后再用刚才的organizer去查看crash log,你会发现也能自动解析了。
这意味着什么呢?意味着你把应用所有版本的.app和.dSYM文件放入一个专门的文件夹中,只要mdimpor这个文件夹,以后的organizer就能自动解析出你所有的crash log。
好处不仅仅是这一点。organizer还有一个import功能,借助这个功能,我们可以把其它Mac电脑上的crash log导入到自己电脑中的organizer,然后就可以自动解析。更好的是,用这个功能可以批量导入收集到的crash log,然后我们就可以批量解析所有的crash log。
比起用symbolicatecrash,这种方法简便了许多,从现在起,你可以抛弃symbolicatecrash了。但其实这还不是最好的方法,目前先进的方法是用crash report管理系统来管理所有的crash,比如使用QuincyKit, Crashlytics, Flurry等来进行管理,有时间自己也研究研究。
})
symbolicatecrash使用({
需要的文件:
dSYM文件
首先通过Xcode的Window->Organizer拿到.xcarchive文件。
通过显示包内容可以看到一个dSYMs文件夹,.dSYM文件就在这个文件夹下。
ps: 获取到的dSYM文件的UUID必须和crash文件中的UUID一致。可以通过dwarfdump --uuid *.dSYM得到dSYM文件的UUID。
symbolicatecrash工具
通过find找到symbolicatecrash工具的路径
find /Applications/ -name symbolicatecrash -type f
拿到symbolicatecrash工具的路径后,可以使用Mac->前往->前往文件夹(快捷键:shift+command+G)获取到symbolicatecrash工具。
crash文件
获取crash文件有很多种方法,其中比较常用的是通过Xcode->Window->Devices and Simulators->View Device Logs获取到。
步骤:
步骤一:在桌面创建一个crash文件夹。
步骤二:将dSYM文件、symbolicatecrash工具、crash文件拷贝到crash文件夹下。
步骤三:执行命令解析crash文件。
./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
symbol.crash文件就是解析后的crash文件。
可能遇到的问题:
问题一:Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
解决方法:
终端执行下面的命令设置环境变量。
export DEVELOPER_DIR=/Applications//Contents/Developer
})