バグ修正
- ハーベストスレッドでのクラッシュ(
SessionAttributeManager::generateJSONObjectのSIGSEGVまたはSIGBUS)を修正しました。このクラッシュはヒープを破損し、他の場所でもクラッシュを引き起こす可能性がありました。エージェントは、それらを保護するロックを保持せずに、ハーベスト中にmemUsageMbやlastInteractionなどの内部セッション属性をコピーしていたため、別のスレッドがそれらを更新している間に読み取る可能性がありました。この問題は7.7.8以前のバージョンに存在していました。 - イベントバッファがいっぱいになり、アプリがネットワークrequestsを継続して行った場合に、メインスレッドがブロックされ、iOSウォッチドッグ(
0x8BADF00D)によってアプリが終了させられる問題を修正しました。エージェントは、バッファリングされたイベントのディスク上のコピーを書き換える間ロックを保持しており、メインスレッドを含むイベントを記録するスレッドは、そのロックを待機していました。いっぱいになったバッファからドロップされたイベントもそのコピーから削除されることはなかったため、コピーは肥大化し、新しいイベントごとに完全に書き換えられていました。書き込みはロックを保持せずに行われるようになり、バッチ処理され、ドロップされたイベントは削除されます。この問題は7.7.8以前のバージョンに存在していました。 - ネットワークリクエストの完了などによってイベントが記録されたのと同時に、エージェントがハーベストのためにバッファリングされたイベントを収集した場合に、イベントが報告されないことがある問題を修正しました。エージェントはロックを解放した後にバッファを再度クリアしていたため、その間に追加されたイベントは送信される前に破棄されていました。この問題は7.7.8以前のバージョンに存在していました。
- エージェント自身のJSON処理がアプリのアクティビティとして記録される問題を修正しました。
NSJSONSerializationはインタラクショントレース用にインストゥルメントされており、エージェントはすべてのログメッセージ、セッション属性、および処理された例外に対してそれを直接呼び出していました。これにより、エージェントの内部処理がインタラクショントレースに追加され、アプリが大量にログを出力した場合、トレースが過負荷になる可能性がありました。エージェントは、インストゥルメントされていない元の実装を呼び出すようになりました。この問題は7.7.8以前のバージョンに存在していました。 - アプリケーション設定で設定されたセッションリプレイのアクセシビリティ識別子マスキングルールがiOSで無視される問題を修正しました。New Relicは識別子
accessibilityIdentifierを使用してこれらのルールをiOSアプリに送信しますが、エージェントはtagのみを認識していたため、そのようなルールはすべてドロップされていました。両方の値が受け入れられるようになりました。不正な形式のルールは、すべてのルールを破棄したりエージェントをクラッシュさせたりするのではなく、警告を出してスキップされるようになりました。 - セッションリプレイのマスキングでクラッシュする可能性がある問題を修正しました。フレームのキャプチャ中に、キャプチャで使用されるロックを保持せずに、再接続、または
addSessionReplayMaskedAccessibilityIdentifier:および関連するAPIによってマスキングリストが更新される可能性がありました。エージェントが設定を保存する際に、nullなど、NSUserDefaultsに保存できない値を含むカスタムマスキングルールによってアプリが停止する可能性もありました。ルールは保存される前にクリーンアップされるようになり、マスキングリストへのすべての更新がロックされるようになりました。 - iOS 27 SDKでビルドされたアプリで、
WKWebViewのナビゲーションがURLなしで報告される問題を修正しました。そのSDKでは、ナビゲーションの開始時にWKWebView.URLがまだnilである可能性があります。エージェントは、decidePolicyForNavigationActionからのメインフレームリクエストURLにフォールバックするようになりました。 addHTTPHeaderTrackingForを使用する際に発生する可能性のあるEXC_BAD_ACCESSクラッシュを修正しました。