关于堆栈符号化的文章可以说是很多了,但是既然叫攻略,这里还是讲一下吧。
Xcode 自动符号化
苹果收集的日志,Xcode会自动帮我们符号化,如果你没有发布包,比如是别人电脑打包的发布包,或者是一些平台上打的包,只需要你把 xcarchive 拷贝到 $HOME/Library/Developer/Xcode/Archives 目录下之后,Xcode 就可以自动帮你符号化了。
手动符号化之 symbolicatecrash
Xcode 自带了一个命令行工具 symbolicatecrash , 在 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash , 这个工具可以帮助我们将整个 Crash 日志符号化:
# 这两行可以写到 ~/.bash_profile 里面,这样不用每次敲了
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer/
alias symbolicatecrash="/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash"
# 执行符号化
symbolicatecrash [原始CrashLog路径] [dSYM文件路径或待符号的.app路径] > [导出符号化的文件路径]
使用 symbolicatecrash ,如果要符号化系统库的堆栈的话,需要有对应系统库的符号表放到 $HOME/Library/Developer/Xcode/iOS DeviceSupport 目录下面。符号表的获取可以通过插入对应系统版本的手机,或者从别人那拷贝获取。