問題
New Relic iOS エージェントと特定の Firebase SDK の両方を同じアプリに含めると、計装の重複により競合が発生する可能性があります。 影響を受ける Firebase SDK は次のとおりです。
- FirebasePerformance — ネットワーク監視の
NSURLSessionと画面トレースのUIViewControllerライフサイクル メソッドを入れ替え、 New Relicの自動計装と直接重複します。 - FirebaseCrashlytics — 独自のキャッチされていない例外ハンドラーとシグナル ハンドラー (SIGABRT、SIGSEGV など) をインストールします。これらは、初期化順序に応じて、New Relic のクラッシュ レポーターによって上書きされるか、上書きされる可能性があります。
既知の症状は次のとおりです。
- 競合する
NSURLSessionまたはUIViewControllerメソッドのスウィズリングが原因で、自動インストゥルメントされた関数がクラッシュします。 - 一度にアクティブにできる例外ハンドラーは 1 つだけであるため、一方または両方のツールでクラッシュ レポートが欠落しているか不完全です。
- New Relic または Firebase コンソールに重複したネットワーク イベントが表示されます。
解決
推奨: 競合する Firebase コンポーネントを削除する
1 つのソースからのクラッシュ レポートとネットワーク監視のみが必要な場合、最もクリーンな解決策は、競合する Firebase ポッドを削除することです。
NSURLSessionとUIViewControllerスウィズル競合を排除するには、FirebasePerformanceを削除します。- 例外とシグナル ハンドラーの競合を排除するには、
FirebaseCrashlyticsを削除します。
分析やその他の機能に Firebase を使用している場合 (例: FirebaseAnalytics 、 FirebaseAuth 、 FirebaseFirestore)、それらのポッドは New Relic エージェントと競合しないため、そのまま残すことができます。
代替案: 重複する機能を無効にする
Firebase コンポーネントを削除できない場合は、重複するコンポーネントを明示的に無効にします。
Firebase パフォーマンスの自動計装を無効にする:
// In your AppDelegate, before FirebaseApp.configure()Performance.sharedInstance().isInstrumentationEnabled = falseCrashlytics.crashlytics().setCrashlyticsCollectionEnabled(false)Crashlytics と重複する New Relic 機能を無効にします。
NRFeatureFlag_CrashReportingやNRFeatureFlag_NSURLSessionInstrumentationなどのフラグについては、 New Relic iOS SDK 設定ガイドを参照してください。
初期化順序
両方の SDK がアクティブなままの場合は、 FirebaseApp.configure()前に、できるだけ早く( application(_:didFinishLaunchingWithOptions:)の最初の呼び出しとして)New Relic エージェントを初期化します。これにより、New Relic の例外ハンドラーとシグナル ハンドラーが最初に登録されますが、Crashlytics はアプリ コードが実行される前に実行される+loadメソッドを介してそれらを上書きする可能性があります。
さらにサポートが必要な場合は、 support.newrelic.com でサポートを受けてください。