Problema
Incluir tanto el agente de iOS de New Relic como ciertos SDK de Firebase en la misma aplicación puede causar conflictos debido a la superposición de la instrumentación. Los SDK de Firebase afectados son:
- FirebasePerformance — intercambia
NSURLSessionpara el monitoreo de red yUIViewControllermétodos de ciclo de vida para trazas de pantalla, superponiéndose directamente con la instrumentación automática de New Relic. - FirebaseCrashlytics — instala su propio manejador de excepciones no capturadas y manejadores de señales (SIGABRT, SIGSEGV, etc.), que pueden sobrescribir o ser sobrescritos por el notificador de fallos de New Relic dependiendo del orden de inicialización.
Los síntomas conocidos incluyen:
- Fallos en funciones autoinstrumentadas causados por method swizzling conflictivo de
NSURLSessionoUIViewController. - Informes de fallos faltantes o incompletos en una o ambas herramientas porque solo un manejador de excepciones puede estar activo a la vez.
- Eventos de red duplicados que aparecen en las consolas de New Relic o Firebase.
Solución
Preferido: Eliminar componentes de Firebase en conflicto
Si solo necesita reporte de fallos y monitoreo de red de una sola fuente, la solución más limpia es eliminar los pods de Firebase en conflicto:
- Elimine
FirebasePerformancepara eliminar los conflictos de swizzling deNSURLSessionyUIViewController. - Elimine
FirebaseCrashlyticspara eliminar los conflictos de los manejadores de excepciones y señales.
Si utiliza Firebase para análisis u otras funciones (p. ej., FirebaseAnalytics, FirebaseAuth, FirebaseFirestore), esos pods no entran en conflicto con el agente de New Relic y pueden permanecer.
Alternativa: Desactivar funcionalidades superpuestas
Si eliminar los componentes de Firebase no es una opción, deshabilita la instrumentación superpuesta explícitamente:
Deshabilitar la instrumentación automática de rendimiento de Firebase:
// In your AppDelegate, before FirebaseApp.configure()Performance.sharedInstance().isInstrumentationEnabled = falseCrashlytics.crashlytics().setCrashlyticsCollectionEnabled(false)Desactive las funciones de New Relic que se superponen con Crashlytics:
Consulte la guía de configuración del SDK de New Relic para iOS para ver flags como NRFeatureFlag_CrashReporting y NRFeatureFlag_NSURLSessionInstrumentation.
Orden de inicialización
Si ambos SDKs permanecen activos, inicialice el agente de New Relic lo antes posible — como la primera llamada en application(_:didFinishLaunchingWithOptions:) — antes de FirebaseApp.configure(). Esto asegura que los manejadores de excepciones y señales de New Relic se registren primero, aunque Crashlytics aún podría sobrescribirlos mediante métodos +load que se ejecutan antes de que se ejecute el código de tu aplicación.
Si necesita ayuda adicional, obtenga soporte en support.newrelic.com.