With apps, you kind of by definition only have a blob of code. As an user and with a sufficiently advanced operating system, you can block some outside-world interactions like internet connections, but the app only has to give you a render target whose pixels can be drawn to arbitrarily. Some apps even use integrity verification features from the OS vendor to check if they haven't been tampered with, that is much harder to do on the web.
Which is incidentally why there is so much interest in high performance web programming and being able to draw arbitrary pixels to a render target (hello canvas/webgl/webgpu). Expect content blockers to become way less effective in the coming years (even ignoring the big obvious attacks like Chrome's Manifest v3).
That's s very sad and probably very accurate analysis!
Wonder if the arms-race will give rise to other kinds of add blockers that use image recognition to identify ads. But that still requires rendering the ads (even if only in the background), removing much of the benefit of ad-blockers.
The surefire way would be an external application that uses OS APIs to fiddle with memory directly (bye bye mobile content blockers).
But whatever form it takes, it would have to be programmed to operate on every framework available, so it's way less universal than writing a CSS selector or URL regex.
As a simple example: Dark Reader has 5 million installs on Chrome. That's 5 million people who can view a web app in dark mode even if the developers didn't think to provide a native way to do so.
I'm to the point where I boycott apps. I will only use an app if there's a real benefit to me for doing so, such as podcasts and music and offline functionality or those that use hardware features.
Although I broadly agree with this assessment, I'd just like to add a slight nuance that, at least in my view, it's specifically _app store apps_ that are roughly the opposite. You can still, for example, install random APKs (on Android, I doubt Apple has anything similar) if you're so inclined, so they can be as user-centric as you want. It's just that the major manufacturers optimize for the roughly-anti-user-centric flow.