AdGuard v4.5.1 para iOS: abordando el límite de reglas en iOS 17
Esta actualización tiene su historia, ya que encontramos un error inesperado en iOS 17 que limita significativamente el número de reglas de bloqueo de contenido. Te contaremos todo sobre esta situación. Además de la solución para el error, esta versión también contiene algunas mejoras y correcciones beneficiosas para el rendimiento y la estabilidad de la aplicación.
Apple, ¿dijiste que podríamos usar hasta 150 mil reglas de bloqueo de contenido en Safari, qué pasó?
El problema
Todo comenzó cuando estábamos tratando de encontrar una solución para un problema en iOS 17 en el que los filtros parecían actualizarse infinitamente sin que realmente se actualizaran. Sí, lo oíste bien: tocar el ícono 🔄 en la esquina superior derecha de la pantalla principal de AdGuard activaba una animación giratoria infinita, pero no ocurría nada. En algunos casos, sin embargo, este problema resultaba en errores de actualización de filtros.
La causa
Inicialmente, estábamos tratando de encontrar problemas en el código de nuestra propia aplicación (como cualquier desarrollador responsable haría). Pero cuanto más intentábamos, más nos dimos cuenta de que el problema solo ocurría en iOS más reciente, que debería ser el más pulido y optimizado. Este detalle y el aumento del feedback de los usuarios nos llevaron a darnos cuenta de que la raíz del problema estaba en la actualización de iOS.
Luego, nos dimos cuenta de que los filtros aún se actualizaban con éxito dependiendo de las reglas habilitadas (o más bien, no habilitadas) por el usuario, lo que, a su vez, nos ayudó a descubrir que la carga de reglas en Safari a veces alcanzaba un límite de memoria, algo que nunca nos había causado problemas antes.
Apple proporciona a los desarrolladores la capacidad de implementar la funcionalidad de Bloqueo de Contenido de Safari en sus aplicaciones, lo que les permite ofrecer funciones de bloqueo de contenido a los usuarios. Como probablemente puedas imaginar, esta es una herramienta indispensable para las aplicaciones de bloqueo de anuncios en iOS, ya que ofrece una manera de aplicar reglas de filtrado a las páginas visitadas en Safari. Actualmente, según la documentación de la API de Bloqueo de Contenido de Safari, permite hasta 150 mil reglas en un bloqueador de contenido (y una aplicación puede tener varios bloqueadores de contenido).
La contradicción
En resumen, nos encontramos con una nueva realidad sorprendente en la que el uso de nuestros bloqueadores de contenido estándar en Safari con 150 mil reglas de filtrado estaba causando un fallo en iOS 17. Resultó que Safari ya no aceptaba archivos por encima de un cierto tamaño, e incluso los bloqueadores de contenido con 40-60 mil reglas (lo que está 3 veces por debajo del límite de 150 mil) a veces fallaban, según las reglas que contenían.
Esto plantea una pregunta sencilla a Apple: ¿cómo es que un bloqueador de contenido con 40 mil reglas falla cuando Safari permite oficialmente 150 mil reglas?
Dado que es un error evidente en iOS 17, ya lo reportamos en el foro de Apple. Agradeceríamos si pudieras dar un upvote en los comentarios haciendo clic en "Me too". Aquí está el ID del ticket en el Asistente de Comentarios de Apple: FB13282146.
La solución temporal
Nos tomó más de una semana descubrir una medida temporal: restringimos el tamaño de nuestros archivos JSON y optimizamos los filtros principales para que se adapten a este nuevo "requisito de tamaño". Si un bloqueador de contenido todavía es demasiado grande para el gusto de iOS (el tamaño final depende de cuántos y qué filtros están habilitados por el usuario), automáticamente reducimos su tamaño, de manera que al menos parte de las reglas que cumplen con el requisito de tamaño se apliquen en Safari.
Por lo tanto, aunque todo debería funcionar bien para la mayoría de los usuarios en este momento, estamos ansiosos por que Apple resuelva este error lo más rápido posible.
Actualizaciones en SafariConverterLib, Scriptlets y TSUrlFilter
Gracias por permitirnos desahogarnos un poco antes, ahora podemos hablar de cosas más agradables en la versión 4.5.1. Por ejemplo, hemos actualizado las dependencias de SafariConverterLib, Scriptlets y TSUrlFilter. La actualización de estos tres componentes y su interconexión ayuda a mantener una alta calidad en la filtración, es decir, un rendimiento eficiente y actualizado de las reglas de bloqueo.
SafariConverterLib convierte las reglas de filtrado de AdGuard en reglas de bloqueo de contenido de Safari, lo que básicamente permite utilizar todo el poder de nuestros filtros en AdGuard para iOS. Los Scriptlets y TSUrlFilter también son igualmente importantes, ya que ayudan a implementar la función de Bloqueo Avanzado en AdGuard para iOS.
Reformulación de DnsLibs
En la actualización v2.3 de DnsLibs (nuestro motor de filtrado de DNS), realizamos una importante reformulación y ajustes que mejoraron significativamente el rendimiento y la estabilidad de DNS-over-HTTP/3 de AdGuard.
Además, se corrigieron algunas otras cuestiones, incluyendo el problema en el que AdGuard no se abría en iOS 13.x.
Esperamos que disfrutes de la versión mejorada de AdGuard para iOS, y si tienes algún comentario sobre esta actualización, por favor no dudes en dejar un comentario a continuación o ponerte en contacto con nosotros en las redes sociales. El changelog completo de la versión 4.5.1 se puede encontrar en Github. Cualquier comentario también es muy bienvenido en las cuestiones de Github.