In the competitive scene of mobile development, it is critical to choose not only the target audience – the types of users – but the target mobile platform too. The market is very fragmented as of today; Google’s Android OS has the biggest user base but Apple’s iOS follows closely. The third player in the field is Microsoft’s Windows Mobile operating system and while it only has below 10 percent market share it is still considered when a new application is being developed. It is rare that a successful application can afford to only target one of the above platform but at the same time, developing for multiple OS requires significant resources. When the developer(s) decide on the target platforms it is also not trivial task to choose the right tools to be used and the right approach to take.
There are basically two main roads that a developer or company can take: use a cross-platform solution – using a single language and a cross-platform framework – or developing native applications for each target platform. The latter is often called multiplatform development, but the term is also used to all development that includes versions of the app for multiple platforms.
While using a cross-platform solution can be tempting, developers who take this path often face problems with performance and user experience. The other drawback is that the development is than tied to a certain framework which may or may not include the required building blocks, and often the project has to adapt to what is available with that technology. Also, these frameworks are almost always a bit behind the latest features of each platform.
I strongly believe that a good software architecture is platform independent, and it is possible to develop a multiplatform application effectively that follows the same principles and patterns while still using the native technologies and features of each platform. In my thesis I will explore this approach and develop an application for Android, iOS and Windows (Mobile). First I will research technologies and solutions that can help a multiplatform development, lay down rules and paradigms that I will follow, and then I will apply these principles in practice to prove the points I come up with.