As I’m finalising the project idea, and settling into a specific direction for it, I began looking into the best tool to develop my application. For the previous two projects I used Unity, however my main issue with Unity is the lack of resources to help in building 2d applications on it. This might sound like a trivial problem, but considering I have no previous knowledge or background in coding and development, community support and tutorials are basically all I’ve got to learn.
Since I decided to build for iOS, I was looking for those that are specific to my outcome like X-Code but, it is limited to those using Macbooks (for obvious reasons), and due to the covid-19 situation closing uni facilities I no longer have access to them either – trying to use Swift did not work either. Moreover, I believe a cross-platform mobile app platform will be a better choice, rather than limiting myself to iOS only. My choices were now between Xamarin, React Native, and Flutter. All 3 platforms allow for development for Android and iOS using one codebase, and more importantly have resources that I can look at it.
Xamarin was the first contender because, like Unity, it uses c#, meaning I would not have to learn a new programming language and it provides access to native APIs. However, I would still need to have some sort of knowledge in native programming languages since the UI is coded. Other cons include large app size when exporting and it is not ideal for apps with complex UIs.
Flutter is a relatively new framework and uses Dart. The programming language is easy to learn with an enormous amount of tutorials and documentation from the official Dart site. However, unlike c#, it is less known and rarely used by developers. Although Flutter offers APIs and pre-built widgets that you can use as is or customise, it is short on native APIs and requires third party packages. It also has the same issue as Xamarin, large app size.
After research and actually downloading all 3 platforms and testing them for a while, I found that none beat Unity for me. The first most obvious reason is the UI; the drag-and-drop like ability makes building the app so much easier. The UI is easy to customise and more importantly is adaptive to the platforms. Moreover, because it is a game engine, it is great in handling complex transitions, animations, and scripts happening at the same time. While it lacks in documentation and the unity mobile app (outside of games) community is relatively small, c# is still widely used so even if it’s not directly solving a unity-specific issue, the code can be tweaked.
Flutter vs Xamarin vs React Native — Let the Battle Begin!