Bug fixes
- Fixed build-machine paths being included in the agent binary
- Fixed
.swiftinterfaceto be parseable by Xcode 26 when building with Xcode 27
バグ修正
- ハーベストスレッドでのクラッシュ(
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クラッシュを修正しました。
バグ修正
- メモリ不足の状況下で
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での潜在的なセッション再起動の問題を修正しました。
Fixed in this release
Fixed a bug where calling setUserId with nil always started a new session.
Prevented old session replay frames from uploading with a new session.
Changed reachability to update a callback on change instead of calling it every time.
Fixed hex invalidate crash.
Fixed setUserId vendorId crash.
Fixed atomicity across NRMA Trace collections.
Fixed setUserId to stay synchronous.
Fixed a crash by changing session replay from a Timer to a DispatchSourceTimer.
Fixed a CoreData NRMAMethodProfiler crash.
Fixed a crash by having sessionAttributeJSONString take a snapshot of dicts.
Fixed MSR text by clamping the SwiftUI text width-compensation offset to its content.
Fixed a JSErrorController memory leak.
Fixed MSR text by referring to the precise numeric font weight instead of the binary bold trait.
Updated the dSYM upload tools to add the appVersion param to dsym-upload-tools run-symbol-tool.
Fixed the missing SwiftUI modals in MSR.