Nhận báo cáo sự cố dễ đọc trong trang tổng quan Crashlytics (các nền tảng của Apple)

Chọn nền tảng: iOS+ Android Flutter Unity


Theo mặc định, Firebase Crashlytics sẽ tự động xử lý các tệp biểu tượng gỡ lỗi (dSYM) để cung cấp cho bạn báo cáo sự cố đã được gỡ rối mã nguồn và con người có thể đọc được. Bạn thường định cấu hình hành vi này trong quá trình thiết lập ban đầu cho Crashlytics trong ứng dụng, cụ thể là bằng cách thêm tập lệnh chạy để tự động tải các tệp dSYM lên trong giai đoạn tạo bản dựng của ứng dụng.

Rất tiếc, có một số trường hợp có thể khiến quá trình tự động tải tệp dSYM lên không thành công. Hướng dẫn này cung cấp một số cách khắc phục sự cố khi Crashlytics không thể tìm thấy tệp dSYM của ứng dụng.

Đảm bảo Xcode có thể tự động xử lý dSYM và tải tệp lên

Khi thiết lập Crashlytics trong ứng dụng, bạn đã định cấu hình một tập lệnh chạy để tự động xử lý dSYM và tải các tệp lên.

Đảm bảo rằng cấu hình của bạn cho tập lệnh chạy Crashlytics được cập nhật theo các yêu cầu mới bắt đầu từ Xcode 15. Nếu cấu hình của bạn chưa được cập nhật, bạn có thể gặp lỗi sau:
error: Info.plist Error Unable to process Info.plist at path ....

Cụ thể, Xcode 15 trở lên yêu cầu bạn cung cấp một tập hợp vị trí tệp đầy đủ hơn. Đối với tập lệnh chạy Crashlytics (firebase-ios-sdk/Crashlytics/run), hãy đảm bảo rằng bạn đã thiết lập như sau:

  1. Nhấp vào thẻ Build Phases (Giai đoạn xây dựng), sau đó mở rộng mục Run Script (Chạy tập lệnh).

  2. Trong phần Input Files (Tệp đầu vào), hãy đảm bảo bạn có đường dẫn đến vị trí của các tệp sau:

    ${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)
    Nếu bạn có ENABLE_USER_SCRIPT_SANDBOXING=YES và ENABLE_DEBUG_DYLIB=YES trong chế độ cài đặt bản dựng của dự án, hãy thêm nội dung sau:
    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}.debug.dylib

Kiểm tra xem Xcode có đang tạo dSYM hay không

Thông thường, tệp dSYM bị thiếu vì Xcode không tạo ra các tệp đó. Khi không tải lên được, Crashlytics sẽ hiển thị cảnh báo "Thiếu dSYM" trong bảng điều khiển Firebase. Nếu bạn nhận được cảnh báo này, trước tiên, hãy kiểm tra để đảm bảo Xcode đang tạo dSYM chính xác cho mọi bản dựng:

  1. Mở dự án của bạn trong Xcode, sau đó chọn tệp dự án trong Xcode Navigator.

  2. Chọn mục tiêu bản dựng chính.

  3. Mở thẻ Build Settings (Cài đặt bản dựng) của mục tiêu, sau đó nhấp vào All (Tất cả).

  4. Tìm kiếm debug information format

  5. Đặt Debug Information Format (Định dạng thông tin gỡ lỗi) thành DWARF with dSYM File (DWARF có tệp dSYM) cho tất cả các loại bản dựng.

  6. Tạo lại ứng dụng.

Giờ đây, báo cáo sự cố của bạn sẽ xuất hiện trong Crashlytics trang tổng quan. Nếu vấn đề vẫn tiếp diễn hoặc bạn gặp phải các lỗi khác, hãy thử tìm dSYM và tải dSYM lên Crashlytics theo cách thủ công.

Tìm dSYM trên máy cục bộ

Chạy lệnh sau để hiển thị tất cả UUID của dSYM trên máy của bạn và tìm dSYM bị thiếu:

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

Sau khi tìm thấy dSYM, hãy tải tệp này lên Crashlytics theo cách thủ công. Nếu lệnh mdfind không trả về kết quả nào, bạn có thể xem trong thư mục Products nơi chứa .app (theo mặc định, thư mục Products nằm trong Derived Data). Nếu ứng dụng của bạn được phát hành công khai, bạn cũng có thể tìm dSYM của ứng dụng trong thư mục .xcarchive trên ổ đĩa:

  1. Trong Xcode, hãy mở cửa sổ Organizer (Trình tổ chức), sau đó chọn ứng dụng của bạn trong danh sách. Xcode sẽ hiển thị danh sách các bản lưu trữ cho dự án của bạn.

  2. Nhấn phím Control và nhấp vào một bản lưu trữ để xem bản lưu trữ đó trong Finder. Nhấn phím Control và nhấp vào tệp đó một lần nữa, sau đó nhấp vào Show Package Contents (Hiện nội dung gói).

  3. Trong .xcarchive là thư mục dSYM chứa dSYM được tạo trong quá trình lưu trữ của Xcode.

Tải dSYM lên

Crashlytics hỗ trợ nhiều cách để tải tệp dSYM lên, tự động hoặc thủ công.

(Nên dùng) Tự động xử lý dSYM và tải tệp lên

Khi thiết lập Crashlytics lần đầu, bạn có thể đã định cấu hình hành vi tải lên tự động này cho ứng dụng của mình. Tuy nhiên, nếu quá trình tải lên tự động không thành công, hãy kiểm tra để đảm bảo cấu hình của bạn là chính xác.

Tải tệp dSYM lên theo cách thủ công

Nếu không tải lên được theo cách tự động, bạn có thể tải tệp dSYM lên theo cách thủ công bằng một trong hai lựa chọn sau.

  • Cách 1: Sử dụng giao diện "Kéo và thả" trong bảng điều khiển Firebase để tải tệp zip chứa các tệp dSYM lên (chuyển đến trang tổng quan DevOps & Engagement (DevOps và mức độ tương tác) > Crashlytics > thẻ dSYMs (dSYM)).

  • Cách 2: Sử dụng tập lệnh upload-symbols mà bạn có thể gọi từ bất kỳ vị trí nào trong quy trình xây dựng để tải tệp dSYM lên theo cách thủ công. Để chạy tập lệnh upload-symbols, hãy sử dụng một trong các tuỳ chọn sau:

    • Cách A: Thêm dòng sau vào quy trình xây dựng:

      find dSYM_DIRECTORY -name "*.dSYM" | xargs -I \{\} $PODS_ROOT/FirebaseCrashlytics/upload-symbols -gsp /PATH/TO/GoogleService-Info.plist -p PLATFORM \{\}
    • Cách B: Chạy tập lệnh ngay trong dòng lệnh:

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

    Để xem ghi chú sử dụng và hướng dẫn bổ sung về tập lệnh này, hãy chạy upload-symbols bằng tham số --help.