รับรายงานข้อขัดข้องที่อ่านได้ในหน้าแดชบอร์ด Crashlytics


โดยค่าเริ่มต้น Firebase Crashlytics จะเครื่องมือโปรเจ็กต์ Flutter โดยอัตโนมัติเพื่ออัปโหลดไฟล์สัญลักษณ์ที่จำเป็นเพื่อให้แน่ใจว่ารายงานข้อขัดข้องได้รับการถอดรหัสซอร์สโค้ดที่เป็นภาษามนุษย์และอ่านได้

ขออภัย อาจมีบางกรณีที่อาจส่งผลให้โปรเจ็กต์ได้รับการกําหนดค่าไม่สมบูรณ์ คู่มือนี้จะอธิบายสิ่งที่การทำงานอัตโนมัติทําและแสดงขั้นตอนแรกในการแก้ไขข้อบกพร่องการตั้งค่าโปรเจ็กต์

แพลตฟอร์มของ Apple

ตรวจสอบการกําหนดค่าสําหรับการอัปโหลดไฟล์ dSYM

การเพิ่มปลั๊กอิน Crashlytics Flutter และการรันคำสั่ง flutterfire configure จะพยายามเพิ่มสคริปต์การทำงานลงในเวิร์กスペース Xcode ของโปรเจ็กต์ ซึ่งจะค้นหาและอัปโหลดไฟล์สัญลักษณ์ dSYM ที่จำเป็นไปยัง Crashlytics หากไม่มีไฟล์เหล่านี้ คุณจะเห็นการแจ้งเตือน "dSYM ขาดหายไป" ในแดชบอร์ด Crashlytics และแบ็กเอนด์จะระงับข้อยกเว้นไว้จนกว่าจะมีการอัปโหลดไฟล์ที่ขาดหายไป

หากพบปัญหานี้ ก่อนอื่นให้ตรวจสอบว่าคุณได้ติดตั้งสคริปต์เรียกใช้แล้ว โดยทำดังนี้

  1. ค้นหาและเปิดไฟล์เวิร์กสเปซ Xcode ในไดเรกทอรี iOS ของโปรเจ็กต์ (FLUTTER_PROJECT_NAME/ios/Runner.xcworkspace)

  2. ระบุว่ามีการเพิ่มสคริปต์การทำงานชื่อ [firebase_crashlytics] Crashlytics Upload Symbols ไปยังระยะการสร้างของเป้าหมาย Runner หรือไม่

    ดูในส่วนที่เกี่ยวข้องด้านล่างเพื่อดูว่าสคริปต์เรียกใช้ไม่มีอยู่หรือสคริปต์เรียกใช้มีอยู่

หากสคริปต์การเรียกใช้นี้ไม่มีอยู่ คุณสามารถเพิ่มสคริปต์ด้วยตนเองได้ดังนี้

  1. ค้นหารหัสแอป Firebase สําหรับแอป Apple ของคุณ คุณสามารถค้นหารหัสนี้ได้ 2 แห่ง ดังนี้

    • ในคอนโซล Firebase ให้ไปที่ > การตั้งค่าโปรเจ็กต์ เลื่อนลงไปที่การ์ดแอปของคุณ แล้วคลิกแอป Firebase สำหรับ Apple เพื่อดูข้อมูลแอป รวมถึงรหัสแอป

    • ในไดเรกทอรีระดับบนสุดของโปรเจ็กต์ Flutter ให้ค้นหาไฟล์ firebase_options.dart รหัสแอป Firebase สําหรับแอป Apple ของคุณจะติดป้ายกํากับเป็น GOOGLE_APP_ID

  2. คลิก > ระยะการเรียกใช้สคริปต์ใหม่

    ตรวจสอบว่าระยะเรียกใช้สคริปต์ใหม่นี้เป็นระยะการสร้างโปรเจ็กต์ครั้งล่าสุด มิฉะนั้น Crashlytics จะประมวลผล dSYM อย่างไม่ถูกต้อง

  3. ขยายส่วนเรียกใช้สคริปต์ใหม่

  4. ในช่องสคริปต์ (ใต้ป้ายกำกับ Shell) ให้เพิ่มสคริปต์เรียกใช้ต่อไปนี้

    สคริปต์เหล่านี้จะประมวลผลไฟล์ dSYM และอัปโหลดไฟล์ไปยัง Crashlytics

    $PODS_ROOT/FirebaseCrashlytics/upload-symbols --build-phase --validate -ai FIREBASE_APP_ID -- $DWARF_DSYM_FOLDER_PATH/App.framework.dSYM
    $PODS_ROOT/FirebaseCrashlytics/upload-symbols --build-phase -ai FIREBASE_APP_ID -- $DWARF_DSYM_FOLDER_PATH/App.framework.dSYM 
    • FIREBASE_APP_ID: รหัสแอป Firebase สำหรับ Apple (ไม่ใช่รหัสกลุ่มแอป Apple)
      ตัวอย่างรหัสแอป Firebase สำหรับ Apple: 1:1234567890:ios:321abc456def7890

    คุณดูรหัสแอป Firebase ได้ 2 วิธีดังนี้

    • ในไฟล์ GoogleService-Info.plist รหัสแอปคือค่า GOOGLE_APP_ID หรือ

    • ในคอนโซล Firebase ให้ไปที่การตั้งค่าโปรเจ็กต์ เลื่อนลงไปที่การ์ดแอปของคุณ แล้วคลิกแอป Firebase ที่ต้องการเพื่อค้นหารหัสแอป

  5. ในส่วนไฟล์อินพุต ให้เพิ่มเส้นทางไปยังตำแหน่งของไฟล์ต่อไปนี้

    ${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)

    Xcode จะค้นหาไฟล์อินพุตเหล่านี้ในตำแหน่งที่ระบุเพื่อให้แน่ใจว่าไฟล์บิลด์พร้อมใช้งานสำหรับสคริปต์การเรียกใช้ นอกจากนี้ หากเปิดใช้แซนด์บ็อกซ์สคริปต์ของผู้ใช้ Xcode จะอนุญาตให้สคริปต์ที่เรียกใช้ได้เข้าถึงเฉพาะไฟล์ที่ระบุไว้ในไฟล์อินพุตเท่านั้น

    • การให้ตำแหน่งของไฟล์ dSYM ของโปรเจ็กต์จะช่วยให้ Crashlytics ประมวลผล dSYM ได้
    • การระบุตำแหน่งไฟล์ GoogleService-Info.plist ที่คอมไพล์แล้วของแอปจะช่วยให้ Crashlytics เชื่อมโยง dSYM กับแอป Firebase ได้
    • การระบุตำแหน่งของไฟล์ปฏิบัติการของแอปจะช่วยให้สคริปต์รันไทม์ป้องกันไม่ให้มีการอัปโหลด dSYM เดียวกันซ้ำ โปรดทราบว่าไม่ได้อัปโหลดไฟล์ไบนารีของแอป

หากสคริปต์การเรียกใช้มีอยู่แล้ว โปรดดูคู่มือเฉพาะสำหรับ Apple สำหรับการแก้ปัญหา dSYM คุณจะต้องทําตามขั้นตอนเพิ่มเติมต่อไปนี้หากเลือกที่จะอัปโหลดไฟล์ dSYM ผ่านกระบวนการที่อธิบายไว้

  1. ค้นหารหัสแอป Firebase สําหรับแอป Apple ของคุณ คุณสามารถค้นหารหัสนี้ได้ 2 แห่ง ดังนี้

    • ในคอนโซล Firebase ให้ไปที่ > การตั้งค่าโปรเจ็กต์ เลื่อนลงไปที่การ์ดแอปของคุณ แล้วคลิกแอป Firebase สำหรับ Apple เพื่อดูข้อมูลแอป รวมถึงรหัสแอป

    • ในไดเรกทอรีระดับบนสุดของโปรเจ็กต์ Flutter ให้ค้นหาไฟล์ firebase_options.dart รหัสแอป Firebase สําหรับแอป Apple ของคุณจะติดป้ายกํากับเป็น GOOGLE_APP_ID

  2. เมื่อเรียกใช้สคริปต์ upload-symbols ให้ใช้ -ai FIREBASE_APPLE_APP_ID แทน -gsp /path/to/GoogleService-Info.plist

ตรวจสอบการกำหนดค่าเวอร์ชันสำหรับ Flutter และ Crashlytics (หากใช้ Flag --split-debug-info)

หากโปรเจ็กต์ Flutter ใช้ Flag --split-debug-info (และ Flag --obfuscate ด้วยหากต้องการ) คุณจะต้องทําตามขั้นตอนเพิ่มเติมเพื่อแสดงสแต็กเทรซที่อ่านได้สําหรับแอป

ตรวจสอบว่าโปรเจ็กต์ใช้การกำหนดค่าเวอร์ชันที่แนะนำ (Flutter 3.12.0 ขึ้นไปและCrashlyticsปลั๊กอิน Flutter 3.3.4 ขึ้นไป) เพื่อให้โปรเจ็กต์สร้างและอัปโหลดสัญลักษณ์ Flutter (ไฟล์ dSYM) ไปยัง Crashlytics โดยอัตโนมัติ

Android

ตรวจสอบการกำหนดค่าทรัพยากร Dependency

คำสั่ง flutterfire configure จะพยายามเพิ่มการพึ่งพาที่จำเป็นลงในไฟล์บิลด์ Gradle ของโปรเจ็กต์ หากไม่มีไฟล์เหล่านี้ รายงานข้อขัดข้องในคอนโซล Firebase อาจถูกสร้างความสับสนหากเปิดใช้การสร้างความสับสน

ตรวจสอบว่ามีบรรทัดต่อไปนี้ใน build.gradle ระดับโปรเจ็กต์ และ build.gradle ระดับแอป

  • ในไฟล์บิลด์ระดับโปรเจ็กต์ (android/build.gradle) ให้มองหาบรรทัดต่อไปนี้

    dependencies {
    // ... other dependencies
    
    classpath 'com.google.gms:google-services:4.3.5'
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
    }
  • ในไฟล์บิลด์ระดับแอป (android/app/build.gradle) ให้มองหาบรรทัดต่อไปนี้

    // ... other imports
    
    android {
    // ... your android config
    }
    
    dependencies {
    // ... your dependencies
    }
    
    // This section must appear at the bottom of the file
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'com.google.firebase.crashlytics'

ตรวจสอบว่าคุณใช้ CLI เพื่ออัปโหลดสัญลักษณ์ Flutter (หากใช้ Flag --split-debug-info)

หากโปรเจ็กต์ Flutter ใช้ Flag --split-debug-info (และ Flag --obfuscate ด้วยหากต้องการ) คุณจะต้องทําตามขั้นตอนเพิ่มเติมเพื่อแสดงสแต็กเทรซที่อ่านได้สําหรับแอป

ใช้ Firebase CLI (v.11.9.0 ขึ้นไป) เพื่ออัปโหลดสัญลักษณ์การแก้ไขข้อบกพร่องของ Flutter คุณต้องอัปโหลดสัญลักษณ์การแก้ไขข้อบกพร่องก่อนรายงานข้อขัดข้องจากบิลด์โค้ดที่มีการสร้างความสับสน

จากไดเรกทอรีรูทของโปรเจ็กต์ Flutter ให้เรียกใช้คำสั่งต่อไปนี้

firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/symbols
  • FIREBASE_APP_ID: รหัสแอป Firebase สำหรับ Android (ไม่ใช่ชื่อแพ็กเกจ)
    ตัวอย่างรหัสแอป Firebase สำหรับ Android: 1:567383003300:android:17104a2ced0c9b9b

    คุณดูรหัสแอป Firebase ได้ 2 วิธีดังนี้

    • ในไฟล์ google-services.json รหัสแอปคือค่า mobilesdk_app_id หรือ

    • ในคอนโซล Firebase ให้ไปที่การตั้งค่าโปรเจ็กต์ เลื่อนลงไปที่การ์ดแอปของคุณ แล้วคลิกแอป Firebase ที่ต้องการเพื่อค้นหารหัสแอป

  • PATH/TO/symbols: ไดเรกทอรีเดียวกับที่คุณส่งให้กับ Flag --split-debug-info เมื่อสร้างแอปพลิเคชัน

หากยังพบปัญหาอยู่ โปรดดูคำแนะนำเฉพาะสำหรับ Android ในการแก้ปัญหารายงานที่มีการสร้างความสับสน