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.
새로운 기능
- 문서화된 최소 플랫폼 요구 사항에 맞춰 iOS 15.0 및 tvOS 15.0의 최소 배포 버전을 타겟으로 하도록 XCFramework 빌드 설정을 업데이트했습니다.
버그 수정
수집 설정 읽기 중 발생하는 크래시(
objc_msgSend내의SIGSEGV)를 해결했습니다./connect응답 또는NSUserDefaults딕셔너리에서 자동 해제 풀이 비워진 후assign(으)로 선언된NRMAHarvesterConfiguration의 8개 객체 속성이 댕글링 포인터를 유지했습니다./connect응답에서at_capture속성이 누락된 경우 세션에 대한 모든 활동 트레이스가 삭제되는 문제를 해결했습니다.리액트 네이티브 오류와 함께 보고된
platform값을ReactNative(으)로 보고하도록 수정했습니다.호스트 플랫폼 버전 대신 iOS 에이전트 버전을 정확하게 보고하도록 JavaScript 오류 페이로드의
agentVersion필드를 수정했습니다.커스텀 속성 유효성 검사 업데이트:
NSArray또는NSDictionary객체를 이벤트 속성으로 전달하면 이제 일반적인"value must be an NSString, NSNumber, or BOOL"경고 메시지를 대체하여 지원되지 않는 유형을 식별하는 명시적 오류를 로그에 기록합니다.
이 릴리스에서 수정됨
세션 리플레이 이벤트가 Meta/FullSnapshot보다 먼저 정렬되는 문제를 수정했습니다.
NRMAExceptionMetaDataStore을(를) 다시 작성하여 잠재적인 데이터 누락 문제를 수정했습니다.RN 소스맵 업로드 스크립트를 수정했습니다.
checkAndHandleSessionTimeout에서 잠재적인 세션 재시작 문제를 수정했습니다.
이 릴리스에서 수정됨
nil로 setUserId를 호출할 때 항상 새 세션이 시작되는 버그를 수정했습니다.
이전 세션 리플레이 프레임이 새 세션과 함께 업로드되는 것을 방지했습니다.
도달 가능성이 매번 콜백을 호출하는 대신 변경 시 콜백을 업데이트하도록 변경했습니다.
16진수 무효화 충돌을 수정했습니다.
setUserId vendorId 충돌을 수정했습니다.
NRMA 트레이스 컬렉션 전반의 원자성을 수정했습니다.
setUserId가 동기식으로 유지되도록 수정했습니다.
세션 리플레이를 Timer에서 DispatchSourceTimer로 변경하여 크래시를 수정했습니다.
CoreData NRMAMethodProfiler 충돌을 수정했습니다.
sessionAttributeJSONString이 딕셔너리의 스냅샷을 가져오도록 하여 충돌을 수정했습니다.
SwiftUI 텍스트 너비 보정 오프셋을 콘텐츠에 고정하여 MSR 텍스트를 수정했습니다.
JSErrorController 메모리 누수를 수정했습니다.
이진 굵기 특성 대신 정확한 숫자 글꼴 굵기를 참조하여 MSR 텍스트를 수정했습니다.
dsym-upload-tools run-symbol-tool에 appVersion 매개변수를 추가하도록 dSYM 업로드 도구를 업데이트했습니다.
MSR에서 누락된 SwiftUI 모달을 수정했습니다.
새로운 기능
이제 시뮬레이터 디바이스가 simulator-(deviceType)으로 보고됩니다.
이 릴리스에서 수정됨
- 7.7.3에서 불안정을 유발하던 KMP 감지를 제거했습니다.
- 비동기 웹 requests를 기록할 때 발생할 수 있는 크래시를 수정했습니다.
- 수집 구성 경쟁 조건으로 인해 발생한 크래시를 수정했습니다.