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.
Bug fixes
- Fixed an issue where calling
recordErrorunder low-memory conditions could terminate the host application. Error reports are now dropped and logged, and New Relic agent frames are trimmed from the top of the recorded stack. - Fixed a crash in
NRMALoggerBridge::logcaused by a missing argument in a log format string when removing session attributes. Corrected two additional invalid format strings in the same component. - Fixed an issue where distributed tracing timestamps (
tracestateand payloadti) were sent in seconds instead of milliseconds when using the new event system. - Fixed an issue where successful
MobileRequestevents lost all distributed tracing attributes when a cross-platform SDK passedtraceHeaders. - Updated the native agent to prevent adding duplicate distributed traces to requests reported with
traceHeadersby Flutter, React Native, or other hybrid agents. This applies to bothMobileRequestandMobileRequestErrorin both event systems. - Enforced minimum and maximum boundary limits for
MaxEventPoolSizeandMaxEventBufferTimeconfiguration settings (maximum buffer time capped at 600 seconds). - Updated
recordCustomEventto return a boolean indicating whether the event was successfully added when using the new event system, rather than always returningYES. - Updated React Native JavaScript error uploads to pass the correctly cased
ReactNativeplatform value, matching the Android agent behavior.
New feature
- Updated the XCFramework build configuration to target a minimum deployment version of iOS 15.0 and tvOS 15.0, aligning with documented minimum platform requirements.
Bug fixes
Resolved a crash (
SIGSEGVwithinobjc_msgSend) occurring during harvest configuration reads. Eight object properties onNRMAHarvesterConfigurationdeclared asassignretained dangling pointers after autorelease pool drainage from the/connectresponse orNSUserDefaultsdictionary.Resolved an issue where all activity traces were dropped for a session when the
/connectresponse omitted theat_captureattribute.Corrected the
platformvalue reported with React Native errors to report asReactNative.Fixed the
agentVersionfield in the JavaScript error payload to accurately report the iOS agent version rather than the host platform version.Updated custom attribute validation: Passing an
NSArrayorNSDictionaryobject as an event attribute now logs an explicit error identifying the unsupported type, replacing the generic"value must be an NSString, NSNumber, or BOOL"warning message.
Fixed in this release
Fixed session replay events sorting ahead of Meta/FullSnapshot.
fixed potential missing data by rewriting
NRMAExceptionMetaDataStore.Fixed RN sourcemap upload script.
Fixed a potential session restart issue in
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.
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.
New Features
Offline storage functionality for Mobile Session Replay.
Fixed in this release
Replaced timestamp-seeded LCG in IGuidGenerator with arc4random_buf.
Added EU region detection to RN Sourcemap upload.
Blocked recursion for MAUI style default interaction swizzle.
Renamed appVersionId to appVersion in RN source map upload.
Fixed infinite loop in EventDeserializer that froze the agent on launch.
Changed default session replay masking mode to not allow unmasking using programmatic APIs and fixed UIKit override APIs.
Fixed crash that could occur in NRMAWKWebViewNavigationDelegate webViewWebContentProcessDidTerminate.
Ensured session replay data uploads on next launch if it failed to upload when the app closed.
Discarded permanently-rejected (400/403) crash reports.
Added TTL eviction for offline storage (#786).
Fixed NRMAHarvestController initialize crash (#793).
Fixed in this release
fix: NR-563752 fix for hasReplay getting added to errorMode before fullMode (#728) — @mbruin-NR
fix: Adds UIColor safety to MSR to resolve reported crash. (#737) — @cdillard-NewRelic
fix: Added a fix for crash in NRMAHarvester transitionToConnected:] (NRMAHarvester transitionToConnected:] (NRMAHarvester.mm:549) (#742) — @cdillard-NewRelic
fix: NR-567271 crash fix hex library (#743) — @cdillard-NewRelic
NR-566589 Persist session attributes on each stored error. (#736) — @mbruin-NR
fix: NR-568021 - fix crash in NRMAMethodProfiler.m (#744) — @cdillard-NewRelic
fix: Fixed crash that could occur in HexStore.cxx when sending lots of HeX (#745) — @cdillard-NewRelic
NR-567933 - fix RBMovedDisplayListContents (#747) — @cdillard-NewRelic
Fixed in this release
- Mobile Session Replay Enhancements.
- Fix lifetime/threading race in NRMAHarvestController.
New in this release
- Session Replay Blocked Views: Added new blocked views functionality. For UIKit use "nr-block" accessibility id, new UIView
blockView, or in SwiftUINRConditionalMaskViewwithblockView=true to block regions from capture during session replay.
Fixed in this release
- Fixed an overheating issue caused by excessive logging in rare cases.
- Resolved a bug in
NewRelic.setMaxOfflineStorageSize. - During harvest handle status code 0.
- Resolved issues in
getAndClearFramesandflattenTree.