iOS 使用Xcode自帶工具symbolicatecrash解析Crash文件

  • 2019 年 12 月 23 日
  • 筆記

每次遇到閃退資訊的時候都要敲一遍命令,所以趁現在寫個腳本來解析閃退資訊,需要的資訊有文件有:

dSYM文件

首先通過Xcode的菜單選項Window->Organizer拿到.xcarchive文件。通過右鍵顯示包內容可以看到一個dSYMs文件夾,.dSYM文件就在這個文件夾下。如果有多個dSYM文件,只選主工程的dSYM文件就行,小組件那些文件不用。

symbolicatecrash工具

腳本裡面我已經自動找到此工具的路徑了,直接用就行

crash文件

獲取crash文件有很多種方法,其中比較常用的有:

  • 通過Xcode->Window->Devices and Simulators->View Device Logs獲取到。
  • 通過Xcode->Window->Organizer->Crashes下載閃退文件

複製下面的腳本,隨便命個名字CrashSymbolic.sh,然後和上面的dSYM和crash兩個文件一起放進同一個文件夾,打開終端進入那個文件夾輸入:

sh /Users/mac/Documents/crash/CrashSymbolic.sh

然後就會生成解析好的symbol.crash

CrashSymbolic.sh
#!/bin/bash    export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer    echo "----開始 第一個參數是crash路徑 -----"    symbolToolPath="./symbolicatecrash"  crashPath=""  dSYMPath=""    if [ ! -f "$symbolToolPath" ]  then      echo "文件為特殊文件"      symbolToolPath="/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash"      echo "symbolicatecrash工具的路徑是為:"$symbolToolPath      if [ -f "$symbolToolPath" ]      then          echo "symbolicatecrash工具存在(文件為普通文件)"      else          echo "無法找到symbolicatecrash工具"      fi  fi    function findFile(){      crashPath=$(find . -name "*.crash")  }    if [ -n "$1" ]  then      crashPath=$1      echo "已傳入crash文件路徑:$crashPath"  else      findFile      echo "未傳入crash文件路徑,搜索同級目錄下crash文件"  fi    if [ ! -f "$crashPath" ]  then      echo "搜索失敗,無法找到crash文件"      exit  fi    dSYMPath=$(find . -name "*.dSYM" -print)  echo "找到的符號表路徑:$dSYMPath"    if [ ! -d $dSYMPath ]  then      echo "無法找到符號表dSYM文件"      exit  fi    # ./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash  $symbolToolPath $crashPath $dSYMPath > symbol.crash

問題一:Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69. 解決方法: 終端執行下面的命令設置環境變數。

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

問題二:如果發現 warning: unsupported file type:錯誤 看看是不是因為有文件或者目錄的名稱中包含空格,或者dSYM文件包含有其它文件