AdGuard v4.5.1 para iOS: lidando com o limite de regras no iOS 17
Esta atualização tem sua história, já que encontramos um bug inesperado no iOS 17 que limita significativamente o número de regras de bloqueio de conteúdo. Vamos te contar tudinho sobre essa situação. Além da solução para o bug, esta versão também contém algumas melhorias e correções benéficas para o desempenho e estabilidade do aplicativo.
Apple, você disse que poderíamos usar até 150 mil regras de bloqueio de conteúdo no Safari, o que aconteceu?
O problema
Tudo começou quando estávamos tentando encontrar uma solução para um problema no iOS 17 em que os filtros pareciam se atualizar infinitamente, sem que houvesse a atualização de fato. Sim, é isso mesmo: tocar no ícone 🔄 no canto superior direito da tela principal do AdGuard estava acionando uma animação de giro infinita, mas nada acontecia. Em alguns casos, no entanto, esse problema resultava em erros de atualização de filtros.
A causa
Inicialmente, estávamos tentando encontrar problemas no código de nosso próprio aplicativo (como qualquer desenvolvedor responsável faria). Mas quanto mais tentávamos, mais começamos a prestar atenção ao fato de que o problema ocorria apenas no iOS mais recente, que deveria ser o mais polido e otimizado. Esse detalhe e o aumento do feedback dos usuários nos levaram a perceber que a raiz do problema estava na atualização do iOS.
Depois, percebemos ainda que os filtros ainda se atualizariam com sucesso, dependendo das regras habilitadas (ou melhor, não habilitadas) pelo usuário, o que, por sua vez, nos ajudou a descobrir que o carregamento de regras no Safari às vezes atingia um limite de memória, o que nunca nos causou qualquer problema.
A Apple fornece aos desenvolvedores a capacidade de implementar a funcionalidade de Bloqueador de Conteúdo do Safari em seus aplicativos, o que lhes permite oferecer recursos de bloqueio de conteúdo aos usuários. Como você provavelmente pode imaginar, isso é uma ferramenta indispensável para aplicativos de bloqueio de anúncios no iOS, porque oferece uma maneira de aplicar regras de filtragem às páginas acessadas no Safari. Atualmente, de acordo com a documentação da API de Bloqueio de Conteúdo do Safari, ela permite até 150 mil regras em um bloqueador de conteúdo (e um aplicativo pode ter vários bloqueadores de conteúdo).
A contradição
No geral, nos deparamos com uma nova realidade surpreendente em que o uso de nossos bloqueadores de conteúdo padrão no Safari com 150 mil regras de filtragem estava causando uma falha no iOS 17. Aconteceu que o Safari não aceitava mais arquivos acima de um certo tamanho, e até mesmo bloqueadores de conteúdo com 40-60 mil regras (o que está 3 vezes abaixo do limite de 150 mil) às vezes falhavam, dependendo das regras que continham.
Isso leva a uma pergunta simples para a Apple: como um bloqueador de conteúdo com 40 mil regras falha quando o Safari oficialmente permite 150 mil regras?
Como se trata de um bug óbvio no iOS 17, já o reportamos no fórum da Apple. Se você puder dar um upvote no comentários, ficaremos muito agradecidos. Basta clicar em "Me too". Aqui está o ID do ticket no Assistente de Feedback da Apple: FB13282146.
A solução alternativa
Levou mais de uma semana para descobrirmos uma medida temporária: restringimos o tamanho de nossos arquivos JSON e otimizamos os filtros principais para que eles possam se ajustar a esse novo "requisito de tamanho". Se um bloqueador de conteúdo ainda estiver grande demais para os padrões do iOS (o tamanho final depende de quantos e quais filtros são ativados pelo usuário), cortamos automaticamente o tamanho dele, de modo que pelo menos parte das regras que atendem ao requisito de tamanho seja aplicada no Safari.
Portanto, embora tudo deva funcionar bem para a maioria dos usuários no momento, estamos ansiosos para que a Apple resolva esse bug o mais rápido possível.
Atualizações no SafariConverterLib, Scriptlets e TSUrlFilter
Obrigado por nos permitir desabafar um pouco acima, agora podemos falar sobre coisas mais agradáveis na versão 4.5.1. Por exemplo, atualizamos as dependências do SafariConverterLib, Scriptlets e TSUrlFilter. A atualização desses três componentes e sua interconexão ajuda a manter a alta qualidade da filtragem, ou seja, o desempenho eficiente e atualizado das regras de bloqueio.
SafariConverterLib converte as regras de filtragem do AdGuard em regras de bloqueio de conteúdo do Safari, o que basicamente possibilita o uso de todo o poder de nossos filtros no AdGuard para iOS. Os Scriptlets e TSUrlFilter também são igualmente importantes, uma vez que ajudam a implementar o recurso de Bloqueio Avançado no AdGuard para iOS.
Reformulação do DnsLibs
Na atualização v2.3 do DnsLibs (nosso mecanismo de filtragem de DNS), realizamos uma reformulação e ajustes significativos que melhoraram muito o desempenho e a estabilidade do DNS-over-HTTP/3 do AdGuard.
Além disso, algumas outras coisas foram corrigidas, incluindo o problema em que o AdGuard não abria no iOS 13.x.
Esperamos que você aproveite o AdGuard aprimorado para iOS e, se tiver algum comentário sobre esta atualização, por favor, não hesite em deixar um comentário abaixo ou entrar em contato conosco nas redes sociais. O changelog completo da versão 4.5.1 pode ser encontrado no Github. Qualquer feedback também é muito bem-vindo nas questões do Github.