PWA was an awesome idea and should have been the way forward.
Unfortunately both Google and Apple very early on identified that it was in their best interest to keep the concept around in a half-dead state and ensure nobody really built on it...
You get notification. You can autoplay video/audio. You get whaterver video or element full screen with all necessary UI. You get rotation lock. You have a fullscreen to do what ever you want for any purpose. You probably can't touch hardware APIs(for example: bluetooth/nfc) like native app. But that isn't really needed for most apps either.
On the other side. Apple seems sabotage the PWA as much as possible. You can't autoplay video/audio. You can't even fullscreen anything other than video, and when fullscreen video, UI is ignored. Also there is no way to disable gesture so your app will misfire system gesture. And you can't lock the rotation either. There is no way to auto rotate the video player or whatever when maximized either.
It's really a golden example for pretend to do something while actually not. It seems you can do pretty much everything with ios pwa. And when you try to do it. You will figured out it will have a worse experience than native app because all sort of issues.
To be fair, Android also sabotages PWAs, it's just done behind your back. You see, in order to get a PWA to properly install, you'll have to use Chrome, and you'll have to have a Google Play account and Chrome will submit the PWA manifest for validation to a Google server, which in turn will decide whether the PWA is worthy, and if it is, it will generate a so called WebAPK, which is then installed on your device. If it's not worthy however, then it will become a bookmark instead, and many of the features that can be described in the manifest will not work at all.
So if you wanted to use a different browser or install a PWA without a connection to the internet, or without Google Play, all you get is a bookmark.
In my personal experience, it only validate whether manifest is malformatted though. Although it's still up to google if they want to do something wonky.
I saw someone claim on SO that they were not able to get a PWA to install properly until they changed their IP address, supposedly because they were from Iran, a sanctioned country.
To my knowledge, every PWA installed from Firefox on Android will become a bookmark. For Firefox I believe that means for example that if you try to open a link elsewhere that is within the manifest scope, it will not open in the PWA. That's because it's not possible to deep link to the PWA without it having an AndroidManifest with a corresponding intent filter, which is what the Chrome WebAPK achieves and why they can support for example custom protocol handlers or share targets or launch handling options.
AS I said, YMMV. PWA install has seen many a regression. Last Android release it didn't work for me, this one it does. I presume a lot of it is due to ecosystem variations and API changes.
Google invented PWAs and broke their back trying to make them a thing. I'm not a fan of Google but credit where credit is due.
They were also highly incentivized to develop the APIs that make it all work as Chromebooks are basically hosts for browser apps. Apple, as well as the other tech giants involved in the W3C had no such incentives and were dragging their feet.
Admittedly I am not up to date on the latest developments but as far as a couple years ago the PWA runtime on both ecosystems was significantly stymied in comparison to the APP runtime. No access to real storage functionality, significantly less platform APIs, yada yada.
Sure, you could build "better (installable) websites" but even to get standardized stuff like background execution or notifications working was either impossible or a long series of jumping through hoops. Even installation prompts bugged out way too often.
But to be clear, if that isn't the case any more I will be positively surprized by either platform provider.
I respect PWAs, but they take away so much that I personally want. No address bar, no tabs, no history, no extensions. It's a reversion from the glorious amazing user agency of the web to the sad state that computing had held us victim to for decades.
They also don't require a dump truck load of third party dependencies just to have a serviceable set of widgets to use. Every time I start looking into web app development I'm always shocked at what's required to replicate what one gets for "free" in a UIKit app.
Swift doesn't need a service worker to proxy all browser behaviour, and make use of local storage, with unspecified limit, to prentend to be working offline.
You do realize that there are many APIs that exist so that your Swift app works offline, right? There are specific persistence frameworks, tools for controlling caching, extensions for managing external files, etc. The argument that writing JavaScript that doesn’t make network requests and needs to store state to disk is somehow super special and different than any other regular JavaScript makes no sense.
You do realize that neither do browser apps require having a network card on your laptop, right ? You can run local browser apps (HTML + CSS + JS) on a computer with no network card.
No, not at all. Lots of apps using the system webview nowadays. I would urge you to revise your deeply outdated knowledge. Lots of frameworks making this convenient too. Capacitor (Ionic) Apps, Cordova (PhoneGap) Apps, Tauri (non-Chromium modes), etc.
A network card is not required for:
- Loading local HTML files into a WebView
- Packaging an app that embeds the WebView (e.g., WinUI WebView2, macOS WKWebView, Android WebView, blah-blah)
- Running JavaScript, CSS, DOM APIs
- Using local storage, IndexedDB, etc
- Accessing file:// resources
- Communicating with native code (e.g., JS <-> native messaging)
Btw, there are a lot of non-Chromium apps! Are you aware that Microsoft Teams now uses the System WebView on mobile (iOS WKWebView / Android WebView) ?
Linux apps like GNOME Notes, Foliate, ReText, Liferea etc use the system webview.
Apple Music, Apple TV, Apple Podcasts, App Store, Dash, etc use WKWebView