Cross platform frameworks can be a useful for developing apps with simple user interfaces when time and engineering resource are limited. For apps with more complex user interfaces, access to more engineering resource, or that are expected to be continuously developed and supported over longer periods of time, native development is likely to be a better choice. This has been demonstrated by companies such as Airbnb and Udacity publicly moving away from cross platform technologies.
Key advantages are:
The code is developed in a single codebase, which means you only have to write your client-side business logic once, unlike native development which has two separate codebases. (However in order to provide an experience which is in keeping with the norms and conventions of each specific mobile platform, it is often preferable to write separate user interface code for each platform).
For apps meeting the ideal use case, initial development of an Android and iOS app can be faster than using native development (in our experience, apps for two platforms can be developed in around 2/3 of the time required to develop for two platforms natively).
The use of cross platform frameworks can reduce the need to write native code, allowing organisations to utilise existing expertise and potentially increase their ability to recruit new personnel in often competitive marketplaces.
It is easy to develop Android and iOS apps in parallel with a small number of engineers.
Maintenance and support of cross platform applications over the long term is more expensive than for native applications, due to the disadvantages listed below.
The cross platform framework ecosystem is rapidly evolving and at present platforms have relatively short lifespans. This makes cross platform projects harder to support over time, and runs the risk of the project needing to be rewritten in a new framework in the future.
Cross platform frameworks add an extra layer of dependencies needed to compile and distribute mobile applications. This causes issues with maintenance of older projects in particular, where it can be difficult to line up dependencies to make changes and bug fixes.
It can be difficult to get acceptable performance, for example in animations and scrolling, using cross platform frameworks.
There can be a lack of parity between support for iOS and Android features, and it can take considerable effort to get features working on both platforms.
Documentation and support, both official and from the community, is less comprehensive for cross platform frameworks than native. Furthermore, support declines as the popularity of a frameworks wanes.
New features added to native SDKs take time to be implemented in cross platform frameworks, so are not available immediately.
As well as expertise with the framework, engineers still need expertise on Android and iOS, which both have different architectures, lifecycles and paradigms. Rather than simplifying the development process, cross platform frameworks introduce an extra layer of complexity.