Well the answer is complicated but the main things are:
1. When smart phones first started (2007) web tech was not nearly good enough to make the experiences that the smart phones were capable of providing. So many things are still very hard or impossible to do in browser APIs (GPS, blu tooth, compass, gyro, push-notifications, etc). On top of that the Microsoft lawsuits over internet explorer in the early 2000s and the ActiveX/Java Applets security issues made everyone very wary of adding or using custom platform-specific extensions to web apps. Sure Steve could have said: "Hey build web apps, but if you want GPS, use this function that only works in iOS Safari", the would have been crucified by devs and lawsuited to hell by the US (on behalf of google and microsoft lobbyists). In fact look up Push API notifications in Safari, it is EXACTLY this and it is a huge pain for devs and the other companies on W3 are really annoyed at apple over it: <a href="https://developer.mozilla.org/en-US/docs/Web/API/Push_API" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/API/Push_API</a><p>2. Performance was a much bigger problem, especially for games and 3d acceleration APIs like webgl was also not available back then. To this day the 3d engines makers still don't target the Browser platform because webgl is so limited and buggy. I think Unity did for a bit but eventually dropped support<p>3. In fact Steve Jobs around 2007 was pushing for web apps as the only 3rd party app platform for the iphone, but due to public pressure (due to 1. and 2.) App Stores came about. They still exist though because the vendors (google and apple) realised the lock-in and closed-garden control over the market was a huge boon for profits. Much like Playstation/XBox/Switch, they really enjoy taking a cut on every sale. Steve knew that when you are the underdog entering a market you have to be open and consumer friendly, once you have the users locked-in you can close down. He managed to hit the jackpot because there was NO viable <i>open</i> alternative to code what the phones were physically capable of, so the developers didn't even have a choice, they HAD to use the proprietary solution. This is partly why the VR space is so promising to big companies, they know whoever gets lock-in effect will be able to milk it for DECADES. We as consumers and 3rd party devs desperately need an open VR platform (maybe inside the browser?), but it seems like it is not going to happen any time soon<p>The lock-in is much more insidious than you might think though, the lock-in is both in the user-level but as well as the developer-level. In UI development there is this big thing that the UI should feel native to the platform, meaning apps should behave similarly to each other. For example the acceleration and rubber-banding when scrolling down a list should be the same for every app.<p>Browsers are inherently a different platform that just happens to run on top of other platforms. Anyone can tell that a web app in Windows feels different than a Windows 8 App that also feels different to the obscure win32 configuration screens from windows 98 days that appear if you dig deep into the settings<p>Android and iOS likewise have the same lock-in effect, web-views wrapped in native apps just feel bad. Not because they are bad, but because they are different. The ONLY way to make a web app feel native in Android or iOS would be to compile their native UI Widgets into webassembly and somehow render them to a full-screen <canvas> tag and not use the DOM at all. Which is kinda pointless, might as well code full native. No matter how much hacking a cross-platform framework does to try to feel native it won't be native because there is no way to mimic millions of lines of code of the native UI toolkit. It is much the same reason Java desktop apps and java applets failed, they didn't feel native inside Windows OR inside browsers<p>Facebook realised this earlier and made React Native which renders to native UI Toolkit elements instead of using a web-view or drawing to screen directly. Google seems to be moving in this direction as well with Flutter, their core business are the apps themselves not the google play store and too many companies are going iOS-only for their apps so google is pushing an "open" platform (that they control)<p>On the other side you also have developers lock-in because all those platforms need separate dedicated developers, those devs will push back HARD on using any non-native tech because it literally means they their expertise is wasted and they will be downgraded from Senior iOS developer to Junior Web Dev. Just look at any company where business decides to shift to use web-wrapper native app, all the iOS/Android devs quit immediately (even though the company would like to keep a few because of platform-specific quirks)<p>In short the answer is: "Because it is good business for the companies that make the smartphones"