Correções de bugs
- Corrigida uma falha (
SIGSEGVouSIGBUSemSessionAttributeManager::generateJSONObject) na thread de harvest, que também poderia corromper o heap e causar falhas em outros lugares. O agente copiava seus atributos de sessão internos, comomemUsageMbelastInteraction, durante um harvest sem manter o bloqueio que os protege, de modo que poderia lê-los enquanto outra thread os atualizava. Esse problema estava presente na versão 7.7.8 e anteriores. - Corrigido o bloqueio da thread principal e o encerramento de aplicativos pelo watchdog do iOS (
0x8BADF00D), quando o buffer de eventos estava cheio e o aplicativo continuava fazendo requests de rede. O agente mantinha um bloqueio enquanto reescrevia sua cópia em disco dos eventos em buffer, e as threads que registravam eventos, incluindo a thread principal, aguardavam esse bloqueio. Eventos descartados de um buffer cheio também nunca eram removidos dessa cópia, então ela crescia e era totalmente reescrita para cada novo evento. As gravações agora ocorrem sem manter o bloqueio, são feitas em lote, e os eventos descartados são removidos. Esse problema estava presente na versão 7.7.8 e anteriores. - Corrigidos eventos que ocasionalmente não eram relatados quando eram registrados, por exemplo, pela conclusão de um request de rede, no mesmo momento em que o agente coletava eventos em buffer para um harvest. O agente limpava o buffer uma segunda vez após liberar seu bloqueio, o que descartava qualquer evento adicionado nesse intervalo antes de ser enviado. Esse problema estava presente na versão 7.7.8 e anteriores.
- Corrigido o próprio trabalho JSON do agente sendo registrado como atividade do aplicativo.
NSJSONSerializationé instrumentado para trace da interação, e o agente o chamava diretamente para cada mensagem do log, bem como para atributos de sessão e exceções tratadas. Isso adicionava o trabalho interno do agente aos traces da interação e, quando o aplicativo registrava muitos logs, podia sobrecarregar o tracing. O agente agora chama a implementação original, não instrumentada. Esse problema estava presente na versão 7.7.8 e anteriores. - Corrigidas as regras de mascaramento do identificador de acessibilidade do Session Replay definidas nas configurações do aplicativo sendo ignoradas no iOS. A New Relic envia essas regras para aplicativos iOS com o identificador
accessibilityIdentifier, mas o agente reconhecia apenastag, então todas essas regras eram descartadas. Ambos os valores agora são aceitos. Uma regra malformada agora é ignorada com um aviso em vez de descartar todas as regras ou causar falha no agente. - Corrigidas possíveis falhas no mascaramento do Session Replay. As listas de mascaramento podiam ser atualizadas por uma reconexão, ou por
addSessionReplayMaskedAccessibilityIdentifier:e APIs relacionadas, enquanto um quadro estava sendo capturado, sem manter o bloqueio que a captura usa. Regras de mascaramento personalizadas contendo valores que não podem ser salvos emNSUserDefaults, comonull, também podiam interromper o aplicativo quando o agente salvava sua configuração. As regras agora são limpas antes de serem armazenadas, e todas as atualizações nas listas de mascaramento são bloqueadas. - Corrigidas as navegações
WKWebViewsendo relatadas sem um URL em aplicativos criados com o SDK do iOS 27. Com esse SDK,WKWebView.URLainda pode sernilquando uma navegação é iniciada. O agente agora recorre ao URL do request do main-frame dedecidePolicyForNavigationAction. - Corrigida possível falha EXC_BAD_ACCESS ao usar
addHTTPHeaderTrackingFor.