AdGuard v4.5.1 für iOS: Unerwartete Regelbeschränkung unter iOS 17 und clevere Lösung
Dieses Update beinhaltet eine Geschichte, da wir einen unerwarteten Fehler in iOS 17 entdeckt haben, der die Anzahl der Inhaltssperrregeln begrenzt. Sie können also sicher sein, dass wir Ihnen diese Geschichte nicht vorenthalten werden. Zusätzlich zu der Lösung enthält diese Version auch einige schöne Verbesserungen und Fehlerkorrekturen, die sich positiv auf die Leistung und Stabilität der App auswirken werden.
Apple, es war doch die Rede von bis zu 150k Sperrregeln in Safari. Was ist passiert?
Das Problem
Alles begann mit der Suche nach einer Lösung für ein Problem mit iOS 17, bei dem sich die Filter endlos aktualisierten, ohne dass wirklich etwas passierte. Ja, Sie haben es richtig verstanden — das Tippen auf das 🔄-Symbol in der oberen rechten Ecke des AdGuard-Hauptbildschirms löste eine sich endlos drehende Animation aus, aber nichts passierte. In einigen Fällen endete diese Animation jedoch mit einem Filteraktualisierungsfehler.
Die Ursache
Zunächst versuchten wir, die Probleme in unserem eigenen App-Code zu identifizieren (wie es alle verantwortungsbewussten Entwickler:innen tun würden). Doch je mehr wir uns bemühten, desto klarer wurde, dass das Problem nur in der neuesten iOS-Version auftrat, die eigentlich die am besten durchdachte und optimierte sein sollte. Diese Erkenntnis und das zunehmende Feedback von Nutzer:innen führten uns zu dem Schluss, dass die Ursache des Problems im neuen iOS liegt.
Die nächste Entdeckung war, dass die Filter weiterhin erfolgreich aktualisiert wurden, abhängig davon, welche Filter aktiviert waren (oder eher nicht aktiviert). Dadurch wurde uns klar, dass das Laden von Regeln in Safari gelegentlich auf eine Speichergrenze stößt — ein Problem, mit dem wir zuvor nie konfrontiert waren.
Apple ermöglicht es Entwicklern, die Safari Inhaltsblocker-Funktion in ihre Apps zu integrieren, damit Nutzer Inhalte blockieren können. Dies ist ein wichtiges Werkzeug für Werbeblocker-Apps auf iOS, da es die Möglichkeit bietet, Filterregeln auf Seiten anzuwenden, die in Safari geöffnet werden. Laut der Dokumentation der Safari Content Blocking API sind derzeit bis zu 150k Regeln in einem Inhaltsblocker möglich (und eine App kann mehrere Inhaltsblocker haben).
Der Widerspruch
Schließlich wurden wir mit einer überraschenden neuen Realität konfrontiert: Die Verwendung unserer Standard-Safari-Inhaltsblocker mit 150k Filterregeln führte unter iOS 17 plötzlich zu einem Absturz. Es stellte sich heraus, dass Safari Dateien ab einer bestimmten Größe nicht mehr akzeptierte — selbst Inhaltsblocker mit 40-60k Regeln (also dreimal kleiner als die 150k-Grenze) stürzten manchmal ab, je nachdem, welche Regeln sie enthielten.
Das führt zu einer einfachen Frage an Apple: Wie kann es sein, dass ein Inhaltsblocker mit 40k Regeln abstürzt, wenn Safari offiziell 150k Regeln erlaubt?
Da es sich um einen offensichtlichen Fehler in iOS 17 handelt, haben wir ihn bereits im Apple-Forum gemeldet. Wir würden uns über Ihre Unterstützung freuen, wenn Sie den Fehler mit einem Upvote versehen, indem Sie auf Me too klicken. Die Ticket-ID im Feedback-Assistenten von Apple lautet: FB13282146.
Die Abhilfe
Wir haben mehr als eine Woche gebraucht, um eine Übergangslösung zu finden: Wir haben die Größe unserer JSON-Dateien begrenzt und die Hauptfilter so optimiert, dass sie in diese neue „Größenanforderung“ passen. Wenn ein Inhaltsblocker immer noch etwas zu groß für iOS ist (die endgültige Größe hängt davon ab, wie viele und welche Filter aktiviert sind), verkleinern wir ihn automatisch, damit zumindest ein Teil der Regeln, die die Größenanforderung erfüllen, in Safari angewendet werden können.
Im Moment sollte das für die meisten Benutzer:innen funktionieren, aber wir hoffen sehr, dass Apple diesen Fehler so schnell wie möglich behebt.
SafariConverterLib, Scriptlets und TSUrlFilter aktualisiert
Nachdem wir oben etwas Dampf abgelassen haben, können wir nun über die angenehmeren Seiten von v4.5.1 berichten. Zum Beispiel haben wir die Abhängigkeiten von SafariConverterLib, Scriptlets und TSUrlFilter aktualisiert. Die Aktualisierung dieser drei Komponenten und ihrer Verbindungen untereinander trägt dazu bei, eine hohe Filterqualität zu gewährleisten, d.h. eine effiziente und aktuelle Leistung der Sperrregeln.
SafariConverterLib wandelt AdGuard-Filterregeln in Safari-Inhaltsblockierungsregeln um, so dass die volle Leistungsfähigkeit unserer Filter in AdGuard für iOS genutzt werden kann. Scriptlets und TSUrlFilter sind ebenfalls sehr wichtig, da sie bei der Implementierung von Erweiterten Sperren in AdGuard für iOS helfen.
DnsLibs überarbeitet
Das Update v2.3 von DnsLibs (unserer DNS-Filter-Engine) enthält einige grundlegende Überarbeitungen und Änderungen, die die Leistung und Stabilität von AdGuard DNS-over-HTTP/3 deutlich verbessern.
Weitere Fehler wurden behoben, wie z. B. das Problem beim Öffnen von AdGuard unter iOS 13.x.
Wir hoffen, dass Ihnen die verbesserte Version von AdGuard für iOS gefällt. Wenn Sie Anmerkungen zu diesem Update haben, hinterlassen Sie bitte einen Kommentar oder kontaktieren Sie uns über die sozialen Medien.
Das vollständige Änderungsprotokoll für v4.5.1 finden Sie auf GitHub.
Feedback ist auch unter GitHub Issues willkommen.