在 Crashlytics 資訊主頁中取得淺顯易懂的當機報告 (Apple 平台)

選取平台: iOS+ Android Flutter Unity


根據預設,Firebase Crashlytics 會自動處理偵錯符號 (dSYM) 檔案,提供去模糊化且人類可讀的當機報告。您通常會在應用程式中初始設定 Crashlytics 時,設定這項行為,具體做法是新增執行指令碼,在應用程式建構階段自動上傳 dSYM 檔案。

不過,在某些情況下,自動上傳 dSYM 檔案可能會失敗。本指南提供一些疑難排解方法,協助您解決 Crashlytics 找不到應用程式 dSYM 檔案的問題。

確認 Xcode 可自動處理 dSYM 並上傳檔案

在應用程式中設定 Crashlytics 時,您已設定執行指令碼,自動處理 dSYM 並上傳檔案。

請確認 Crashlytics 執行指令碼的設定符合 Xcode 15 開始實施的新規定。如果設定不是最新版本,可能會收到以下錯誤訊息:
error: Info.plist Error Unable to process Info.plist at path ...。

具體來說,Xcode 15 以上版本會要求您提供更完整的檔案位置組合。針對 Crashlytics 執行指令碼 (firebase-ios-sdk/Crashlytics/run),請務必完成下列設定:

  1. 按一下「Build Phases」分頁標籤,然後展開「Run Script」部分。

  2. 在「Input Files」(輸入檔案) 部分,確認您有下列檔案的位置路徑:

    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}
    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist
    $(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist
    $(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)
    如果專案建構設定中有 ENABLE_USER_SCRIPT_SANDBOXING=YES 和 ENABLE_DEBUG_DYLIB=YES,請加入下列內容:
    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}.debug.dylib

檢查 Xcode 是否產生 dSYM

dSYM 檔案通常會遺失,因為 Xcode 根本不會產生這些檔案。上傳失敗時,Crashlytics 會在 Firebase 控制台中顯示「缺少 dSYM」快訊。如果收到這則快訊,請先確認 Xcode 是否為每個版本產生正確的 dSYM:

  1. 在 Xcode 中開啟專案,然後在 Xcode 導覽器中選取專案檔案。

  2. 選取主要建構目標。

  3. 開啟目標的「Build Settings」分頁標籤,然後按一下「All」。

  4. 搜尋:debug information format。

  5. 將所有建構類型的「Debug Information Format」設為「DWARF with dSYM File」。

  6. 重新建構應用程式。

當機報告現在應該會顯示在Crashlytics 資訊主頁中。如果問題仍未解決,或遇到其他錯誤,請嘗試找出 dSYM,並手動上傳至 Crashlytics。

在本機電腦上找出 dSYM

執行下列指令,在機器上顯示所有 dSYM 的 UUID,並搜尋缺少的 dSYM:

mdfind -name .dSYM | while read -r line; do dwarfdump -u "$line"; done

找到 dSYM 後,請手動上傳至 Crashlytics。如果 mdfind 指令未傳回任何結果,您可以在 .app 所在的 Products 目錄中尋找 (根據預設,Products 目錄位於 Derived Data)。如果應用程式已發布至正式版,您也可以在磁碟上的 .xcarchive 目錄中尋找其 dSYM:

  1. 在 Xcode 中開啟「Organizer」視窗,然後從清單中選取應用程式。Xcode 會顯示專案的封存清單。

  2. 按住 Control 鍵並點選封存檔,即可在 Finder 中查看。再次按住 Control 鍵並點選該檔案,然後按一下「Show Package Contents」。

  3. .xcarchive 內有一個 dSYMs 目錄,其中包含 Xcode 封存程序產生的 dSYM。

上傳 dSYM

Crashlytics 支援多種上傳 dSYM 檔案的方式,包括自動或手動。

(建議) 自動處理 dSYM 並上傳檔案

初次設定 Crashlytics 時,您可能已為應用程式設定這項自動上傳行為。不過,如果自動上傳失敗,請確認設定正確無誤。

手動上傳 dSYM 檔案

如果自動上傳失敗,可以採用下列任一選項,手動上傳 dSYM 檔案。

  • 方法 1:在 Firebase 控制台中使用「拖放」介面,上傳含有 dSYM 檔案的 ZIP 檔案 (依序前往「DevOps 與參與度」 > 「Crashlytics 資訊主頁」 >「dSYM」分頁)。

  • 方法 2:使用 upload-symbols 指令碼,在建構程序的任何階段呼叫該指令碼,手動上傳 dSYM 檔案。如要執行 upload-symbols 指令碼,請使用下列任一選項:

    • 選項 A:在建構程序中加入下列程式碼:

      find dSYM_DIRECTORY -name "*.dSYM" | xargs -I \{\} $PODS_ROOT/FirebaseCrashlytics/upload-symbols -gsp /PATH/TO/GoogleService-Info.plist -p PLATFORM \{\}
    • 做法 B:直接從終端機執行指令碼:

      /PATH/TO/PODS/DIRECTORY/FirebaseCrashlytics/upload-symbols -gsp /PATH/TO/GoogleService-Info.plist -p ios /PATH/TO/dSYMs

    如需使用注意事項和這個指令碼的其他操作說明,請執行 upload-symbols 並加上 --help 參數。