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.
Novo recurso
- Atualizada a configuração de build do XCFramework para definir como destino uma versão mínima de implantação do iOS 15.0 e tvOS 15.0, alinhando-se aos requisitos mínimos de plataforma documentados.
Correções de bugs
Resolvida uma falha (
SIGSEGVemobjc_msgSend) que ocorria durante as leituras de configuração de harvest. Oito propriedades de objeto emNRMAHarvesterConfigurationdeclaradas comoassignretiveram ponteiros pendentes após a drenagem do autorelease pool da resposta/connectou do dicionárioNSUserDefaults.Resolvido um problema em que todos os traces de atividade eram descartados para uma sessão quando a resposta
/connectomitia o atributoat_capture.Corrigido o valor
platformrelatado com erros do React Native para ser relatado comoReactNative.Corrigido o campo
agentVersionna carga de erro do JavaScript para relatar com precisão a versão do agente iOS em vez da versão da plataforma host.Atualizada a validação de atributo personalizado: passar um objeto
NSArrayouNSDictionarycomo um atributo de evento agora registra um erro explícito identificando o tipo não compatível, substituindo a mensagem de aviso genérica"value must be an NSString, NSNumber, or BOOL".
Corrigido nesta versão
Corrigida a ordenação de eventos do Session Replay antes do Meta/FullSnapshot.
corrigida a possível ausência de dados ao reescrever
NRMAExceptionMetaDataStore.Script de upload de sourcemap do RN corrigido.
Corrigido um possível problema de reinício de sessão no
checkAndHandleSessionTimeout.
Corrigido nesta versão
Corrigido um bug em que chamar setUserId com nil sempre iniciava uma nova sessão.
Evitado o upload de quadros antigos do Session Replay com uma nova sessão.
Alterada a acessibilidade para atualizar um retorno de chamada na alteração em vez de chamá-lo todas as vezes.
Corrigida a falha de invalidação de hex.
Corrigida a falha de vendorId do setUserId.
Corrigida a atomicidade nas coleções de trace do NRMA.
Corrigido o setUserId para permanecer síncrono.
Corrigido um travamento ao alterar o Session Replay de um Timer para um DispatchSourceTimer.
Corrigida uma falha no CoreData NRMAMethodProfiler.
Corrigida uma falha fazendo com que sessionAttributeJSONString tire um snapshot de dicts.
Corrigido o texto MSR limitando o deslocamento de compensação de largura de texto do SwiftUI ao seu conteúdo.
Corrigido um vazamento de memória no JSErrorController.
Corrigido o texto MSR referindo-se ao peso numérico preciso da fonte em vez do traço negrito binário.
Atualizadas as ferramentas de upload de dSYM para adicionar o parâmetro appVersion ao dsym-upload-tools run-symbol-tool.
Corrigidos os modais ausentes do SwiftUI no MSR.
Novo recurso
Os dispositivos simuladores agora são reportados como simulator-(deviceType).
Corrigido nesta versão
- Removida a detecção de KMP que estava causando instabilidade na versão 7.7.3.
- Corrigida uma falha que poderia ocorrer ao registrar requests da web assíncronas.
- Corrigida uma falha causada por uma condição de corrida na configuração de harvest.