iOS vs Web Development
Developing for iOS and for the web are two completely different experiences; each platform has its own perks and drawbacks. The web has become more powerful than ever, adding abilities one would normally see in native apps only, while iOS has become even easier to develop for, making it practical to implement complex features without much effort.
Developing for iOS is a more low-level development experience. Apps run natively on the device, and with more control over the device’s hardware, there is more responsibility over how well the hardware handles. Native iOS apps have a host of privileges that web apps do not, such as the ability to run in the background, support widgets, and have access to device sensors, like the gyroscope. Developers also have much more control over how the app looks and feels. iOS is known for its animations and gestures, and the SDK makes it easy to implement into any app. A skilled iOS developer can make nearly any experience he or she wants with such fine, low-level control over the app.
But developing for iOS is not a perfect experience; developing for iOS requires a steep learning curve. Apple’s frameworks are very involved, and a deep understanding of them is required to effectively make apps. I’ve spent countless hours learning various frameworks, like UIKit, SpriteKit, SceneKit, and AVFoundation, and learning one of these does not mean learning the rest will be easier; the skills don’t necessarily stack. Additionally, an Apple Developer account will inevitably be needed to test on a physical device or to use entitlements like iCloud or Game Center.
Developing for the web is a comparatively easier experience. Even basic website design knowledge such as HTML and CSS are enough to get started in making websites. Web apps tend to be more limited than native apps because they run in the browser, but fortunately, since browsers becoming more powerful, web apps are becoming more capable. In 2022, web apps can support basic native-app features like push notifications, work offline, and even use sensors like the camera and microphone. They can run on any device that supports web browsers, from a new $50k Mac Pro to an old $30 Android phone. Additionally, there’s no special developer account or SDK to download; the web is an open platform, and there’s no App Store approval needed to publish an app on the web. This ease of development paired with compatibility with most devices makes web apps a great choice for development.
But like iOS, there are drawbacks to developing web apps. Developers just won’t be able to have the same level of control over web apps as they do with iOS apps. They also won’t have the same hardware-level features as native apps; use of the gyroscope or even USB ports are not standard browser features right now. Browser fragmentation is also an aspect that developers have to think about. Unlike iOS, browsers operate differently, and that may require mitigation in the codebase. While there is a standard for browser engines, it’s not necessarily followed 100% of the time. For example, Safari infamously has not supported the Push API for years, even though all other browsers have. Fortunately, browsers are getting more powerful all the time, and if a feature is not supported now, it will probably be supported in the future.
Each development experience is great in its own way, and there are different reasons to develop for either. If the goal is to create a gesture-based animation-rich client app, a processor-intensive app, or a game, an iOS app is probably the best choice. But if none of those are priorities, or if the app won’t be approved by App Review, a web app may be the way to go.