iOS용 AdGuard v4.5.1: iOS 17에서 규칙 제한 문제 해결
이번 버전을 준비하던 중 콘텐츠 차단 규칙의 수를 크게 제한하는 예기치 않은 iOS 17 버그를 발견했습니다. iOS 17 버그를 수정하는 것 외에도 이번 버전에서는 앱의 성능과 안정성을 개선하기 위해 여러 가지 사항을 적용하고 일부 버그를 수정했습니다.
Apple, Safari에서 콘텐츠 차단 규칙을 최대 15만 개까지 사용할 수 있다고 했는데 어떻게 된 건가요?
문제
이 모든 것은 iOS 17에서 필터가 실제로 업데이트되지 않으면서 끝없이 업데이트되는 문제에 대한 해결책을 찾으려는 것에서 시작되었습니다. AdGuard 메인 화면의 오른쪽 상단에 있는 🔄 아이콘을 누르면 끝없이 회전하는 애니메이션이 트리거되었지만 아무 일도 일어나지 않았습니다. 하지만 경우에 따라 이 광경은 필터 업데이트 오류 형태로 끝나는 경우도 있었습니다.
문제의 원인
처음에는 앱 코드에서 버그를 찾으려고 했지만, 더 자세히 살펴볼수록 이 문제는 iOS의 최신 버전에서만 발생한다는 것이 명확해졌습니다. 이 정보와 점점 더 많은 사용자 리뷰를 통해 문제의 근원이 iOS 17에 있다는 결론에 도달했습니다.
그리고 사용자가 활성화한 필터(또는 활성화하지 않은 필터)에 따라 필터가 성공적으로 업데이트되는 것을 발견했습니다. 그 결과 Safari의 로딩 규칙이 때때로 메모리 제한에 도달한다는 사실을 깨닫게 되었습니다. 이전에는 이런 문제가 없었습니다.
Apple은 개발자가 앱에서 Safari 콘텐츠 차단 기능을 구현하여 사용자에게 콘텐츠 차단 기능을 제공할 수 있도록 합니다. Safari에서 열린 사이트에 필터링 규칙을 적용할 수 있기 때문에 iOS용 광고 차단기에 없어서는 안 될 도구입니다. 현재 Safari 콘텐츠 차단 API 문서에 따르면, 하나의 콘텐츠 차단기에 최대 15만 개의 규칙을 적용할 수 있으며, 하나의 앱에 여러 개의 콘텐츠 차단기가 있을 수 있습니다.
모순된 상황
하지만 실제로 15만 개의 필터링 규칙이 있는 표준 콘텐츠 차단기를 사용하면 iOS 17에서 갑자기 크래쉬되거나 오작동하기 시작했습니다. Safari가 더 이상 특정 크기 이상의 파일을 허용하지 않는 것으로 밝혀졌으며, 심지어 4~6만 개의 규칙이 있는 콘텐츠 차단기(15만 개 제한의 3배 미만)도 포함된 규칙에 따라 가끔 오작동이 발생했습니다.
Safari가 공식적으로 15만 개의 규칙을 허용하는데 4만 개의 규칙 콘텐츠 차단기가 오작동하는 이유가 무엇인가요?
이는 iOS 17의 명백한 버그이므로 이미 Apple 포럼에 신고했습니다. Me too를 눌러 보고서에 투표해 주시면 감사하겠습니다. 또한 Apple Feedback Assistant의 티켓 ID는 FB13282146입니다.
해결 방법
임시 해결책을 마련하는 데 일주일이 넘게 걸렸습니다. JSON 파일 크기를 제한하고 핵심 필터를 최적화하여 새로운 현실의 요구 사항을 충족할 수 있도록 했습니다. 광고 차단기가 여전히 iOS에서 너무 큰 경우, Safari 크기 요건을 충족하는 규칙 중 일부를 적용하도록 자동으로 크기를 줄입니다.
현재 iOS용 AdGuard 광고 차단기는 대부분의 사용자에게 정상적으로 작동하고 있지만, Apple이 가능한 한 빨리 버그를 수정하기를 바랍니다.
SafariConverterLib, Scriptlets 및 TSUrlFilter의 업데이트
iOS 버그에 대한 이야기는 이제 그만하고 이번 버전의 더 멋진 변경 사항에 대해 살펴보겠습니다. 예를 들어, SafariConverterLib, Scriptlets, TSUrlFilter 종속성을 업데이트했습니다. 이 세 가지 구성 요소의 업데이트와 상호 연결은 높은 필터링 품질, 즉 차단 규칙의 효율성과 최신 성능을 유지하는 데 도움이 됩니다.
SafariConverterLib는 AdGuard 필터링 규칙을 Safari 콘텐츠 차단 규칙으로 변환하므로 기본적으로 iOS용 AdGuard에서 필터의 모든 기능을 사용할 수 있게 해줍니다. Scriptlets과 TSUrlFilter는 iOS용 AdGuard에서 고급 차단 기능을 구현하는 데 도움이 되므로 매우 중요합니다.
DnsLibs 개선
DNS 필터링 엔진인 DnsLibs 2.3 버전을 대폭 개선하여 DNS-over-HTTP/3 모드에서 AdGuard의 성능과 안정성을 크게 향상시켰습니다.
또한 몇 가지 다른 문제도 수정되었는데, 그 중 하나는 iOS 13.x에서 AdGuard가 열리지 않았던 문제입니다.
최신 iOS용 AdGuard를 사용해 보시고, 이번 버전에 대한 의견이 있으시면 아래에 댓글을 남기거나 소셜 미디어로 문의해 주세요. 전체 v4.5.1 변경 로그는 Github에서 확인할 수 있으며, Github 이슈 섹션에서 새로운 기능을 제안하거나 버그를 신고할 수 있습니다.