Bug fixes
- Fixed a crash (
SIGSEGVorSIGBUSinSessionAttributeManager::generateJSONObject) on the harvest thread, which could also corrupt the heap and cause crashes elsewhere. The agent copied its internal session attributes, such asmemUsageMbandlastInteraction, during a harvest without holding the lock that guards them, so it could read them while another thread was updating them. This issue was present in 7.7.8 and earlier. - Fixed the main thread blocking, and apps being terminated by the iOS watchdog (
0x8BADF00D), once the event buffer was full and the app kept making network requests. The agent held a lock while it rewrote its on-disk copy of buffered events, and threads recording events, including the main thread, waited on that lock. Events dropped from a full buffer were also never removed from that copy, so it grew and was rewritten in full for every new event. Writes now happen without holding the lock, are batched, and dropped events are removed. This issue was present in 7.7.8 and earlier. - Fixed events occasionally going unreported when they were recorded, for example by a network request finishing, at the same moment the agent collected buffered events for a harvest. The agent cleared the buffer a second time after releasing its lock, which discarded any event added in between before it was sent. This issue was present in 7.7.8 and earlier.
- Fixed the agent's own JSON work being recorded as app activity.
NSJSONSerializationis instrumented for interaction traces, and the agent called it directly for every log message as well as for session attributes and handled exceptions. That added the agent's internal work to interaction traces and, when the app logged heavily, could overwhelm tracing. The agent now calls the original, uninstrumented implementation. This issue was present in 7.7.8 and earlier. - Fixed Session Replay accessibility identifier masking rules set in Application Settings being ignored on iOS. New Relic sends these rules to iOS apps with the identifier
accessibilityIdentifier, but the agent only recognizedtag, so every such rule was dropped. Both values are now accepted. A malformed rule is now skipped with a warning instead of discarding every rule or crashing the agent. - Fixed possible crashes in Session Replay masking. Masking lists could be updated by a reconnect, or by
addSessionReplayMaskedAccessibilityIdentifier:and related APIs, while a frame was being captured, without holding the lock that capture uses. Custom masking rules containing values that can't be saved toNSUserDefaults, such asnull, could also stop the app when the agent saved its configuration. Rules are now cleaned before they are stored, and every update to the masking lists is locked. - Fixed
WKWebViewnavigations being reported without a URL in apps built with the iOS 27 SDK. With that SDK,WKWebView.URLcan still benilwhen a navigation starts. The agent now falls back to the main-frame request URL fromdecidePolicyForNavigationAction. - Fixed possible EXC_BAD_ACCESS crash when using
addHTTPHeaderTrackingFor.
バグ修正
- メモリ不足の状況下で
recordErrorを呼び出すと、ホストアプリケーションが終了する可能性がある問題を修正しました。エラーレポートは破棄されてログに記録されるようになり、記録されたスタックの先頭からNew Relicエージェントのフレームがトリミングされるようになりました。 - セッション属性を削除する際に、ログのフォーマット文字列で引数が欠落していたことが原因で発生した
NRMALoggerBridge::logのクラッシュを修正しました。同じコンポーネント内のさらに2つの無効なフォーマット文字列を修正しました。 - 新しいイベントシステムを使用する際に、ディストリビューティッド(分散)トレーシングのタイムスタンプ(
tracestateおよびペイロードti)がミリ秒ではなく秒単位で送信される問題を修正しました。 - クロスプラットフォームSDKが
traceHeadersを渡したときに、成功したMobileRequestイベントがすべてのディストリビューティッド(分散)トレーシング属性を失う問題を修正しました。 - Flutter、React Native、またはその他のハイブリッドエージェントによって
traceHeadersで報告されたrequestsに重複するディストリビューティッド(分散)トレーシングが追加されるのを防ぐため、ネイティブエージェントを更新しました。これは、両方のイベントシステムにおけるMobileRequestとMobileRequestErrorの両方に適用されます。 MaxEventPoolSizeおよびMaxEventBufferTimeの設定に対する最小および最大の境界制限を適用しました(最大バッファ時間は600秒に制限されます)。- 新しいイベントシステムを使用する場合に、常に
YESを返すのではなく、イベントが正常に追加されたかどうかを示すブール値を返すようにrecordCustomEventを更新しました。 - Androidエージェントの動作に合わせて、正しい大文字・小文字の
ReactNativeプラットフォーム値を渡すように、React Native JavaScriptエラーのアップロードを更新しました。
新機能
- 文書化された最小プラットフォーム要件に合わせて、iOS 15.0およびtvOS 15.0の最小デプロイメントバージョンをターゲットにするようにXCFrameworkのビルド設定を更新しました。
バグ修正
harvest設定の読み取り中に発生したクラッシュ(
objc_msgSend内のSIGSEGV)を解決しました。/connectレスポンスまたはNSUserDefaultsディクショナリからのautorelease poolのドレイン後、assignとして宣言されたNRMAHarvesterConfigurationの8つのオブジェクトプロパティがダングリングポインタを保持していました。/connect応答でat_capture属性が省略された場合に、セッションのすべてのアクティビティトレースが破棄される問題を解決しました。React Nativeのエラーとともに報告される
platformの値を、ReactNativeとして報告するように修正しました。ホストプラットフォームのバージョンではなく、iOSエージェントのバージョンを正確に報告するように、JavaScriptエラーペイロードの
agentVersionフィールドを修正しました。カスタムアトリビュートの検証を更新しました:イベント属性として
NSArrayまたはNSDictionaryオブジェクトを渡すと、一般的な"value must be an NSString, NSNumber, or BOOL"の警告メッセージの代わりに、サポートされていないタイプを特定する明示的なエラーがログに記録されるようになりました。
このリリースで修正された点
Meta/FullSnapshotより前のセッションリプレイイベントの並べ替えを修正しました。
NRMAExceptionMetaDataStoreを書き換えることで、潜在的なデータの欠落を修正しました。RNソースマップアップロードスクリプトを修正しました。
checkAndHandleSessionTimeoutでの潜在的なセッション再起動の問題を修正しました。
このリリースで修正された点
setUserIdをnilで呼び出すと常に新しいセッションが開始されるバグを修正しました。
古いセッションリプレイのフレームが新しいセッションと一緒にアップロードされるのを防ぎました。
毎回呼び出すのではなく、変更時にコールバックを更新するようにreachabilityを変更しました。
hex invalidateのクラッシュを修正しました。
setUserIdのvendorIdに関するクラッシュを修正しました。
NRMAトレースのコレクション全体における原子性を修正しました。
setUserIdが同期を維持するように修正しました。
セッションリプレイをTimerからDispatchSourceTimerに変更することで、クラッシュを修正しました。
CoreData NRMAMethodProfilerのクラッシュを修正しました。
sessionAttributeJSONStringが辞書のスナップショットを取得するようにして、クラッシュを修正しました。
SwiftUIのテキスト幅補正オフセットをコンテンツにクランプすることで、MSRテキストを修正しました。
JSErrorControllerのメモリリークを修正しました。
バイナリのボールド特性の代わりに正確な数値のフォントウェイトを参照することで、MSRテキストを修正しました。
dSYMアップロードツールを更新し、dsym-upload-tools run-symbol-toolにappVersionパラメーターを追加しました。
MSRでSwiftUIのモーダルが表示されない問題を修正しました。
New features
Simulator devices now report as simulator-(deviceType).
Fixed in this release
- Removed the KMP detection that was causing instability in 7.7.3.
- Fixed a crash that could occur when recording async web requests.
- Fixed a crash caused by a harvest config race condition.