---
title: Third Party Incompatibility (iOS)
source: https://docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-ios/troubleshoot/firebase-incompatibility
---

## Problem

Including both the New Relic iOS agent and certain Firebase SDKs in the same app can cause conflicts due to overlapping instrumentation. The affected Firebase SDKs are:

-   **FirebasePerformance** — swizzles `NSURLSession` for network monitoring and `UIViewController` lifecycle methods for screen traces, directly overlapping with New Relic's automatic instrumentation.
-   **FirebaseCrashlytics** — installs its own uncaught exception handler and signal handlers (SIGABRT, SIGSEGV, etc.), which can overwrite or be overwritten by New Relic's crash reporter depending on initialization order.

Known symptoms include:

-   Crashes in auto-instrumented functions caused by conflicting `NSURLSession` or `UIViewController` method swizzling.
-   Missing or incomplete crash reports in one or both tools because only one exception handler can be active at a time.
-   Duplicate network events appearing in New Relic or Firebase consoles.

## Solution

### Preferred: Remove conflicting Firebase components

If you only need crash reporting and network monitoring from one source, the cleanest solution is to remove the conflicting Firebase pods:

-   Remove `FirebasePerformance` to eliminate `NSURLSession` and `UIViewController` swizzling conflicts.
-   Remove `FirebaseCrashlytics` to eliminate exception and signal handler conflicts.

If you are using Firebase for analytics or other features (e.g., `FirebaseAnalytics`, `FirebaseAuth`, `FirebaseFirestore`), those pods do not conflict with the New Relic agent and can remain.

### Alternative: Disable overlapping features

If removing Firebase components is not an option, disable the overlapping instrumentation explicitly:

**Disable Firebase performance automatic instrumentation:**

```swift
// In your AppDelegate, before FirebaseApp.configure()
Performance.sharedInstance().isInstrumentationEnabled = false
Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(false)
```

**Disable New Relic features that overlap with Crashlytics:**

See the [New Relic iOS SDK configuration guide](https://docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/) for flags such as `NRFeatureFlag_CrashReporting` and `NRFeatureFlag_NSURLSessionInstrumentation`.

### Initialization order

If both SDKs remain active, initialize the New Relic agent as early as possible — as the first call in `application(_:didFinishLaunchingWithOptions:)` — before `FirebaseApp.configure()`. This ensures New Relic's exception and signal handlers are registered first, though Crashlytics may still overwrite them via `+load` methods that run before your app code executes.

If you need additional help, get support at [support.newrelic.com](https://support.newrelic.com).
