Writing natively in Swift
As far as the development process goes, I love writing apps in Swift. The language is really verbose and the compiler in Xcode is really great for catching mistakes and bugs before you run the app. It’s also nice to occasionally step out of the code and design views in the interface builder, which gives a visual representation of what your app will look like before it is built. Swift is also designed hand-in-hand with iOS, so you can take advantage of the libraries that come with pre-built UI components that give that classic iOS feel.
While Swift brings some great things, building and managing an app built in Swift would mean having a code base that is distinctly separate from its parent web app, effectively doubling the work that goes into creating a web app with an iOS companion. In addition to that, Swift code cannot easily be ported to Android, so developing a cross platform app would further require yet another code base and another language to manage. In terms of functionality, Swift produced excellent results, but not without some management drawbacks.
Web Apps with PhoneGap
But trying to get it to feel like a real app was difficult. The resulting to-do list very much felt like a Safari port rather than a full application. You can call native elements such as alerts, but some functions such as Table Views, would have to be built separately and from scratch in HTML. The end experience felt cheap and clunky, particularly when compared next to the native app.
Using React Native
It didn’t come without its challenges, however. React Native is still pretty new and debugging the app was pretty horrendous; the documentation is pretty confusing and the examples provided can be difficult to understand. Errors are displayed in a few places: you use Xcode every time you need to build the app, but the console lives in a browser instance, and you also get warnings and failure messages on the simulator.
Overall, I really preferred the results that came from the native Swift app, but not everyone has the time to learn Swift and get familiar with the Apple development environment. PhoneGap was simple and could be good for small, simple extension apps while React Native grows more promising as the documentation matures and the community behind it grows.