Problème
L'inclusion de l'agent iOS New Relic et de certains SDK Firebase dans la même application peut provoquer des conflits en raison du chevauchement de l'instrumentation. Les SDK Firebase concernés sont :
- FirebasePerformance — swizzle
NSURLSessionpour le monitoring réseau et les méthodes de cycle de vie deUIViewControllerpour les traces d'écran, chevauchant directement l'instrumentation automatique de New Relic. - FirebaseCrashlytics — installe son propre gestionnaire d'exceptions non interceptées et ses gestionnaires de signaux (SIGABRT, SIGSEGV, etc.), qui peuvent écraser ou être écrasés par le rapporteur de plantage de New Relic selon l'ordre d'initialisation.
Les symptômes connus incluent :
- Plantages dans les fonctions auto-instrumentées causés par un swizzling de méthode
NSURLSessionouUIViewControllerconflictuel. - Rapports de plantage manquants ou incomplets dans l'un ou les deux outils car un seul gestionnaire d'exceptions peut être actif à la fois.
- Événements réseau en double apparaissant dans les consoles New Relic ou Firebase.
Solution
Recommandé : Supprimer les composants Firebase en conflit
Si vous n'avez besoin que des rapports de plantage et de le monitoring réseau provenant d'une seule source, la solution la plus propre consiste à supprimer les pods Firebase en conflit :
- Supprimez
FirebasePerformancepour éliminer les conflits de swizzlingNSURLSessionetUIViewController. - Supprimer
FirebaseCrashlyticspour éliminer les conflits de gestionnaires d'exceptions et de signaux.
Si vous utilisez Firebase pour l'analyse ou d'autres fonctionnalités (par ex. FirebaseAnalytics, FirebaseAuth, FirebaseFirestore), ces pods n'entrent pas en conflit avec l'agent New Relic et peuvent être conservés.
Alternative : Désactiver les fonctionnalités qui se chevauchent
Si la suppression des composants Firebase n'est pas envisageable, désactivez explicitement l'instrumentation qui se chevauche :
Désactiver l'instrumentation automatique de Firebase Performance :
// In your AppDelegate, before FirebaseApp.configure()Performance.sharedInstance().isInstrumentationEnabled = falseCrashlytics.crashlytics().setCrashlyticsCollectionEnabled(false)Désactivez les fonctionnalités New Relic qui font double emploi avec Crashlytics :
Consultez le guide de configuration du SDK iOS New Relic pour des indicateurs tels que NRFeatureFlag_CrashReporting et NRFeatureFlag_NSURLSessionInstrumentation.
Ordre d'initialisation
Si les deux SDK restent actifs, initialisez l'agent New Relic le plus tôt possible — comme premier appel dans application(_:didFinishLaunchingWithOptions:) — avant FirebaseApp.configure(). Cela garantit que les gestionnaires d'exceptions et de signaux de New Relic sont enregistrés en premier, bien que Crashlytics puisse toujours les écraser via les méthodes +load qui s'exécutent avant le code de votre application.
Si vous avez besoin d'aide supplémentaire, obtenez de l'aide sur support.newrelic.com.