Bird
Raised Fist0
iOS Swiftmobile~20 mins

Analytics and Crashlytics in iOS Swift - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Firebase Analytics and Crashlytics Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ ui_behavior
intermediate
2:00remaining
What happens when you log an event with Firebase Analytics in Swift?
Consider this Swift code snippet that logs a custom event using Firebase Analytics. What is the expected behavior after this code runs?
iOS Swift
import FirebaseAnalytics

Analytics.logEvent("purchase", parameters: ["item_id": "sku123", "price": 9.99])
AThe event "purchase" with parameters is sent to Firebase Analytics and appears in the Firebase console dashboard.
BThe app crashes because the logEvent method requires a completion handler.
CNothing happens because you must call Analytics.start() before logging events.
DThe event is logged locally but never sent to Firebase servers.
Attempts:
2 left
💡 Hint
Think about how Firebase Analytics handles event logging and reporting.
❓ lifecycle
intermediate
2:00remaining
When should you initialize Firebase Crashlytics in an iOS app?
You want to capture crashes in your iOS app using Firebase Crashlytics. At which point in the app lifecycle should you initialize Crashlytics to ensure it captures all crashes?
AAfter the user logs in successfully.
BIn the viewDidLoad() method of the first view controller.
CRight before the app enters the background state.
DIn the AppDelegate's application(_:didFinishLaunchingWithOptions:) method before returning true.
Attempts:
2 left
💡 Hint
Crashlytics needs to be ready as early as possible to catch startup crashes.
🔧 Debug
advanced
2:00remaining
Why does this Crashlytics custom key not appear in the Firebase console?
You added this code to set a custom key in Crashlytics, but the key-value pair does not show up in the Firebase Crashlytics dashboard. What is the most likely reason?
iOS Swift
import FirebaseCrashlytics

Crashlytics.crashlytics().setCustomValue("premium", forKey: "user_type")
AThe method setCustomValue is deprecated and does not work anymore.
BThe app has not crashed after setting the custom key, so Crashlytics has not sent the data yet.
CYou must call Crashlytics.crashlytics().send() manually to upload keys.
DCustom keys only appear if you set them before FirebaseApp.configure() is called.
Attempts:
2 left
💡 Hint
Think about when Crashlytics uploads crash reports and associated data.
🧠 Conceptual
advanced
2:00remaining
How does Firebase Analytics handle user privacy and data collection on iOS?
Which statement correctly describes Firebase Analytics behavior regarding user privacy on iOS devices?
AFirebase Analytics ignores user privacy settings and always collects device identifiers.
BYou must manually disable Firebase Analytics if the user opts out of tracking; it does not handle this automatically.
CFirebase Analytics automatically respects the iOS App Tracking Transparency (ATT) framework and disables IDFA collection if the user denies permission.
DFirebase Analytics only collects data when the app is in the foreground.
Attempts:
2 left
💡 Hint
Consider Apple's privacy rules and how Firebase integrates with them.
❓ navigation
expert
2:00remaining
What is the effect of calling Crashlytics.crashlytics().crash() in your app?
You add the following line in your app code during testing. What happens when this line executes?
iOS Swift
Crashlytics.crashlytics().crash()
AThe app immediately crashes, generating a crash report sent to Firebase Crashlytics on next launch.
BThe app logs a non-fatal error but continues running without interruption.
CThe app throws a runtime exception that can be caught by a try-catch block.
DNothing happens because this method is only a placeholder and does not cause a crash.
Attempts:
2 left
💡 Hint
This method is used to test Crashlytics crash reporting.

Practice

(1/5)
1. What is the main purpose of using Analytics in an iOS app?
easy
A. To track user actions and app usage patterns
B. To report app crashes and errors
C. To improve app performance by optimizing code
D. To manage app permissions and privacy settings

Solution

  1. Step 1: Understand Analytics role

    Analytics collects data about how users interact with the app, like button taps or screen views.
  2. Step 2: Differentiate from Crashlytics

    Crashlytics focuses on crash reports, not user behavior tracking.
  3. Final Answer:

    To track user actions and app usage patterns -> Option A
  4. Quick Check:

    Analytics = user action tracking [OK]
Hint: Analytics tracks usage; Crashlytics tracks crashes [OK]
Common Mistakes:
  • Confusing Analytics with Crashlytics
  • Thinking Analytics fixes crashes
  • Assuming Analytics manages permissions
2. Which Swift code snippet correctly logs a custom event named "purchase_complete" using Firebase Analytics?
easy
A. Analytics.logEvent("purchase_complete", parameters: [:])
B. Analytics.logEvent(purchase_complete, parameters: [:])
C. Analytics.logEvent("purchase_complete", parameters: "nil")
D. Analytics.logEvent('purchase_complete')

Solution

  1. Step 1: Check method signature

    The correct method requires event name as a string and parameters as a dictionary (can be empty).
  2. Step 2: Validate syntax correctness

    Analytics.logEvent("purchase_complete", parameters: [:]) uses a string event name and an empty dictionary, matching the required syntax.
  3. Final Answer:

    Analytics.logEvent("purchase_complete", parameters: [:]) -> Option A
  4. Quick Check:

    Correct syntax = Analytics.logEvent("purchase_complete", parameters: [:]) [OK]
Hint: Event name as string, parameters as dictionary [OK]
Common Mistakes:
  • Missing quotes around event name
  • Passing nil instead of dictionary
  • Omitting parameters argument
3. Given the following Swift code snippet using Crashlytics, what will happen when a crash occurs?
Crashlytics.crashlytics().log("User tapped buy button")
fatalError("Simulated crash")
medium
A. The app crashes but the log message is lost
B. The log message causes a runtime error
C. The app does not crash because log prevents it
D. The log message is sent to Crashlytics before the app crashes

Solution

  1. Step 1: Understand Crashlytics log behavior

    Calling log records a message that is sent to Crashlytics on next app launch after a crash.
  2. Step 2: Analyze crash trigger

    fatalError causes an immediate crash, but the log message is preserved for reporting.
  3. Final Answer:

    The log message is sent to Crashlytics before the app crashes -> Option D
  4. Quick Check:

    Crashlytics logs persist through crash [OK]
Hint: Crashlytics logs survive crashes for later reporting [OK]
Common Mistakes:
  • Assuming logs are lost on crash
  • Thinking log prevents crash
  • Confusing log with error throwing
4. You added Crashlytics to your app but crash reports are not showing up in the Firebase console. Which of these is the most likely cause?
medium
A. You used fatalError instead of assert
B. You forgot to call Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true)
C. You did not import UIKit in your Swift file
D. You called Analytics.logEvent instead of Crashlytics methods

Solution

  1. Step 1: Check Crashlytics setup requirements

    Crashlytics requires enabling data collection explicitly or via Info.plist to send crash reports.
  2. Step 2: Identify missing configuration

    Not calling setCrashlyticsCollectionEnabled(true) disables crash report sending.
  3. Final Answer:

    You forgot to call Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true) -> Option B
  4. Quick Check:

    Enable collection to send crash reports [OK]
Hint: Enable Crashlytics collection to receive reports [OK]
Common Mistakes:
  • Confusing Analytics logging with Crashlytics setup
  • Missing import statements
  • Thinking crash method choice affects reporting
5. You want to log a user property "user_level" with value "gold" in Firebase Analytics and also log a non-fatal error in Crashlytics when a payment fails. Which Swift code snippet correctly does both?
hard
A. Analytics.setUserProperty("user_level", forName: "gold") Crashlytics.crashlytics().record(error: Error("Payment failed"))
B. Analytics.logEvent("user_level", parameters: ["gold"]) Crashlytics.crashlytics().log("Payment failed")
C. Analytics.setUserProperty("gold", forName: "user_level") Crashlytics.crashlytics().record(error: NSError(domain: "Payment", code: 1, userInfo: nil))
D. Analytics.setUserProperty("gold", forName: "user_level") Crashlytics.crashlytics().log("Payment failed")

Solution

  1. Step 1: Set user property correctly

    Use setUserProperty(_:forName:) with value first, then property name.
  2. Step 2: Log non-fatal error properly

    Use record(error:) with an NSError instance to report non-fatal errors.
  3. Final Answer:

    Analytics.setUserProperty("gold", forName: "user_level") Crashlytics.crashlytics().record(error: NSError(domain: "Payment", code: 1, userInfo: nil)) -> Option C
  4. Quick Check:

    User property + non-fatal error = Analytics.setUserProperty("gold", forName: "user_level") Crashlytics.crashlytics().record(error: NSError(domain: "Payment", code: 1, userInfo: nil)) [OK]
Hint: User property value first, use record(error:) for non-fatal errors [OK]
Common Mistakes:
  • Swapping user property name and value
  • Using log() instead of record(error:) for errors
  • Passing wrong types to methods
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard