Let’s look at the top three platforms and what makes them unique: iOS, Android, and Flutter
At Bottle Rocket, we pride ourselves on knowing the latest and greatest technologies and creating technology-based solutions that help our clients stay connected to their customers. Although there are a wide variety of development platform options to consider when building a mobile experience for your employees and customers, we decided to focus on the three top platforms and provide an expert review of each. Let’s look at iOS, Android and Flutter.
Native iOS: Building a Delightful Present and a Scalable Future
By Will McGinty, iOS Developer, Bottle Rocket
A Brief History
On March 6th, 2008, a year since the original iPhone announcement, Apple was back with another major event. The first iteration of the iPhone was revolutionary; combining an iPod and a mobile phone with internet communications and a multi-touch user interface that radically shifted the world of technology. Apple offered a web-based strategy for creating iPhone apps, but businesses were hesitant.
Everything changed with the introduction of the iPhone SDK, giving developers the freedom to create apps just like Apple’s, and to distribute them from a centralized marketplace. Over the years, the success of the iPhone has attracted many other ways to build apps, including single code-base solutions like Flutter, React Native and Xamarin. So, how does native development hold up?
What sets iOS apart from other platforms?
Building an application “natively” means using Apple’s own frameworks and programming languages. Swift, the primary language used to build apps for Apple’s platforms, is built with a modern approach to safety and performance. It is optimized to extract the most out of modern hardware and designed to eliminate substantial amounts of common programming errors. Every nuance is designed with the end goal of making it easier to produce high-quality, maintainable, impactful applications across Apple’s ecosystem of devices.
Apple’s frameworks have seen years of scrutiny, maintenance, and improvement. Because Apple uses these frameworks themselves, there are continuous stability advances being made, and new features being added that all feel innate to the user’s device.
User interfaces are core to every application. Apple has accordingly spent an extraordinary amount of time cultivating two incredibly capable, complementary UI frameworks – UIKit and SwiftUI. UIKit has been present on the iPhone since its inception. Over the years it has gained thousands of new capabilities and is suited to building finely tuned, customized interfaces. Introduced in 2019, SwiftUI’s declarative style is perfectly suited to building more standard interfaces quickly, and its built-in animation engine allows for opportunities to surprise and delight users.
Between UIKit, SwiftUI, and numerous other system frameworks that power experienceslike the device’s camera, augmented reality and computer vision, there exists a tool for every job.
Feeling At Home
Web-based apps never gained massive popularity because they did not feel completely natural on the iPhone. Nobody has time to accommodate for a poor user experience. Everyone expects a reliable, intuitive, and delightful user experience that feels like it belongs. A user may not be able to point out what is wrong, but they will know something is. A user can feel when scrolling isn’t perfect… when navigation doesn’t match their instinct… when an animation doesn’t feel right. The functionality of an app is the bare minimum, but the experience can set an app apart from its peers.
It is more important now than ever before that iOS apps follow Apple’s human interface guidelines and adhere to common system patterns. Users should not have to spend time learning how to use your app, they should just intuitively know how. When deviations from these system norms occur, it only increases the likelihood that a user won’t be your user for long.
In recent years, both iOS and Android have begun to diverge. In order to keep users inside their ecosystem, both have put an added emphasis on the entire experience – the application itself is no longer enough. The revamped lock screen in iOS 16 saw an adoption rate over 40% in just 8 weeks. App Clips offer an introductory period to an application, circumventing the clumsy process of finding apps on the store. Integrations with Siri allow users immediate access to their favorite features. While early adopters of these technologies may have used them as a differentiating factor, they have now become table stakes.
These technologies often require a deeper level of integration with the device. Widgets, for example, need consistently up-to-date information, but without taxing the device’s battery. This higher level of integration brings with it a more rigorous set of technical requirements. For example, the recent additions to the lock and home screens, widgets and live activities, require the usage of SwiftUI.
So, why is native the best way to build a first-class mobile iOS experience? The programming language itself is tailor-made for the platform and was designed for the creation of rich, delightful apps. The UI frameworks complement each other and are equally capable of building a to-do list as they are a complex, custom experience; all the while maintaining standard platform paradigms and making users feel comfortable.
Lastly, building natively does not require any large dependencies that inevitably come with a technical cost. This cost can come in the form of bugs, or even restrictions on the platforms, devices or features you can build upon. If you are looking to build the best possible experience for now, while still setting yourself up for the future, the choice is clear.
Native Android: Understanding the Planet’s Largest Platform
By Harish Patel, Android Developer, Bottle Rocket
A Brief History
It starts with a mission. Google’s mission since 2001 has been “to organize the world’s information and make it universally accessible and useful”. As a part of this mission, Google knew they needed a flexible, near universal solution that allowed them to be present wherever their users were in a way that felt natural and normal. In 2005, Google strategically invested in the future of information engagement by purchasing the Android operating system, enabling them to know and serve their users better by being a part of their daily lives.
Founded in 2003, Android was focused on creating an operating system for digital cameras and had recently made the transition to smart phones. Two years later, they announced the Open Handset Alliance, a mix of mobile hardware, software, and carrier companies whose goal was to create
a the “first truly open and comprehensive platform for mobile devices.” The first ever Android OS device was released in 2008 and the platform has been gaining in popularity ever since. ,
Today, the Android platform is the most popular in the world, with 2.5 billion active users spanning 190 countries. Users can choose from over 3 million apps available on the store, which have been downloaded 108 billion times. Android achieved its goal of universality, and this is what truly sets it apart from other platforms.
The Android Platform from Google has a unique navigation pattern that can be run on a wide range of form factors made by different device vendors. Android’s open system provides multiple device manufacturers the flexibility to use as-is or add their own enhancements. UI development is abstracted to work for devices of various screen sizes, resolutions, and aspect ratios.
The platforms targeted by Android cover everything from top-tier flagship phones to commodity tablets and even small wearable devices. Google’s Pixel flagship line of phones, watches, and tablets are built using their custom Tensor chip with machine learning (ML) capabilities. Samsung devices make up about two thirds of the share of global Android market and have recently forayed into foldable devices.
Android’s Material Design system makes creating user interfaces for these various devices in a cohesive way possible. The Kotlin language makes developing applications straightforward. And Google’s Jetpack libraries make programming much, much more efficient.
Day to Day Development
Incredibly flexible and adaptable, the Android OS allows device manufacturers to explore new hardware offerings and makes developing bespoke, but familiar user experiences possible. Native Android development includes Google’s Jetpack libraries. Jetpack Compose makes UI development 40% faster, supporting various screen sizes, pagination, navigation, animations and more.
There is also an ecosystem of proven third-party native only libraries (healthcare, hospitality, etc.) that speed up development. Android OS provides easy integration with hardware (NFC, Bluetooth, Location services, geo fences, sensors) and optimization for memory, performance, and battery life. Google Play store provides pre-launch reports, accessibility reviews and flags security vulnerabilities in native code prior to release. Every year there are new features (Instant Apps, Home Widgets), as well as new hardware (foldable devices, Pixel Watch, Wear OS, tablets), and integrations with Samsung and Fitbit devices. It also offers integration with voice commands to communicate with Google’s ecosystem of devices, as well as IOT devices.
Native development is a breeze with Google’s Android Studio. It provides enterprise-grade debugging tools which improves developer efficiency and delight
s. Platform specific adjustments become easy while maintaining code quality. Accessibility support has increasingly been a requirement for client experiences and native development provides easier access to keyboard and swipe events to achieve it.
Google has introduced many new platform concepts that native development can use. Here are some new features announced in recent Google IO and developer summit events:
- Ambient Computing (seamless user session transition from any of the Google Ecosystem of devices)
- Google Wallet (boarding passes, digital membership or ID cards, and venue passes)
- Material Design / Material You (individualized styling of experiences)
These well tested native support mechanisms help achieve a smoother experience for developers and users. Google has created a platform for continual innovation, and they deliver tools for developers to take advantage of it.
From the HTC Dream device back in 2008 to the Google flagship Pixel devices, the Android world has flourished in terms of devices and excellent libraries, tools, integrations to build rich experiences for our clients. We look forward to working on natively developed experiences such as speech recognition, AR based Google Maps offerings and much more.
Understanding Flutter and the power of Single code-based solutions
By Jason Brewer, Engineering Manager – Cross Platform, Bottle Rocket
A Brief History
On December 4, 2018, three years after it was announced at a Dart development summit, Flutter 1.0 was released. By this time, it had caught the curiosity of developers chasing the elusive multi-platform, true single code-case solution.
Instead of relying on web-based technologies or a translation layer to native components, Flutter compiled to native and rendered direct to the screen. This provided the native performance previous solutions lacked – and most importantly, true single code base.
But the biggest factor in its popularity growth with developers was the focus placed on developer experience. Solid tooling consistent with native development flows, high quality up to date documentation, a Flutter Favorites third-party packaging ecosystem scored for quality and popularity, and infrastructure tools for performance, memory, quality, and accessibility analysis. For the first time, developers had a cross-platform solution that worked with them and not against them. They could develop with Flutter as efficiently as they developed natively, target multiple platforms, and not compromise on performance.
What is Single Code Base?
Cross-platform does not necessarily mean single code base. Solutions that use a translation layer to native components are hybrid stacks – part cross-platform, part native. While this can work for an initial release, maintenance can be a nightmare, as all these different pieces evolve and there are multiple dependencies that may be out of a developer’s control.
Behaviors of such solutions also vary across platforms. Even though the application code may be common per platform, the system solution is not. Thus, the cost savings of cross-platform is diminished. Flutter is not hindered by these translation layers, so can be considered true single code base from application to display.
While single code base is possible in Flutter, it is not limited to that. Flutter offers different flavors of UI widgets to allow tailoring to the specific underlying platform – Cupertino widgets for iOS and Mac, Material for Android and Web, and Fluent UI provided by Microsoft for Windows. This allows product development teams to prioritize features, efficiency, cost, or platform specific UIs as their current business needs require.
Flutter is open source with over 1,000 contributors, ensuring regular updates and improvements. Unlike native platforms, Flutter developers can debug into the very platform code to root cause and solve the various issues faced. There is no black box.
Product vs. Platform
By focusing on the product vs. the platform, developers could invest all of their effort on product features, instead of multiple teams developing the same feature set on individual platforms. Every developer is working on advancing the product feature roadmap.
The most effective Flutter teams are built with Flutter developers that have a native background in the targeted platforms. They can advise when a UX decision might alienate certain platform users and when necessary to tweak the code base per platform. This is similar to how websites layout differently based on screen size and ratio or how mobile screens behave one way on mobile and another on tablet.
The user experience should never distract from the value of product features. Flutter does not prevent achieving beautiful native experiences. The Flutter app, Reflectly, was even featured in the Apple App Store as App of the Day.
While platform providers continue to innovate with new features, the Flutter third-party ecosystem continues to provide solutions that wrap these in Flutter APIs. Sign In, wallet, payments, Bluetooth, ML vision—all have Flutter solutions. Flutter also provides the ability to implement hybrid flows – a native flow implemented in native iOS or Android code that is integrated into Flutter.
Native apps looking to leverage the efficiency of Flutter begin to add hybrid Flutter flows into a native app experience to reignite the velocity in their product roadmap.
So, what sets Flutter apart from other product development options?
- Performance of native binary
- Efficiency of fast development cycles with hot reload, packages
- Flexibility to target your product to any screen in front of your users
The biggest differentiator is the true value of a single code base—simultaneous feature parity releases. Flutter provides a single team focused on value-added features specific to your business and independent of your target platform.
- Innovative hardware and software
- Established platform-specific design patterns
- Manufacturer supported SDKs
- Decade-plus history of development
- Build once, ship for all devices
- Driven by open-source community
- Similar performance to native
- Single team per project