תחילת העבודה עם Crashlytics לפלטפורמות של אפל

בחירת פלטפורמה: iOS+‎ Android Android NDK Flutter Unity


במדריך הזה מוסבר איך להתחיל להשתמש ב-Firebase Crashlytics באפליקציה לפלטפורמות של אפל (לדוגמה, אפליקציית iOS).

אחרי שמגדירים את Firebase Crashlytics ה-SDK באפליקציה, אפשר לקבל דוחות מקיפים על קריסות בFirebase Console. עם Crashlytics לפלטפורמות של אפל, מקבלים דוחות על קריסות ושגיאות לא קריטיות.

ההגדרה של Crashlytics דורשת ביצוע משימות גם בFirebase מסוף Firebase וגם בסביבת הפיתוח המשולבת (IDE) (למשל, הוספה של קובץ הגדרות של Firebase ושל Crashlytics SDK). כדי לסיים את ההגדרה, צריך לגרום לקריסת בדיקה כדי לשלוח את דוח הקריסה הראשון ל-Firebase.

לפני שמתחילים

  1. אם עדיין לא עשיתם זאת, אתם צריכים להוסיף את Firebase לפרויקט Apple. אם אין לכם אפליקציית Apple, אתם יכולים להוריד אפליקציה לדוגמה.

  2. מומלץ: כדי לקבל באופן אוטומטי יומני נתיב ולהבין את פעולות המשתמש שהובילו לקריסה או לאירוע לא קטלני, צריך להפעיל את Google Analytics בפרויקט Firebase.

    • אם אתם יוצרים פרויקט חדש ב-Firebase, זכרו להפעיל את Google Analytics לפני שתסיימו ליצור את הפרויקט.

    • אם אתם משתמשים בפרויקט קיים ב-Firebase שלא הפעלתם בו את Google Analytics, אתם יכולים להפעיל אותו בדף Settings (הגדרות) > Integrations (שילובים) במסוף Firebase.

    הערה: יומני נתיבי מיקום זמינים לכל הפלטפורמות של אפל שנתמכות על ידי Crashlytics, למעט watchOS.

שלב 1: מוסיפים את Crashlytics SDK לאפליקציה

משתמשים ב-Swift Package Manager כדי להתקין ולנהל יחסי תלות ב-Firebase.

  1. ב-Xcode, כשפרויקט האפליקציה פתוח, עוברים אל File > Add Packages (קובץ > הוספת חבילות).
  2. כשמוצגת בקשה, מוסיפים את מאגר Firebase Apple platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. בוחרים בספרייה Crashlytics.
  5. כדי להשתמש ביומני נתיבי ניווט, צריך להוסיף לאפליקציה גם את Firebase SDK for Google Analytics. חשוב לוודא שGoogle Analytics מופעל בפרויקט Firebase.
  6. מוסיפים את הדגל -ObjC לקטע Other Linker Flags בהגדרות הבנייה של יעד הקישור.
  7. (macOS בלבד) ב-Info.plist, מוסיפים את המפתח NSApplicationCrashOnExceptions ומגדירים אותו ל-YES.
  8. אחרי שתסיימו, פלטפורמת Xcode תתחיל לטפל ביחסי התלות ולהוריד אותם ברקע באופן אוטומטי.

לאחר מכן מגדירים את מודול Firebase:

  1. מייבאים את מודול Firebase ב-App struct או ב-UIApplicationDelegate:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. מגדירים מופע משותף, בדרך כלל בשיטה של נציג האפליקציה:FirebaseAppapplication(_: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, יעבד אותם ויעלה את הקבצים בכל פעם שמבצעים build של האפליקציה.

  1. פותחים את סביבת העבודה של פרויקט Xcode, ואז בוחרים את קובץ הפרויקט בחלונית הניווט הימנית.

  2. ברשימה TARGETS (יעדים), בוחרים את יעד הבנייה הראשי.

  3. לוחצים על הכרטיסייה Build Settings (הגדרות בנייה) ומבצעים את השלבים הבאים כדי ש-Xcode ייצור קובצי dSYM עבור הבנייה.

    1. לוחצים על הכול ואז מחפשים את debug information format.

    2. מגדירים את פורמט מידע הניפוי באגים ל-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. מוסיפים לאפליקציה קוד שאפשר להשתמש בו כדי לגרום לקריסה של הבדיקה.

    אפשר להשתמש בקוד הבא כדי להוסיף לאפליקציה לחצן שגורם לקריסה כשלוחצים עליו. הכפתור נקרא 'בדיקת קריסה'.

    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. מבצעים Build לאפליקציה ומריצים אותה ב-Xcode כשה-debugger של Xcode מנותק.

    1. לוחצים על Build (גרסה) ואז עלrun the current scheme (הפעלת הסכימה הנוכחית) כדי ליצור את האפליקציה במכשיר בדיקה או בסימולטור.

    2. מחכים עד שהאפליקציה פועלת, ואז לוחצים על הפסקת ההרצה של הסכימה או הפעולה כדי לסגור את המופע הראשוני של האפליקציה. המופע הראשוני הזה כלל את מנפה הבאגים שמפריע ל-Crashlytics.

  3. כדי לשלוח את דוח הקריסה הראשון של האפליקציה, צריך לגרום לקריסה בכוח:

    1. פותחים את האפליקציה ממסך הבית של מכשיר הבדיקה או הסימולטור.

    2. באפליקציה, לוחצים על הלחצן Test Crash (בדיקת קריסה) שהוספתם באמצעות הקוד שלמעלה.

    3. אחרי שהאפליקציה קורסת, מריצים אותה שוב מ-Xcode כדי שהיא תוכל לשלוח את דוח הקריסה ל-Firebase.

  4. במסוף Firebase, עוברים אל DevOps & Engagement > Crashlytics dashboard כדי לבדוק אם דוח קריסת הבדיקה מופיע.

    אם רעננתם את המסוף והתרסקות הבדיקה עדיין לא מופיעה אחרי חמש דקות, צריך להפעיל את יומן ניפוי הבאגים כדי לבדוק אם האפליקציה שולחת דוחות על קריסות.


זהו, סיימתם. Crashlytics עכשיו עוקב אחרי האפליקציה שלך כדי לזהות קריסות. כדי לראות את כל הדוחות והנתונים הסטטיסטיים ולבדוק אותם, אפשר להיכנס אל לוח הבקרה של Crashlytics.

השלבים הבאים