เริ่มต้นใช้งาน Crashlytics สำหรับแพลตฟอร์ม Apple

เลือกแพลตฟอร์ม: iOS+ Android Android NDK Flutter Unity


คู่มือนี้จะอธิบายวิธีเริ่มต้นใช้งาน Firebase Crashlytics ใน แอปแพลตฟอร์ม Apple (เช่น แอป iOS)

หลังจากตั้งค่า Firebase Crashlytics SDK ในแอปแล้ว คุณจะ ได้รับรายงานข้อขัดข้องที่ครอบคลุมในคอนโซล Firebase โดย Crashlytics สำหรับแพลตฟอร์ม Apple จะให้รายงานข้อขัดข้องและข้อผิดพลาดที่ไม่ร้ายแรง

การตั้งค่า Crashlytics ต้องดำเนินการทั้งในคอนโซล Firebase และ IDE (เช่น การเพิ่มไฟล์การกำหนดค่า Firebase และ Crashlytics SDK) คุณจะต้องบังคับให้เกิดข้อขัดข้องในการทดสอบเพื่อส่งรายงานข้อขัดข้องแรกไปยัง Firebase จึงจะตั้งค่าให้เสร็จสมบูรณ์ได้

ก่อนเริ่มต้น

  1. หากยังไม่ได้เพิ่ม เพิ่ม Firebase ลงในโปรเจ็กต์ Apple หากไม่มีแอป Apple คุณสามารถดาวน์โหลดแอป ตัวอย่างได้

  2. แนะนำ: หากต้องการรับ บันทึก Breadcrumb โดยอัตโนมัติเพื่อทำความเข้าใจการดำเนินการของผู้ใช้ที่นำไปสู่ข้อขัดข้องหรือเหตุการณ์ที่ไม่ร้ายแรง คุณต้องเปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase

    • หากจะสร้างโปรเจ็กต์ Firebase ใหม่ ให้เปิดใช้ Google Analytics ในระหว่างขั้นตอนการสร้างโปรเจ็กต์

    • หากใช้โปรเจ็กต์ Firebase เดิมที่ไม่ได้เปิดใช้ Google Analytics คุณสามารถเปิดใช้ได้ในหน้า Settings > Integrations ของ Firebase คอนโซล

    โปรดทราบว่าบันทึก Breadcrumb ใช้ได้กับแพลตฟอร์ม Apple ทั้งหมดที่ Crashlytics รองรับ ยกเว้น watchOS

ขั้นตอนที่ 1: เพิ่ม Crashlytics SDK ลงในแอป

ใช้ Swift Package Manager เพื่อติดตั้งและจัดการทรัพยากร Dependency ของ Firebase

  1. เปิดโปรเจ็กต์แอปใน Xcode แล้วไปที่ File > Add Packages
  2. เมื่อได้รับข้อความแจ้ง ให้เพิ่มที่เก็บ Firebase Apple Platforms SDK ดังนี้
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. เลือกไลบรารี Crashlytics
  5. หากต้องการใช้ประโยชน์จาก บันทึก Breadcrumb ให้เพิ่ม Firebase SDK สำหรับ Google Analytics ลงในแอปด้วย และตรวจสอบว่า ได้เปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase แล้ว
  6. เพิ่มแฟล็ก -ObjC ลงในส่วน Other Linker Flags ของการตั้งค่าบิลด์ของเป้าหมาย
  7. (macOS เท่านั้น) ใน Info.plist ให้เพิ่มคีย์ NSApplicationCrashOnExceptions และตั้งค่าเป็น YES
  8. เมื่อเสร็จแล้ว Xcode จะเริ่มจับคู่ข้อมูลและดาวน์โหลด ทรัพยากร Dependency ในเบื้องหลังโดยอัตโนมัติ

จากนั้นกำหนดค่าโมดูล Firebase ดังนี้

  1. นำเข้าโมดูล Firebase ในโครงสร้าง App หรือ UIApplicationDelegate

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. กำหนดค่าอินสแตนซ์ที่แชร์ของ FirebaseApp ซึ่งโดยปกติจะอยู่ในเมธอด application(_:didFinishLaunchingWithOptions:) ของตัวแทนแอป

    Swift

    // Use the Firebase library to configure APIs.
    FirebaseApp.configure()

    Objective-C

    // Use the Firebase library to configure APIs.
    [FIRApp configure];

ขั้นตอนที่ 2: ตั้งค่า Xcode ให้อัปโหลดไฟล์ dSYM โดยอัตโนมัติ

เพื่อให้สร้างรายงานข้อขัดข้องที่อ่านได้ Crashlytics ต้องใช้ไฟล์ ดีบักซิมโบล (dSYM) ของโปรเจ็กต์ ขั้นตอนต่อไปนี้จะอธิบายวิธีกำหนดค่า Xcode ให้สร้าง dSYM ประมวลผล และอัปโหลดไฟล์โดยอัตโนมัติทุกครั้งที่คุณสร้างแอป

  1. เปิดพื้นที่ทำงาน Xcode ของโปรเจ็กต์ แล้วเลือกไฟล์โปรเจ็กต์ในแถบนำทางด้านซ้าย

  2. เลือกเป้าหมายบิลด์หลักจากรายการ TARGETS

  3. คลิกแท็บ Build Settings แล้วทำตามขั้นตอนต่อไปนี้เพื่อให้ Xcode สร้าง dSYM สำหรับบิลด์

    1. คลิก All แล้วค้นหา debug information format

    2. ตั้งค่า Debug Information Format เป็น DWARF with dSYM File สำหรับบิลด์ทุกประเภท

  4. คลิกแท็บ Build Phases แล้วทำตามขั้นตอนต่อไปนี้เพื่อให้ Xcode ประมวลผล dSYM และอัปโหลดไฟล์ได้

    1. คลิก > New Run Script Phase

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

    2. ขยายส่วน Run Script ใหม่

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

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

      "${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"
    4. ในส่วน 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

ดูข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับไฟล์ dSYM และ Crashlytics (รวมถึง วิธีอัปโหลดไฟล์ dSYM ด้วยตนเอง) ได้ที่ รับรายงานข้อขัดข้องที่ยกเลิกการปกปิดแล้ว

ขั้นตอนที่ 3: บังคับให้เกิดข้อขัดข้องในการทดสอบเพื่อตั้งค่าให้เสร็จสมบูรณ์

หากต้องการตั้งค่า Crashlytics ให้เสร็จสมบูรณ์และดูข้อมูลเริ่มต้นใน Crashlytics แดชบอร์ดของ Firebase คอนโซล คุณต้องบังคับให้เกิด ข้อขัดข้องในการทดสอบ

  1. เพิ่มโค้ดลงในแอปที่คุณใช้บังคับให้เกิดข้อขัดข้องในการทดสอบได้

    คุณสามารถใช้โค้ดต่อไปนี้เพื่อเพิ่มปุ่มลงในแอป ซึ่งเมื่อกดแล้วจะทำให้เกิดข้อขัดข้อง ปุ่มนี้มีป้ายกำกับว่า "Test Crash"

    SwiftUI

    Button("Crash") {
      fatalError("Crash was triggered")
    }

    UIKit

    Swift

    import UIKit
    
    class ViewController: UIViewController {
      override func viewDidLoad() {
          super.viewDidLoad()
    
          // Do any additional setup after loading the view, typically from a nib.
    
          let button = UIButton(type: .roundedRect)
          button.frame = CGRect(x: 20, y: 50, width: 100, height: 30)
          button.setTitle("Test Crash", for: [])
          button.addTarget(self, action: #selector(self.crashButtonTapped(_:)), for: .touchUpInside)
          view.addSubview(button)
      }
    
      @IBAction func crashButtonTapped(_ sender: AnyObject) {
          let numbers = [0]
          let _ = numbers[1]
      }
    }

    Objective-C

    #import "ViewController.h"
    
    @implementation ViewController(void)viewDidLoad {
        [super viewDidLoad];
    
        // Do any additional setup after loading the view, typically from a nib.
    
        UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake(20, 50, 100, 30);
        [button setTitle:@"Test Crash" forState:UIControlStateNormal];
        [button addTarget:self action:@selector(crashButtonTapped:)
            forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:button];
    }
    
     (IBAction)crashButtonTapped:(id)sender {
        @[][1];
    }
    
    @end
  2. สร้างและเรียกใช้แอปใน Xcode โดยยกเลิกการเชื่อมต่อดีบักเกอร์ Xcode

    1. คลิก Build and then run the current scheme เพื่อสร้างแอปในอุปกรณ์ทดสอบหรือ เครื่องจำลอง

    2. รอจนกว่าแอปจะทำงาน แล้วคลิก Stop running the scheme or action เพื่อปิดอินสแตนซ์เริ่มต้นของแอป อินสแตนซ์เริ่มต้นนี้มีดีบักเกอร์ที่รบกวน Crashlytics

  3. บังคับให้เกิดข้อขัดข้องในการทดสอบเพื่อส่งรายงานข้อขัดข้องแรกของแอป โดยทำดังนี้

    1. เปิดแอปจากหน้าจอหลักของอุปกรณ์ทดสอบหรือเครื่องจำลอง

    2. ในแอป ให้กดปุ่ม "Test Crash" ที่คุณเพิ่มโดยใช้โค้ดด้านบน

    3. หลังจากแอปขัดข้อง ให้เรียกใช้แอปอีกครั้งจาก Xcode เพื่อให้แอปส่งรายงานข้อขัดข้องไปยัง Firebase ได้

  4. ในคอนโซล Firebase ให้ไปที่แดชบอร์ด DevOps & Engagement > Crashlytics เพื่อตรวจสอบรายงานข้อขัดข้องในการทดสอบ

    หากรีเฟรชคอนโซลแล้วแต่ยังไม่เห็นข้อขัดข้องในการทดสอบ หลังจากผ่านไป 5 นาที ให้เปิดใช้การบันทึกการดีบัก เพื่อดูว่าแอปส่งรายงานข้อขัดข้องหรือไม่


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

ขั้นตอนถัดไป