DEV Community

Cover image for Firefox para iOS bloquea anuncios con la Content Blocker API de Apple
lu1tr0n
lu1tr0n

Posted on • Originally published at elsolitario.org

Firefox para iOS bloquea anuncios con la Content Blocker API de Apple

Firefox para iOS no puede bloquear anuncios como lo hace en tu computadora: en el iPhone es Apple quien decide que reglas puede aplicar cualquier navegador contra la publicidad.

La razon es una sola norma de Apple: todo navegador en iOS corre sobre WebKit, asi que ni Firefox ni Chrome traen su propio motor de bloqueo de peticiones. En su lugar dependen de los bloqueadores de contenido (content blockers), extensiones que Apple diseno para Safari y que Firefox adopto desde que llego a la App Store.

TL;DR

  • Apple exige que todo navegador en iOS use WebKit (App Store Review Guideline 2.5.6), lo que impide extensiones tipo webRequest.- Firefox para iOS usa la Content Blocker API de Apple, introducida en iOS 9 (2015), en vez del motor de WebExtensions de escritorio.- Los bloqueadores de contenido se activan desde Ajustes de iOS y luego se seleccionan dentro de Firefox, no al reves.- Apps compatibles conocidas: 1Blocker, AdGuard, Wipr y AdBlock Plus para iOS.- Las reglas de bloqueo son declarativas: un JSON estatico con trigger y action, no codigo que se ejecuta en cada peticion.- Firefox Focus, la app hermana de Mozilla, trae proteccion de rastreo integrada sin necesidad de instalar una extension aparte.- Desde iOS 17.4 (2024), el DMA de la Union Europea obliga a Apple a permitir motores de navegador alternativos, aunque solo en la UE.

Que son los bloqueadores de contenido y por que Firefox depende de ellos

En Windows, macOS o Linux, Firefox usa su propio motor Gecko y un sistema de extensiones que puede leer, modificar o cancelar cada peticion de red en tiempo real. Asi trabaja un bloqueador como uBlock Origin en escritorio: intercepta la peticion antes de que salga, la compara contra listas de filtros, y decide si la deja pasar.

En iOS eso es imposible. Las App Store Review Guidelines obligan a que cualquier app que muestre contenido web use el motor de renderizado del sistema, es decir WebKit, y prohiben que un navegador de terceros traiga su propio motor. Firefox para iOS por lo tanto no corre Gecko: corre WebKit, el mismo motor que Safari.

Como consecuencia, Firefox tampoco puede exponer la API webRequest que usan las extensiones de escritorio. Apple resolvio ese hueco con los bloqueadores de contenido: una categoria especial de extension de sistema que no ejecuta codigo mientras navegas, sino que entrega de antemano una lista de reglas en JSON. WebKit compila esa lista y la aplica el mismo, sin que la extension llegue a ver que paginas visitas. Es un diseno pensado para privacidad: el bloqueador nunca recibe tu historial de navegacion, solo declara reglas y el sistema operativo las ejecuta por su cuenta.
El filtrado ocurre dentro de WebKit, no dentro de la app de Firefox.

Contexto e historia

Apple introdujo el bloqueo de contenido en 2015 junto con iOS 9, primero exclusivo para Safari. Ese mismo ano aparecieron en la App Store las primeras apps de esta categoria, entre ellas 1Blocker y Crystal, aprovechando una API que hasta entonces no existia para terceros.

Firefox llego a iOS ese mismo noviembre de 2015, ya obligado a construirse sobre WebKit desde el primer dia: Mozilla no tenia alternativa, dado que Apple nunca permitio que Gecko corriera en el sistema. Con el tiempo, Mozilla sumo soporte para que los mismos bloqueadores de contenido pensados originalmente para Safari tambien pudieran activarse dentro de Firefox, algo que el usuario debe habilitar de forma manual porque no viene activado por defecto.

El escenario cambio parcialmente con el Digital Markets Act de la Union Europea: desde iOS 17.4, publicado en 2024, Apple permite que navegadores de terceros usen su propio motor de renderizado, pero unicamente para usuarios dentro de la UE y bajo un proceso de cumplimiento que ha hecho que la mayoria de navegadores, Firefox incluido, todavia no hayan migrado por completo. Fuera de la Union Europea, la obligacion de usar WebKit sigue intacta.

Detalles tecnicos: como funciona una regla de bloqueo

Un bloqueador de contenido no es un script que corre por cada peticion, es un archivo JSON con una lista de objetos trigger/action. El trigger describe que trafico debe coincidir (por dominio, por tipo de recurso, por expresion regular en la URL) y el action describe que hacer si coincide: bloquear la peticion completa, ocultar un elemento con CSS, o bloquear cookies.

El ejemplo minimo posible es una regla que bloquea absolutamente todo, util solo para probar que el mecanismo esta activo:

[
  {
    "trigger": { "url-filter": ".*" },
    "action": { "type": "block" }
  }
]
Enter fullscreen mode Exit fullscreen mode

Ese bloque bloquea cualquier recurso que cargue la pagina, asi que en la practica solo sirve para verificar que un bloqueador de contenido esta corriendo. Una regla real es mas selectiva, apunta a dominios de publicidad conocidos y complementa el bloqueo con ocultamiento de elementos residuales:

[
  {
    "trigger": {
      "url-filter": "^https?://(www\\.)?googlesyndication\\.com",
      "resource-type": ["script", "image"]
    },
    "action": { "type": "block" }
  },
  {
    "trigger": {
      "url-filter": ".*",
      "if-domain": ["ejemplo-noticias.com"]
    },
    "action": {
      "type": "css-display-none",
      "selector": ".banner-publicidad, .anuncio-lateral"
    }
  }
]
Enter fullscreen mode Exit fullscreen mode

La primera regla bloquea scripts e imagenes que vengan del dominio de anuncios de Google; la segunda no bloquea la peticion sino que oculta con CSS el contenedor del banner en un sitio especifico, util cuando el anuncio ya cargo pero dejo un hueco visual vacio.

📌 Nota: como las reglas se compilan antes de navegar, WebKit las aplica sin ejecutar JavaScript adicional por cada peticion. Eso evita el costo de tener un interprete corriendo en cada carga de pagina, pero tambien significa que el bloqueador no puede tomar decisiones dinamicas: no puede consultar una lista remota en vivo ni contar cuantas veces coincidio una regla mas alla de lo que la propia app muestre en su pantalla de estadisticas.

Como probarlo hoy

Activar bloqueadores de contenido en Firefox para iOS no requiere instalar nada por linea de comandos, es una app de iPhone o iPad. Los pasos:

  • Instala una app de bloqueador de contenido desde el App Store: 1Blocker, AdGuard o Wipr son las mas usadas.- Abre Ajustes del sistema iOS, no Firefox, y activa la extension dentro de la seccion de esa app (cada app de bloqueador trae su propio toggle en Ajustes).- Abre Firefox, entra a su menu de Ajustes y busca la opcion de bloqueo de contenido para seleccionar cual de los bloqueadores instalados usar.- Verifica abriendo un sitio con mucha publicidad y comparando contra el mismo sitio con el bloqueador desactivado; la mayoria de estas apps ademas muestran, en su propia pantalla, un contador de peticiones bloqueadas que confirma que la extension esta activa.

Los bloqueadores de contenido tambien se pueden combinar: activar mas de uno a la vez es posible en iOS, aunque algunas apps advierten que reglas superpuestas pueden romper el diseno de ciertos sitios si dos bloqueadores ocultan el mismo contenedor de formas distintas.
La activacion ocurre en Ajustes de iOS, no dentro de la app de Firefox.

Impacto y analisis

La limitacion de WebKit no es exclusiva de Firefox: afecta por igual a Chrome, Edge o cualquier otro navegador de terceros en iOS, porque todos comparten el mismo motor obligatorio. Lo que cambia entre apps es la interfaz para elegir el bloqueador, no el mecanismo subyacente.
OpcionCuando usarlaVentajaLimitacionBloqueador de contenido (1Blocker, AdGuard, Wipr)Navegacion dentro de Safari o Firefox en iOSReglas especificas por sitio, facil de pausar por dominioNo filtra anuncios dentro de apps nativas, solo trafico del navegadorPerfil DNS o VPN local (AdGuard DNS, NextDNS)Querer bloquear anuncios en todas las apps del telefonoCobertura a nivel de todo el sistema operativoOcupa la unica conexion VPN activa del dispositivo y no puede ocultar elementos CSSFirefox FocusSesiones de navegacion cortas y privadas sin configurar nadaProteccion de rastreo activada por defecto, sin instalar extension aparteNo maneja pestanas multiples, pensado para uso puntual
El trade-off real es que un bloqueador de contenido solo ve trafico que pasa por el motor de navegacion. Un anuncio que se muestra dentro de una app nativa, como el feed de una red social o un juego con un SDK de publicidad integrado, no pasa nunca por WebKit y por lo tanto ningun bloqueador de este tipo puede tocarlo. Ahi es donde entra el bloqueo a nivel de DNS o VPN, que filtra por dominio antes de que la conexion salga del dispositivo, sin importar que app la origino.

Tambien vale aclarar por que uBlock Origin nunca llego a iOS: su arquitectura depende de interceptar peticiones en tiempo real via webRequest, la misma API que Apple no expone a extensiones de terceros. No es una decision de Mozilla ni de la comunidad de uBlock, es una restriccion de plataforma que aplica igual a cualquier proyecto que intente portarlo.

Que sigue

El Digital Markets Act europeo abrio la puerta a que, dentro de la UE, un navegador como Firefox pueda algun dia correr con su propio motor Gecko en iOS y traer de vuelta extensiones tipo webRequest. Eso resolveria de raiz la limitacion descrita en este articulo, al menos para usuarios europeos, pero implica que Mozilla reconstruya y mantenga una version de iOS con un motor distinto al que ya corre en el resto del mundo, un esfuerzo de ingenieria considerable que hasta ahora ningun navegador mayor ha completado. Fuera de la Union Europea no hay ningun cambio regulatorio en curso que modifique el requisito de usar WebKit.

📖 Resumen en Telegram: Ver resumen

Probalo vos: instala 1Blocker o AdGuard desde el App Store, activalo en Ajustes de iOS y despues en Firefox, y abri una pagina con anuncios para ver la diferencia en menos de un minuto.

Preguntas frecuentes

¿Firefox para iOS usa el mismo motor que Firefox de escritorio?

No. En escritorio usa Gecko, el motor propio de Mozilla. En iOS esta obligado a usar WebKit por las reglas de Apple.

¿Necesito una extension especifica de Firefox o sirve cualquier bloqueador de Safari?

Sirve cualquier app de bloqueador de contenido instalada en el sistema. Se activa igual para Safari y para Firefox, cada uno con su propio selector.

¿Los bloqueadores de contenido filtran anuncios dentro de apps como Instagram o un juego?

No. Solo afectan al trafico que pasa por el motor de navegacion WebKit, no al que generan apps nativas con su propio SDK de publicidad.

¿Puedo usar uBlock Origin en Firefox para iOS?

No existe una version de uBlock Origin para iOS porque su funcionamiento depende de la API webRequest, que Apple no expone a extensiones de terceros en esa plataforma.

¿Cambia algo con la normativa europea del DMA?

En la Union Europea, Apple permite motores de navegador alternativos desde iOS 17.4, pero hasta ahora ningun navegador mayor migro por completo a su propio motor en esa region.

¿Como se si mi bloqueador de contenido esta realmente activo?

La mayoria de estas apps muestran un contador propio de peticiones bloqueadas en su pantalla principal; si ese contador sube al navegar, la extension esta funcionando.

Referencias

  • Mozilla Support: guia oficial sobre bloqueo de anuncios en Firefox para iOS.- Apple Developer: App Store Review Guidelines, seccion sobre requisitos de motor de navegacion.- Wikipedia: historia y version del motor de Firefox para iOS.- Wikipedia: Digital Markets Act y su efecto sobre motores de navegador alternativos en la UE.

📱 ¿Te gusta este contenido? Unete a nuestro canal de Telegram @programacion donde publicamos a diario lo mas relevante de tecnologia, IA y desarrollo. Resumenes rapidos, contenido fresco todos los dias.

Top comments (0)