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

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


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

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

หากต้องการความช่วยเหลือจาก AI ให้คัดลอกพรอมต์ด้านล่างลงใน Agent การเขียนโค้ด AI (เช่น Antigravity, Claude Code, Codex และ Cursor) คุณสามารถปรับแต่งพรอมต์และทำซ้ำกับเอเจนต์ได้ ดูข้อมูลการติดตั้งโดยละเอียดได้ที่ ทักษะเอเจนต์ Firebase

Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me set up Firebase Crashlytics for my app.

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

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

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

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

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

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

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

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

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

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

จากนั้นกําหนดค่าโมดูล 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. คลิกแท็บการตั้งค่าการสร้าง แล้วทำตามขั้นตอนต่อไปนี้เพื่อให้ Xcode สร้าง dSYM สำหรับบิลด์ของคุณ

    1. คลิกทั้งหมด แล้วค้นหา debug information format

    2. ตั้งค่ารูปแบบข้อมูลการแก้ไขข้อบกพร่องเป็น DWARF with dSYM File สำหรับบิลด์ทุกประเภท

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

    1. คลิก > New Run Script Phase

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

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

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

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

      "${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"
    4. ในส่วนไฟล์อินพุต ให้เพิ่มเส้นทางไปยังตำแหน่งของไฟล์ต่อไปนี้

      ${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. เพิ่มโค้ดลงในแอปที่คุณใช้บังคับให้เกิดข้อขัดข้องในการทดสอบได้

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

    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. คลิกสร้าง แล้ว เรียกใช้ Scheme ปัจจุบันเพื่อสร้างแอปในอุปกรณ์ทดสอบหรือ โปรแกรมจำลอง

    2. รอจนกว่าแอปจะทํางาน แล้วคลิกหยุดเรียกใช้ Scheme หรือ การกระทําเพื่อปิดอินสแตนซ์เริ่มต้นของแอป อินสแตนซ์เริ่มต้นนี้ มีดีบักเกอร์ที่รบกวน Crashlytics

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

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

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

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

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

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


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

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