Getting a basic URL Filter to work

I haven’t been able to get this to work at any level! I’m running into multiple issues, any light shed on any of these would be nice:

  1. I can’t implement a bloom filter that produces the same output as can be found in the SimpleURLFilter sample project, after following the textual description of it that’s available in the documentation. No clue what my implementation is doing wrong, and because of the nature of hashing, there is no way to know. Specifically:
    1. The web is full of implementations of FNV-1a and MurmurHash3, and they all produce different hashes for the same input. Can we get the proper hashes for some sample strings, so we know which is the “correct” one?
    2. Similarly, different implementations use different encodings for the strings to hash. Which should we use here?
    3. The formulas for numberOfBits and numberOfHashes give Doubles and assign them to Ints. It seems we should do this conversing by rounding them, is this correct?
    4. Can we get a sample correct value for the combined hash, so we can verify our implementations against it?
    5. Or ignoring all of the above, can we have the actual code instead of a textual description of it? 😓
  2. I managed to get Settings to register my first attempt at this extension in beta 1. Now, in beta 2, any other project (including the sample code) will redirect to Settings, show the Allow/Deny message box, I tap Allow, and then nothing happens. This must be a bug, right?
  3. Whenever I try to enable the only extension that Settings accepted (by setting its isEnabled to true), its status goes to .stopped and the error is, of course, .unknown. How do I debug this?
  4. While the extension is .stopped, ALL URL LOADS are blocked on the device. Is this to be expected? (shouldFailClosed is set to false)
  5. Is there any way to manually reload the bloom filter? My app ships blocklist updates with background push, so it would be wasteful to fetch the filter at a fixed interval. If so, can we opt out of the periodic fetch altogether?
  6. I initially believed the API to be near useless because I didn’t know of its “fuzzy matching” capabilities, which I’ve discovered by accident in a forum post. It’d be nice if those were documented somewhere!

Thanks!!

Hi!

Few more weeks went by, 26.1 beta is out, but I’m still nowhere closer to test this (let alone release it).

Same two blockers:

  1. No response to the server certification form
  2. App Store Connect auto-rejects apps with URL Filter extension

I have 150 testers that signed up to test this specifically... What do I tell them? 😬 I figured it was safe to announce this feature late in the 26 beta cycle 🥲

Regarding your first issue, I asked about that internally. It seems that there’s been a delay with it at our end. I’m hoping that we can clear that soon. I’ve sent a reminder to check on this around the middle of next week.

Regarding your submission issue, your bug (FB19582905) kinda got lost )-: [1] However, App Store Connect is now accepting iOS 26 SDK uploads, so it’s possible that this has just fixed itself. Please try uploading again and reply back here with your results.

IMPORTANT Don’t pass that build on to App Review, because it won’t work for them until we resolve the first issue. However, you should still be able to upload to App Store Connect.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

[1] Normally I check that bugs land in the right place when I see them mentioned here on the forums, and I did that for FB19582905. However, things went wrong after I did my check )-:

Hmmm I got an email reply but I can’t see it here?

Anyways I did just try to resubmit again and the errors are the same:

Validation failed
Invalid Code Signing Entitlements. Your application bundle's signature contains code signing entitlements that are not supported on iOS. Specifically, value 'url-filter-provider' for key 'com.apple.developer.networking.networkextension' in 'Payload/Wipr.app/Wipr' is not supported. (ID: 65f19038-24b1-4701-9bae-237253675d6f)

Validation failed
Invalid Code Signing Entitlements. Your application bundle's signature contains code signing entitlements that are not supported on iOS. Specifically, value 'url-filter-provider' for key 'com.apple.developer.networking.networkextension' in 'Payload/Wipr.app/Extensions/WiprBlockerNetwork.appex/WiprBlockerNetwork' is not supported. (ID: cdc0f1ec-d541-4d55-8202-bb9c8e3553d7)

Validation failed
Invalid Info.plist value. The value of the EXExtensionPointIdentifier key, com.apple.networkextension.url-filter-control, in the Info.plist of “Wipr.app/Extensions/WiprBlockerNetwork.appex” is invalid. Please refer to the App Extension Programming Guide at https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Action.html#/apple_ref/doc/uid/TP40014214-CH13-SW1. (ID: 27b322bc-9010-40c6-880c-7ad627a7c149)
Anyways I did just try to resubmit again and the errors are the same:

Thanks for running that test.

I’m consulting with folks internally as to how best to proceed here. I hope to get back to you about this early next week (I’m about to get an an aeroplane!).

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Getting a basic URL Filter to work
 
 
Q