Apple recently suggested to Australian authorities that Apple can't possibly have a monopoly on app distribution since they have no restrictions against PWAs which "have the look, feel and functionality of a native app". [1]
As someone currently building an app-like website – https://wormhole.app – let me tell you that Apple's neglect and underinvestment in the web platform definitely precludes websites or "PWAs" from having the "have the look, feel and functionality of a native app". Safari suffers from the twin effects of (1) limitations that Apple has intentionally put in place and (2) intentional under-staffing of the Safari team. Here's how it's affected us:
- Apple recently broke our website by adding support for a new API `blob.stream()` in Safari 14.1 (which we correctly feature-detected) but when you call the function you get a null pointer exception which crashes the renderer process [2]. Worse, the bugs was fixed on `master` several months before Safari was released but it wasn't included in the release.
- IndexedDB has been full of bugs for years and shows very slow signs of improvement. We have no other storage options on Safari, so we're stuck using their buggy implementation.
- Safari limits websites to using 1GB of temporary space after which the app must prompt the user for an additional allocation, each 200MB at a time. So if the app needs 5GB of space (for example, a video editing application, or in our case a P2P-enabled file sending app), then the user will need to click "okay" on twenty prompts for 200MB more space each to make the app work. Needless to say, this is totally ridiculous and definitely not an API that Apple would ever find acceptable to ship for native iOS apps.
- If we choose to use in-memory storage then Safari warns the user that our website is using lots of RAM. So that's not a real option.
- We can't offer streaming download + decryption from our servers because Safari's ServiceWorker implementation doesn't allow intercepting HTTP requests for file downloads.
- Missing many APIs that would actually let websites truly compete with native apps. Just a few that we use:
* Web Share Target API (https://web.dev/web-share-target)
* File System Access API (https://web.dev/file-system-access)
- I could go on...
It's hard to see Apple's decisions here as anything but outright hostile to the web and designed to push developers into making native apps.
[1] https://www.accc.gov.au/system/files/Apple%20Pty%20Limited%2...
[2] https://twitter.com/feross/status/1386835131780931587