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.
Nueva característica
- Se actualizó la configuración de compilación de XCFramework para apuntar a una versión de despliegue mínima de iOS 15.0 y tvOS 15.0, en consonancia con los requisitos mínimos de plataforma documentados.
Corrección de errores
Se resolvió un bloqueo (
SIGSEGVdentro deobjc_msgSend) que ocurría durante las lecturas de configuración de harvest. Ocho propiedades de objeto enNRMAHarvesterConfigurationdeclaradas comoassignretenían punteros colgantes después del vaciado del autorelease pool de la respuesta/connecto del diccionarioNSUserDefaults.Se resolvió un problema en el que se descartaban todas las trazas de actividad de una sesión cuando la respuesta
/connectomitía el atributoat_capture.Se corrigió el valor
platformreportado con errores de React Native para que se reporte comoReactNative.Se corrigió el campo
agentVersionen la carga de errores de JavaScript para informar con precisión la versión del agente de iOS en lugar de la versión de la plataforma del host.Se actualizó la validación del atributo personalizado: pasar un objeto
NSArrayoNSDictionarycomo atributo de evento ahora registra un error explícito que identifica el tipo no compatible, reemplazando el mensaje de advertencia genérico"value must be an NSString, NSNumber, or BOOL".
Corregido en esta versión
Se corrigió el orden de los eventos de Session Replay antes de Meta/FullSnapshot.
se corrigió la posible pérdida de datos al reescribir
NRMAExceptionMetaDataStore.Se corrigió el script de carga de sourcemap de RN.
Se corrigió un posible problema de reinicio de sesión en
checkAndHandleSessionTimeout.
Corregido en esta versión
Se corrigió un error en el que llamar a setUserId con nil siempre iniciaba una nueva sesión.
Se evitó que los fotogramas antiguos de Session Replay se cargaran con una nueva sesión.
Se cambió reachability para actualizar una devolución de llamada en caso de cambio en lugar de llamarla cada vez.
Se corrigió un fallo de invalidación hexadecimal.
Se corrigió un fallo de vendorId de setUserId.
Se corrigió la atomicidad en las colecciones de traza de NRMA.
Se corrigió setUserId para que se mantenga sincrónico.
Se corrigió un fallo al cambiar Session Replay de un Timer a un DispatchSourceTimer.
Se corrigió un fallo de NRMAMethodProfiler de CoreData.
Se corrigió un fallo al hacer que sessionAttributeJSONString tome una instantánea de los diccionarios.
Se corrigió el texto de MSR al limitar el desplazamiento de compensación de ancho del texto de SwiftUI a su contenido.
Se corrigió una fuga de memoria de JSErrorController.
Se corrigió el texto de MSR al hacer referencia al peso de fuente numérico preciso en lugar del atributo binario de negrita.
Se actualizaron las herramientas de carga de dSYM para agregar el parámetro appVersion a dsym-upload-tools run-symbol-tool.
Se corrigieron los modales de SwiftUI faltantes en MSR.
Nueva característica
Los dispositivos simuladores ahora se reportan como simulator-(deviceType).
Corregido en esta versión
- Se eliminó la detección de KMP que estaba causando inestabilidad en 7.7.3.
- Se corrigió un bloqueo que podía ocurrir al registrar requests web asíncronas.
- Se corrigió un bloqueo causado por una condición de carrera en la configuración de harvest.