Mobile app development landscape is evolving constantly with new and better ways of developing apps are coming up. In the past few years we have seen multiple platforms crop up to develop mobile apps faster.
Here are some platform options for developing mobile apps. Each have a different approach. Each of them have areas where they shine the brightest.
- Native Mobile Apps
- Hybrid Mobile Apps
Native Mobile apps
Native app development is the platform prescribed way for developing apps.
- You develop Native apps using the platform specific languages. You can use Java or Kotlin for Android and Swift for iOS. You can use Obj-C for iOS but don't see many people using it now for new apps.
- Provides direct access to the platform APIs and hardware. You can use the platform specific APIs for build features. For example, if you are building a camera app, you can use the platforms APIs to access the camera and build your app on top of it.
- All platform features are available at your disposal and are required SDKs are made available by the respective platform sponsor.
- Each platform has it's own Integrated Development environment (IDE) which helps develop applications quickly and easily.
- All latest platform features are available to developers as soon they are released.
- Excellent documentation and community support.
Hybrid apps
If you are looking for good performance along code reuse across platforms, building Hybrid apps is the way to go.
Here, there are a multiple options to choose from.
Each differ in their approach but have the common goal of reducing the development time and strive to have a common code base for multiple platforms.
Let's look at some of the areas we need to consider for Mobile app development which help in deciding on the platform to be used.
- Type of app
- Time to market
- Easy of development and learning curve
- Community support and availability of libraries
Flutter vs React Native
I did some study on 2 of the popular Hybrid app development frameworks. React Native and Flutter. Both these frameworks essentially use native components to render the UI but have different approaches to how they do it.
Flutter
Here is an overview of the architecture of the Flutter framework. Flutter uses its own rendering engine which is based on SKIA. Google claims fast rendering performance which is at 60 FPS which is really good.
Flutter uses Dart programming language which is a strongly typed language with very neat features. I think this turns out to be a good plus but most people would not want to learn a new language to be able to write mobile apps. But in my opinion, it is well worth the effort.
Google is developing a large number of libraries which will aid flutter development which is a big advantage. This is not as large as the community libraries available as NPM modules for React Native but are maintained by Google Developers, so I think there will be continued support for these in future as well.
React Native
React Native on the other hand, uses RN bridge to translate the Javascript code on to native components. This is a little slower compared to Flutter but the difference is never noticeable. At least I haven't seen any difference.
React Native comes with just bare bones version of widgets so it is likely that you will end up writing custom widgets or using a community supported or third party UI framework. Though the React Native community is very active and continuous development happens, it is likely that at some point of time, if the developer stops maintaining the library, we might end up making changes at library level to fix the issues/bugs.
Conclusion
In conclusion, I think both are promising tech but my vote would go to flutter because of it being a batteries included kind of framework. React Native has a few things going for it like, you don't need to learn a new language and can be easily productive if you know Javascript. Flutter is slowly catching up but it's going to take a long time for it to overtake React Native.
Hybrid Mobile App Development
Overview of options available for Mobile app development primarily from Hybrid app development