Bugly iOS 符號(hào)表配置

什么是符號(hào)表?

符號(hào)表是內(nèi)存地址與函數(shù)名、文件名、行號(hào)的映射表。符號(hào)表元素如下所示:

<起始地址> <結(jié)束地址> <函數(shù)> [<文件名:行號(hào)>]

為什么要配置符號(hào)表?

為了能快速并準(zhǔn)確地定位用戶APP發(fā)生Crash的代碼位置,Bugly使用符號(hào)表對(duì)APP發(fā)生Crash的程序堆棧進(jìn)行解析和還原。

舉一個(gè)例子:

Bugly提供了自動(dòng)和手動(dòng)兩種方法配置iOS符號(hào)表。

自動(dòng)配置:XCode + sh腳本

自動(dòng)配置請(qǐng)首先下載和解壓自動(dòng)配置符號(hào)表工具包,然后選擇上傳方式并配置Xcode的編譯執(zhí)行腳本。

上傳方式

使用腳本自動(dòng)配置支持兩種上傳方式:

方式一:直接上傳dSYM文件(默認(rèn)方式 )

方式二:提取dSYM文件的符號(hào)表文件并上傳

其中,使用方式二需要額外操作以下幾步:

下載符號(hào)表提取工具依賴的Java運(yùn)行環(huán)境(JRE或JDK版本需要>=1.6)

把工具包buglySymbolIOS.jar保存在用戶主目錄(Home)的bin目錄下(沒有bin文件夾,請(qǐng)自行創(chuàng)建):

配置Xcode編譯執(zhí)行腳本

在Xcode工程對(duì)應(yīng)Target的Build Phases中新增Run Scrpit Phase

打開工具包中的dSYM_upload.sh,復(fù)制所有內(nèi)容,在新增的Run Scrpit Phase中粘貼修改新增的Run Scrpit中的為您的App ID,為您的App Key,為App的Bundle Id

腳本默認(rèn)在Debug模式及模擬器編譯情況下不會(huì)上傳符號(hào)表,在需要上傳的時(shí)候,請(qǐng)修改下列選項(xiàng)

Debug模式編譯是否上傳,1=上傳 0=不上傳,默認(rèn)不上傳

UPLOAD_DEBUG_SYMBOLS=0

模擬器編譯是否上傳,1=上傳 0=不上傳,默認(rèn)不上傳

UPLOAD_SIMULATOR_SYMBOLS=0

至此,自動(dòng)上傳符號(hào)表腳本配置完畢,Bugly 會(huì)在每次 Xcode 工程編譯后自動(dòng)完成符號(hào)表配置工作。

手動(dòng)配置

手動(dòng)配置的流程如下:

下載最新版Bugly iOS符號(hào)表工具,其中工具包中包括:

符號(hào)表工具JAR包(buglySymboliOS.jar)

Windows的腳本(buglySymboliOS.bat)

Shell腳本(buglySymboliOS.sh)

默認(rèn)符號(hào)表配置文件(settings.txt)

符號(hào)表工具iOS版-使用指南

根據(jù)Crash的UUID定位dSYM文件

使用工具生成符號(hào)表文件(zip文件)

在頁面上傳符號(hào)表文件

其他說明

Bugly iOS符號(hào)表工具2.3.0及以上版本增加了上傳功能,2.5.0及以上版本支持dSYM文件的上傳;

定位dSYM文件的方法和工具的使用方法請(qǐng)參考:“符號(hào)表工具iOS版-使用指南”。

符號(hào)表上傳接口

Bugly提供了上傳符號(hào)表的HTTP和HTTPS(請(qǐng)使用POST方式上傳)接口。

HTTP接口

iOS符號(hào)表接口:http://bugly.qq.com/upload/dsym

參數(shù)說明

上傳接口的參數(shù)說明如下:

屬性 說明

pid 平臺(tái)ID,固定為2

app App ID

key App Key

bid 包名(Package)

ver 版本號(hào)(Version Name)

n 符號(hào)表文件名)

其中包名、版本號(hào)和符號(hào)表文件名需要做URL Encode。

Content‐Type:

上傳.zip 文件:application/zip

例子:使用Curl上傳

使用Curl工具來上傳的例子如下:

curl -L --header "Content-Type: application/zip" --data-binary @symbol.zip

'http://bugly.qq.com/upload/dsym?pid=2&app=xxxxxx&key=xxxxxx&bid=com.demo.test&ver=1.0.1&n=symbol.zip' --verbose

HTTPS接口

HTTPS接口:https://api.bugly.qq.com/openapi/file/upload/symbol

HTTPS接口支持上傳dSYM文件(需要壓縮成Zip文件)和符號(hào)表文件(Symbol)。

參數(shù)說明

上傳接口的參數(shù)說明如下:

屬性 說明

api_version API版本,固定為1

app_id App ID

app_key App Key

symbolType 符號(hào)表類型,iOS為2

bundleId 包名(Package)

productVersion 版本號(hào)(Version Name)

fileName 符號(hào)表文件名

file 符號(hào)表文件

其中包名、版本號(hào)和符號(hào)表文件名需要做URL Encode。

例子:使用Curl上傳

使用Curl工具來上傳的例子如下:

上傳dSYM文件

curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=xxxxxx&app_id=xxxxxx" --form "api_version=1" --form "app_id=xxxxxx" --form "app_key=xxxxxx" --form "symbolType=1"? --form "bundleId=com.demo.test" --form "productVersion=1.0" --form "channel=xxx" --form "fileName=app.dSYM.zip" --form "file=@app.dSYM.zip" --verbose

上傳符號(hào)表文件(Symbol文件)

curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=xxxxxx&app_id=xxxxxx" --form "api_version=1" --form "app_id=xxxxxx" --form "app_key=xxxxxx" --form "symbolType=2"? --form "bundleId=com.demo.test" --form "productVersion=1.0" --form "fileName=symbol.zip" --form "file=@symbol.zip" --verbose

dSYM文件

什么是dSYM文件?

iOS平臺(tái)中,dSYM文件是指具有調(diào)試信息的目標(biāo)文件,文件名通常為:xxx.app.dSYM。如下圖所示:

為了方便找回Crash對(duì)應(yīng)的dSYM文件和還原堆棧,建議每次構(gòu)建或者發(fā)布APP版本的時(shí)候,備份好dSYM文件。

如何定位dSYM文件?

一般情況下,項(xiàng)目編譯完dSYM文件跟app文件在同一個(gè)目錄下,下面以XCode作為IDE詳細(xì)說明定位dSYM文件。

-> 進(jìn)入XCode;

-> 打開工程(已編譯過);

-> 在左欄找到“Product”項(xiàng);

-> 鼠標(biāo)右鍵點(diǎn)擊編譯生成的“xxx.app”;

-> 點(diǎn)擊“Show in Finder”;

如下圖所示:

如果有多個(gè)dSYM文件,可以在使用工具時(shí)指定輸入為dSYM文件所在的目錄或者工程目錄。

XCode編譯后沒有生成dSYM文件?

XCode Release編譯默認(rèn)會(huì)生成dSYM文件,而Debug編譯默認(rèn)不會(huì)生成,對(duì)應(yīng)的Xcode配置如下:

XCode -> Build Settings -> Code Generation -> Generate Debug Symbols -> Yes

XCode -> Build Settings -> Build Option -> Debug Information Format -> DWARF with dSYM File

開啟Bitcode之后需要注意哪些問題?

在點(diǎn)“Upload to App Store”上傳到App Store服務(wù)器的時(shí)候需要聲明符號(hào)文件(dSYM文件)的生成:

在配置符號(hào)表文件之前,需要從App Store中把該版本對(duì)應(yīng)的dSYM文件下載回本地(參考“如何找回已發(fā)布到App Store的App對(duì)應(yīng)的dSYM文件?”),然后用符號(hào)表工具生成和上傳符號(hào)表文件。

不需要配置自動(dòng)生成符號(hào)表的腳本了,也不要用本地生成的dSYM文件來生成符號(hào)表文件,因?yàn)楸镜鼐幾g生成的dSYM文件的符號(hào)表信息都被隱藏了。如果用本地編譯生成的dSYM文件生成符號(hào)表文件并配置到Bugly平臺(tái)之后,還原出來的結(jié)果將是類似于“__hiden#XXX”這樣的符號(hào)。

如何判斷dSYM文件是否與Crash的UUID匹配?

Bugly還原Crash堆棧時(shí),需要根據(jù)UUID來匹配符號(hào)表文件,因此只有上傳的符號(hào)表文件的UUID與Crash對(duì)應(yīng)APP的UUID一致時(shí),才能準(zhǔn)確地對(duì)堆棧進(jìn)行還原。

查看符號(hào)表文件的UUID(“如何查看dSYM文件的UUID?”)

查看Crash對(duì)應(yīng)的APP的UUID

Bugly v1.0頁面

崩潰 ---> Crash issue ---> dSYM UUID

Bugly v2.0頁面

崩潰分析 ---> Crash issue ---> 符號(hào)表 ---> UUID

如何查看dSYM文件的UUID?通過命令查看UUIDxcrun dwarfdump --uuid通過符號(hào)表文件查看UUID

符號(hào)表文件的UUID與dSYM文件的UUID是一致的,因此可以通過符號(hào)表工具生成的符號(hào)表文件來查看dSYM文件的UUID:

生成符號(hào)表文件(.zip) ---> 解壓符號(hào)表文件(.symbol) ---> 使用文本編輯器打開符號(hào)表文件

其中符號(hào)表文件的“UUID”信息即Debug SO文件的UUID,亦是符號(hào)表文件的UUID,如果文件較大,建議使用“Sublime Text”等文本編輯器來打開符號(hào)表文件。

如何找回已發(fā)布到App Store的App對(duì)應(yīng)的dSYM文件?

通過Xcode找回

打開 Xcode 頂部菜單欄 -> Window -> Organizer 窗口:

打開 Xcode 頂部菜單欄,選擇 Archive 標(biāo)簽:

找到發(fā)布的歸檔包,右鍵點(diǎn)擊對(duì)應(yīng)歸檔包,選擇Show in Finder操作:

右鍵選擇定位到的歸檔文件,選擇顯示包內(nèi)容操作:

選擇dSYMs目錄,目錄內(nèi)即為下載到的 dSYM 文件:

通過iTunes Connect找回

登錄iTunes Connect;

進(jìn)入“我的App(My Apps)”的“活動(dòng)(Activity)”頁面:

在“所有構(gòu)件版本(All Builds)”中選擇某一個(gè)版本,點(diǎn)“下載dSYM(Download dSYM)”下載dSYM文件:

通過mdfind工具找回在Bugly的issue頁面查詢到crash對(duì)應(yīng)的UUID:然后在Mac的Shell中,用mdfind命令定位dSYM文件:mdfind "com_apple_xcode_dsym_uuids =="

注意,使用mdfind時(shí),UUID需要格式轉(zhuǎn)換(增加“-”): 12345678-1234-1234-1234-xxxxxxxxxxxx

例如,要定位的dSYM的UUID為:E30FC309DF7B3C9F8AC57F0F6047D65F 則定位dSYM文件的命令如下:

mdfind "com_apple_xcode_dsym_uuids == E30FC309-DF7B-3C9F-8AC5-7F0F6047D65F"

|12345678-1234-1234-1234-xxxxxxxxxxxx|

建議每次構(gòu)建或者發(fā)布APP版本的時(shí)候,備份App對(duì)應(yīng)的dSYM文件!

文章來源:https://bugly.qq.com/docs/user-guide/symbol-configuration-ios/?v=1492997248592#top

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容