Skip to main content

Android with Kotlin, iOS with Swift, Kotlin Native, flutter.io, React Native, PWA, Xamarin, Hybrid - which way to go?

Currently there are tons of frameworks how to get your business model to the user... and in the app store
  • Full Native
    • Android with Kotlin, iOS with Swift
    • Deepest integration
    • Single way to make sure that you have no lock-in effect with a framework, and you are f**ed, when Apple or Google disallows the usage of a specific technology...
    • Two teams required
    • 2x code
  • PWA (Progressive Web App)
    • Write offline- and push-capable PWA with web-technologies only
    • Some native features might require hybrid native development and bridging (like In-App purchases, AR, ...)
    • In best case:
      • One web team only for website and app
      • Maybe some native specialists for special features
  • Kotlin Native
    • Develop a shared framework with or without UI using Kotlin Native
    • Additional native code will most probably be required
    • Big Android team, small iOS specialists
  • flutter.io (React Native | Xamarin | ... )
    • One codebase (flutter: Dart, React Native: JavaScript, Xamarin: C#)
      • Additional native code will most probably be required
    • flutter.io is supposed to be the next default development platform for upcoming Android-successor Fuchsia - and has a good hype at the moment 
    • Big flutter team with some iOS and Android specialists
      • Or enthusiastic native developers that want to jump on flutter
  • Hybrid
    • Mix of PWA, Web and Full Native where you choose e.g. on a screen or feature-wise level what to use with which technology
    • Mix of Web, Android and iOS specialists
How to make a decision from here?
There is no simple answer to this - the longer you are working with the technologies and teams, the more the context gets into focus rather than the technology itself. You should ask yourself: What is the most suitable technology for my context?
  • What are the planned features and which technologies are mandatory?
  • How can I standout from my competitors?
  • Which skills are in my team?
  • What budget do I have at hands?
  • How fast do I need to move - how much risk can I take (lock-in effect, dropped technology, development speed, quality, ...)?
  • How long-term do I have to plan?
  • Which crew/teams do I have at hands with which skills... and which commitment?
    • Freelance/internal?
    • Technical skills?
  • Do I have an app-only use-case or do I have to maintain a website as well?
After having answered those questions for yourself, head back to the stacks presented above - and choose your weapon.

What do we do at WELT?
Well, we have a full native team staffed already and our native apps have excellent ratings.

For Edition (iOS and Android) we have chosen to go for the (local) hybrid way - so the main application is native code but most of the views are WebViews, showing local HTML for performance and synergy reasons.

For News (iOS and Android) we went fully native, following the Server-driven UI principle:
  • We defined a design language with pre-defined, multi-purpose bricks, having the backend defining the screens and data
  • We shift as much as possible of the business logic to the backend, to avoid double implementation and staying flexible for changes without requiring to do another app release in the App Stores
  • We have a slighty bigger Android/Kotlin crew that takes care not only of the Android client, but also of the backend implementation using Kotlin with Spring Boot
    • We share a Kotlin lib with the Android Client and the backend
    • We are also trying to share the lib with iOS using Kotlin/Native but are not there yet
For us this works out quite nicely and we can move fast, adding more and more flexibility by shifting more and more dynamic logic to the backend.

For you it most probably is a question of your context
😊

Thanks to Anton Averin and Pawl Polanski for your input!

More reads:

Comments

Most Favorite Posts

j2obc - A Java to iOS Objective-C translation tool and runtime

What J2ObjC Is J2ObjC is an open-source command-line tool from Google that translates Java code to Objective-C for the iOS (iPhone/iPad) platform. This tool enables Java code to be part of an iOS application's build, as no editing of the generated files is necessary. The goal is to write an app's non-UI code (such as data access, or application logic) in Java, which is then shared by web apps (using GWT), Android apps, and iOS apps. J2ObjC supports most Java language and runtime features required by client-side application developers, including exceptions, inner and anonymous classes, generic types, threads and reflection. JUnit test translation and execution is also supported. J2ObjC is currently between alpha and beta quality. Several Google projects rely on it, but when new projects first start working with it, they usually find new bugs to be fixed. Apparently every Java developer has a slightly different way of using Java, and the tool hasn't translated all possib...

Backend-driven native UIs

Backend-drive native UIs John Sundell  Slide Share Using Back-End Design to Create Customizable Front-End Mobile Experiences By controlling the front end of mobile apps from the back end we can build customized experiences at runtime, creating cleaner interfaces and reducing load times. Nithin Rao UX Magazine The Hub Framework Welcome to the Hub Framework - a toolkit for building native, component-driven UIs on iOS ( no Android support released yet ). It is designed to enable teams of any size to quickly build, tweak and ship new UI features, in either new or existing apps. It also makes it easy to build backend-driven UIs. The Hub Framework has two core concepts - Components & Content Operations. Spotify LeeGo: Build UI without UIView LeeGo is a lightweight Swift framework that helps you decouple & modularise your UI component into small pieces of LEGO style's bricks, to make UI development declarative, configurable and highly reusable. Wang Shen...

Understanding Automatic Reference Counting in Objective-C

Automatic Reference Counting (ARC) largely removes the burden of manual memory management, not to mention the chore of tracking down bugs caused by leaking or over-released objects! Despite its awesomeness, ARC does not let you ignore memory management altogether. This post covers the following key aspects of ARC to help you get up and running quickly. Reference Counted Memory: Quick Revision How Automatic Reference Counting Works Enabling ARC in Your Project New Rules Enforced by ARC ARC Qualifiers – Declared Properties ARC Qualifiers – Regular Variables Migrating Existing Projects to ARC Including Code that is not ARC Compliant Should I Use ARC? The Long Weekend Website

Validity Time Auto-Renewables in Sandbox

The subscription durations, sandbox durations and incentive durations of auto-renewables. Hint: In Sandbox the validity time differs from live environment!!! Durations Sandbox Duration Incentive Durations (optional) 7 days 3 minutes 7 days 1 month 5 minutes 7 days, 1 month 2 months 10 minutes 7 days, 1 month 3 months 15 minutes 1 month 6 months 30 minutes 1 month, 2 months 1 year 1 hour 1 month, 2 months, 3 months After 6 extensions the abo is cancelled automatically in the sandbox environment.

App Indexing

A better search experience for apps and users with linking to in-app content. Google is working with app developers and webmasters to index the content of apps and relate them to websites. When relevant, Google Search results on Android will include deep links to apps. App Indexing

PlistBuddy

If you want to generate a Plist within the shell script: The PlistBuddy command is used to read and modify values inside of a plist. Unless specified by the -c switch, PlistBuddy runs in interactive mode. Apple PlistBuddy ManPage

Google Drive versus Dropbox

MacWorld: Online Storage Face-Off: Google Drive vs. Dropbox