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ố đã gỡ rối mã nguồn và dễ đọ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 của Crashlytics trong ứng dụng, cụ thể là bằng cách thêm một tập lệnh chạy tự động tải các tệp dSYM lên trong giai đoạn xây dựng ứng dụng.
Rất tiếc, có một số trường hợp có thể khiến quá trình tải tệp dSYM tự động 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 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 các 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 cho tập lệnh chạy Crashlytics của bạn đượ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 bộ 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:
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).
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
Nếu bạn có$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)
ENABLE_USER_SCRIPT_SANDBOXING=YES
vàENABLE_DEBUG_DYLIB=YES
trong chế độ cài đặt bản dựng dự án, hãy thêm những nội dung sau:${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}.debug.dylib
Hiểu lý do bạn cần biết vị trí của những tệp này
Xcode tìm kiếm các tệp đầu vào này ở những vị trí được chỉ định để đảm bảo rằng các tệp bản dựng có sẵn cho tập lệnh chạy. Ngoài ra, nếu bạn bật User Script Sandboxing (Hộp cát tập lệnh người dùng), thì Xcode chỉ cho phép tập lệnh chạy truy cập vào các tệp được chỉ định trong Input Files (Tệp đầu vào).
- Việc cung cấp vị trí của các tệp dSYM trong dự án sẽ cho phép Crashlytics xử lý dSYM.
- Việc cung cấp vị trí của tệp
GoogleService-Info.plist
đã tạo của ứng dụng cho phép Crashlytics liên kết dSYM với ứng dụng Firebase của bạn. - Việc cung cấp vị trí của tệp thực thi của ứng dụng cho phép tập lệnh chạy ngăn chặn việc tải lên trùng lặp cùng một dSYM. Xin lưu ý rằng các tệp nhị phân của ứng dụng không được tải lên.
Kiểm tra xem Xcode có tạo dSYM hay không
Thông thường, các tệp dSYM bị thiếu là do Xcode không tạo ra chúng. Khi quá trình tải lên không thành công, 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:
Mở dự án trong Xcode, sau đó chọn tệp dự án trong Trình điều hướng Xcode.
Chọn mục tiêu chính để tạo bản dựng.
Mở thẻ Build Settings (Cài đặt bản dựng) của mục tiêu, rồi nhấp vào All (Tất cả).
Tìm kiếm
debug information format
Đặ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.
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 trang tổng quan Crashlytics. 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ử xác định vị trí dSYM và tải dSYM lên Crashlytics theo cách thủ công.
Xác định vị trí dSYM trên máy cục bộ
Chạy lệnh sau để hiển thị tất cả UUID 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ể tìm trong thư mục Products
nơi .app
của bạn lưu trú (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 cho sản xuất, bạn cũng có thể tìm dSYM của ứng dụng trong thư mục .xcarchive
trên đĩa:
Trong Xcode, hãy mở cửa sổ Trình sắp xếp, rồi chọn ứng dụng của bạn trong danh sách. Xcode sẽ hiển thị danh sách các kho lưu trữ cho dự án của bạn.
Nhấn tổ hợp phím Control rồi nhấp vào một tệp lưu trữ để xem tệp đó trong Finder. Nhấp lại vào biểu tượng đó bằng tổ hợp phím Control, rồi nhấp vào Show Package Contents (Hiện nội dung gói).
Trong
.xcarchive
là một thư mục dSYMs chứa các dSYM được tạo trong quy 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, rất có thể bạn đã đị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 rằng 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 quá trình tải lên tự động không thành công, bạn có thể tải tệp dSYM lên theo cách thủ công bằng một trong hai cách sau.
Cách 1: Sử dụng lựa chọn "Kéo và thả" dựa trên bảng điều khiển để tải tệp zip chứa các tệp dSYM lên (chuyển đến bảng điều khiển Firebase > Crashlytics > thẻ dSYM).
Cách 2: Sử dụng tập lệnh
upload-symbols
mà bạn có thể gọi từ bất cứ đâu trong quy trình tạo để tải tệp dSYM lên theo cách thủ công. Để chạy tập lệnhupload-symbols
, hãy dùng một trong hai lựa chọn sau:Lựa chọn 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 -pPLATFORM \{\}Cách B: Chạy tập lệnh ngay từ thiết bị đầu cuối:
/PATH/TO/PODS/DIRECTORY/ FirebaseCrashlytics/upload-symbols -gsp/PATH/TO/ GoogleService-Info.plist -p ios/PATH/TO/dSYMs
Để xem ghi chú về cá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
.