iOS Crash文件獲取及符號化

  1. Crash文件獲取
  • 大體能夠分爲兩種方式:遠程獲取和本地獲取;具體能夠分爲以下四種途徑

1.1. 遠程獲取;已經上傳到iTunes Connect的應用,能夠經過iTunes ConnectApp分析查看App崩潰狀況不會有崩潰日誌,若是是TestFlight測試,則能夠在iTunes Connect獲取到崩潰日誌git

1.2. 遠程獲取;經過Xcode菜單Window -> Organizer -> Crashes獲取用戶的崩潰日誌 github

  • 注意:以上兩種途徑都須要登陸開發者帳號,而且須要用戶共享iPhone分析,纔可以獲取到用戶的崩潰日誌
  • 注意:官方提供的崩潰信息並非實時的,只能查看兩天以前的崩潰信息,須要實時的可使用第三方工具

1.3. 本地獲取;在手機上設置 -> 隱私 -> 分析與改進 -> 分析數據中,根據應用名稱和日期時間找到你須要的日誌,點擊進去後,右上角會有個分享按鈕,分享給Macbash

1.4. 把手機鏈接到Mac,經過Xcode菜單Window -> Devices and Simulators -> Devices -> View Device Logs獲取用戶的崩潰日誌app

  • 注意某些iOS系統會沒有上面提到的分享按鈕,這時候能夠全選複製,再發送給Mac
    1.1該圖爲早期iTunes Connect官網,具體以當前官網爲主
  1. Crash文件符號化
  • 大體也是分爲兩種方式:使用Xcode自動符號化和經過手動命令行工具symbolicatecrash符號化;這兩種方式原理同樣,都須要dSYM文件,只不過前者是Xcode自動幫咱們完成的
  • 注意:若是大家的應用是經過Xcode上傳iTunes Connect的,並同時上傳了.xcarchive文件(其實是一個文件夾,包含.ipa和.dSYM文件)Xcode會默認幫你勾選該選項,那麼從iTunes Connect獲取到的日誌就已是符號化過的了

2.1. 使用Xcode自動符號化Crash文件,Xcode自帶的工具很是好用工具

  • 若是你用的Mac就是打包的機子,而且獲得了發生崩潰的手機,那麼手機鏈接電腦,經過Xcode菜單Window -> Devices and Simulators -> Devices -> View Device Logs找到本身的日誌,就是符號化事後的,若是沒有符號化,就稍微等待一下子,或者右擊點出菜單選擇Re-Symbolicate Log
  • 若是隻有Mac出包機,沒有手機只有崩潰日誌,那麼一樣能夠經過Xcode菜單Window -> Devices and Simulators -> Devices -> View Device Logs把崩潰日誌直接拖進去,就是符號化事後的,若是沒有符號化,就稍微等待一下子,或者右擊點出菜單選擇Re-Symbolicate Log
  • 注意:在有些版本的Xcode是拖不進去的,遇到這種狀況能夠用下面的手動符號化方式
  • 注意:上面的方法不必定要是出包機,本質是隻要你的電腦上有dSYM文件,Xcode就能自動找到他併爲你符號化

2.2. 經過終端命令行工具symbolicatecrash符號化 大概須要以下三個文件,下面是獲取這些文件的方法 測試

  • 經過菜單Xcode -> Window -> Organizer -> Archiver找到打包的項目,右鍵Show In Finder,找到AppName.xcarchive,右鍵顯示包內容,找到AppName.app.dSYM
  • 在桌面建立一個文件夾tmp,將以上兩個文件拷貝到tmp文件夾中
  • 打開終端,用find /Applications/Xcode.app -name symbolicatecrash -type f查找symbolicatecrash,其中/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash路徑是須要的symbolicatecrash文件,將symbolicatecrash文件也拷貝到tmp文件夾中
  • 將須要分析的crash文件也拷貝到tmp文件夾中,crash文件的格式多是.beta.crash.ips
  • 在終端中使用如下命令行,crash文件格式以.crash爲例
# 進入到 tmp 文件夾中
cd ~/Desktop/tmp 

# 分析 crash 文件,會在 `tmp` 文件夾中生成 crash.log 文件
./symbolicatecrash ./xxx.crash ./AppName.app.dSYM > crash.log
或./symbolicatecrash ./xxx.crash ./.app.dSYM > crash.log
複製代碼
  • 若是終端報相似這樣的錯zsh: permission denied: ./symbolicatecrash 說明是symbolicatecrash文件有問題,可能該文件不是本機獲取的,或者是以前獲取的、Xcode升級等問題形成的,從新在本機上按上面方法獲取便可
  • 若是終端報相似這樣的錯Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69. 嘗試如下命令後,再重複上面命令,正常狀況就能夠分析bug了export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
  1. 符號化以前,首先得確保Crash文件和dSYM這兩個文件裏面的UUID是一致的,若是不一致,就說明不是本次Crash對應的文件,就不能進行符號化;查看dSYM文件裏面的UUID命令:dwarfdump --uuid AppName.app.dSYM;查看Crash文件文件的UUID就比較簡單了,直接打開,Crash最上面的就是各類信息,不一樣系統版本給的格式可能會有不一樣,下圖內容爲參考
  • XcodeDebug模式下默認關閉生成dSYM文件,Release模式下默認生成dSYM文件的, 要生成dSYM文件須要查看一下項目的Build Settigns -> Build Options -> Debug information Format屬性;只有該屬性設置爲DWARF with dSYM File時,編譯纔會生成dSYM文件
  • 該文是在Xcode 11.2iOS 13.2上寫的教程,不一樣的系統版本的Xcode和手機系統獲取路徑和符號化方式會有變化

附:個人博客地址ui

相關文章
相關標籤/搜索