I Have an Idea for an App, Now What?

"Should I build my app natively, and if not, what should I use?"

As an iOS Developer, I get asked this question all the time from businesses, startups, and open community projects. With the rise of countless cross-platform development frameworks, such as Facebook’s React Native and Google’s Flutter, it can be overwhelming to decide where to begin. 

There are many different technologies out there to make apps, but ultimately they all have their strengths and weaknesses in different places. Different is the key word here.

 

 

A lot of articles like to tout the complete effectiveness of one platform over another, but realistically, there are pros and cons for all the popular (and maybe not-so-popular) frameworks out there, and it remains up to the developer to decide the platform is the best fit for their project.

The tools for building mobile applications that I'll be discussing here are Apple's Xcode, Google's Android Studio, Facebook’s React Native, Google’s Flutter, and Ionic Framework.  As of the writing of this article, these are the most popular IDEs and frameworks.

Native platforms

In general, there's one major advantage native platforms hold over cross-platform frameworks: native platforms enable the developer to take advantage of the newest technologies as soon as they are available on their respective devices. There is always a lag for cross-platform developers since they have to make the newer tech compatible with their platform before being able to use it in their app.

Native iOS Development with Xcode

Native iOS in Xcode uses Swift and Objective-C. The biggest advantage native iOS development has over all of its competitors is its simplicity. It is easier to get started on the framework, it is a simpler language to learn, and there are many more inbuilt tools to help in development. This is in contrast with cross-platform apps such as Google’s Flutter, which has fewer development resources to get you started, and React Native, which has a steep learning curve. 

Native iOS has a faster build time than cross-platform frameworks, and apps built in Xcode are also lighter than apps built on cross-platforms. The most recent addition to Xcode, Swift UI, also has a Live Preview function similar to the Hot Reload feature present in Ionic, React Native. etc. (See down below for details.)

Another advantage native iOS has over its peers is its accessibility features, which are far beyond the capabilities of any of the other platforms discussed here. This means that the app can account for and enhance the user experience of people with disabilities.

A downfall of iOS development is that it can only be used for iOS devices, whereas Ionic, React Native, and Flutter environments are much more versatile. In addition to that, Swift is mainly used for iOS Development, whereas Java and Kotlin for Android, and JavaScript for React Native and Ionic Framework, have a significantly larger amount of applications and community support for third-party tools. Finding developers to collaborate with is easier on those platforms as compared to native iOS.

Native Android Development with Android Studio

Native Android development uses Java, Kotlin, and C/C++. One of the biggest advantages native Android development has over native iOS development is that native Android development can be done on a Mac, but, in keeping with Apple's club of exclusivity, you can't develop iOS apps on a PC. Because native Android has a greater reach and audience, finding learning resources is another advantage it has over cross-platform frameworks like Flutter. Additionally, as mentioned earlier, the native Android platform has an Instant Run feature, which is similar to the Hot Reloading feature in React Native and Flutter, as well as the Live Preview function in Swift. This feature keeps the app running and injects new changes to the code in real time, which makes visualizing changes to the code quicker.

It is also easier overall to get Android apps onto Google Play compared to the Apple App Store, which has a much more extensive vetting process that can delay an app’s release.

A major downside to native Android Development is that it is harder to develop and test applications. This can be attributed overall to the OS fragmentation issue. This issue encompasses a variety of problems: 

Users run a wide range of operating systems, which is compounded by the slow pace of the adoption of new Android versions.

The “skins” feature used by different manufacturers to make their devices look and feel unique, such as TouchWiz for Samsung, Sense for HTC, etc.

The variety of screen sizes, device sizes, and/or resolutions.

The effects of fragmentation for users is that, in many cases, they don’t have access to the latest features in the platform; however, a more pressing concern is that it poses potential security risks, because it isn’t able to quickly fix bugs and implement security tweaks.

Cross-platform Frameworks

The biggest advantage cross-platform frameworks have over native frameworks is time. If you're making an app that needs to be compatible with iOS and Android devices and you're on a budget, cross-platform is often the way to go. This is because developing on a cross-platform framework is much more time and cost-effective than using native frameworks, 

since at least 30% of the code written in the cross-platform framework can be used for both the Android and iOS versions of the app. 

However, it's worth mentioning that it is almost impossible to write an app without writing any platform-specific code, even on a cross-platform framework. One basic example of that has to do with the UI of the app. Apple and Android users are used to navigation features and icons unique to their devices, and if your app does not account for these seemingly minor differences, the user experience will be confusing.

Facebook's React Native

Many popular mobile apps are partially or completely written in React Native, including Instagram, Facebook, Pinterest, Uber, Discord, and more. React Native uses JavaScript as its language, and, as a result of the popularity of JavaScript, it has many resources and a large community behind it. Another advantage React Native has over the other cross-platform frameworks I've discussed here is that up to 70% of the code can be shared across the Android and iOS versions of the app. React Native also adjusts to any screen size, whereas Swift and native Android require you to tweak the code so that it's device-specific. Similar to the Hot Reload feature in other platforms, React Native has a Live Reloading feature that automatically reloads the app every time the code is changed without having to manually wait for it to build. 

A big disadvantage of React Native is that it is far behind native capabilities in terms of UI functionalities and performance. This is because React Native needs to create a middleman between the code and the platform. Another issue is the number of hoops you have to jump through just to get started. To use React Native, you first need to learn Javascript, then React JS; only then are you able to understand React Native. React Native also has poor documentation compared to other platforms.

Another issue with React Native has to do with Javascript itself. Although it has a large community with many capable and seasoned developers, the nature of the language makes it easier to make mistakes in the code, and harder to find them. This can be mitigated by using JavaScript IDEs, but the general nature of the run time of JavaScript makes it hard to debug overall.

Google's Flutter

Flutter uses Dart as its base language. One advantage Flutter has over other cross-platform frameworks is that it has many of the native components required built into the framework itself, and it has the ability to compile straight to run-time code; this means it doesn’t need a middleman to communicate with the components. Conversely, as I mentioned above, React Native requires a Javascript bridge to communicate with native components, which causes poor performance. Flutter is better than React Native for APIs and UI components for the same reason. Flutter also has better testing features than React Native and Ionic.

A downfall of Flutter is that it doesn't have as large a community as some of the other popular frameworks, which means fewer resources overall, which means more time spent staring at your screen rethinking life.

Ionic Framework

Ionic Framework is a very lightweight framework built for usability on all platforms, including web apps. Ionic's base is JavaScript, and it has support for both Angular and ReactJS, meaning it has adaptability for as many web developers as possible. It allows web developers to create web pages that are run inside WebView, which is a browser instance. There are lots of advantages to using Ionic Framework: it's easy to learn, has exhaustive documentation, and a strong and growing community. Ionic also has Readymade UI elements. These are customizable, and also can be used straight up. They speed up app development by speeding up the process of developing UIs, while retaining a native look by utilizing its UI components library. 

While Ionic Framework has a wide range of integration capabilities and plugins; it can get plugin reliant, especially if you need an extremely specific feature that's not available on your version of Ionic. In this case, you might end up having to design your own plugin, which is time-consuming and can be a pain in the neck.

A downside of Ionic is that it has slow support for new features and poor performance when using native capabilities, such as AR using the built-in camera, as well as with heavy animation. If you're looking to design an app that has a lot of these types of features, React Native is a better platform to use. Another common issue is a lack of security. To combat this, you would have to “uglify” the code to make it harder to read, or you would be forced to use HTTPS.

In summary, there is no best platform out there that will work for every project; you'll have to walk the correct balance between streamlined app performance and time and cost-effectiveness to choose the ideal app to suit your needs. At the end of the day, there is no right answer to the question “Which is the best framework to use?” It all depends on where your priorities lie and where you are willing to make a compromise.

Latest Posts