在 Crashlytics 資訊主頁中取得可讀的當機報告


根據預設,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=YESENABLE_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 Navigator 中選取專案檔案。

  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 目錄 (預設位於 Derived Data)。如果應用程式已發布至正式版,您也可以在磁碟上的 .xcarchive 目錄中尋找 dSYM:Products

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

  2. 按住 Control 鍵並點選封存檔,即可在 Finder 中查看。再次按住 Control 鍵並點按,然後按一下「顯示套件內容」

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

上傳 dSYM

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

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

您在首次設定 Crashlytics 時,很可能已為應用程式設定這項自動上傳行為。不過,如果自動上傳失敗,請檢查設定是否正確

手動上傳 dSYM 檔案

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

  • 選項 1:使用控制台的「拖曳」選項,上傳包含 dSYM 檔案的 zip 檔案 (前往Firebase控制台 >Crashlytics >「dSYMs」分頁)。

  • 選項 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 參數。