MartianCraft Staff
MartianCraft has been an iOS-focused design and development agency for well over a decade. We had three apps waiting for approval when the App Store rolled out. So yes, we are biased when it comes to native iOS development, and Swift is our gold standard.
With that said, we also understand the appeal of cross-platform development. It can seem like getting something for nothing - two apps from one development process. But at MartianCraft, we believe in doing the best work possible, building solutions that will continue to evolve alongside new devices and technologies for our clients. Technical debt is real, and we like to let our clients know the rhyme and reason for going with fully native software development—or another software language, if that is actually the better direction for their project.
Let’s dive into the benefits of native development versus third-party frameworks and why we typically conclude that native is the best direction for most projects for iOS, iPadOS, and WatchOS.
What are the Other Popular Mobile Software Development Platforms?
The cross-platform development landscape is made up of three main contenders right now: React Native, Flutter, and Xamarin.
Of the three, React Native is currently the most popular. This is likely due to two factors. First, it has Meta (formerly Facebook) as its originator and curator. Second, it can be developed with JavaScript (or TypeScript), and there is a general perception that an almost infinite number of web developers can jump right in and do mobile app development using JavaScript and the JSX layout language provided by React. And it’s true that the layout language is exactly the same format used on the web side, so it really is very easy for someone to get started with React Native if they have already been doing React. So, to some extent, the vision of what can be accomplished by web developers using React Native is valid.
Flutter is the second cross-platform framework that has been gaining a lot of popularity lately. Like React Native, it has a very large organization behind it: Google. Flutter uses the Dart language developed by Google and its Dart-to-Native compilation, which is very fast for a cross-platform development tool. It’s faster than React Native’s JavaScript bridge (although the React Native team has been working on improving its performance and, evidently, has been succeeding). Therefore, a growing number of cross-platform developers are choosing Flutter for its performance and for its UI toolkit provided by Google.
One amazing feature provided by both React Native and Flutter is “hot reloading,” by which a developer can—while the app is running in a simulator or on a device—make changes to the code and reload the app with a simple keyboard shortcut. Today, this capability is not possible in iOS. The developer has to stop the debugging session, make changes, and re-launch the app. This hot reloading feature really does accelerate productivity, since you do not have to wait for a full compile of the app, then wait for it to be pushed to the simulator or device, and finally wait for it to be relaunched. In that aspect, the experience of developing in React Native and Flutter is very much like web development, where you just need to reload your browser window to run the latest version of the code.
The third option on the list of popular cross-platform frameworks is Xamarin, which got its start as an open-source framework for .NET Linux development using Microsoft’s C# language. It quickly became a tool for mobile app development on iOS and Android and gained popularity for enterprise development of in-house applications. Its popularity makes sense: The many developers and companies currently using Microsoft’s .NET technology stack are attracted to Xamarin’s promise of cross-platform development using a familiar programming language and tools. Unlike React Native and Flutter, Xamarin is compiled into native code and then run, so it does not support hot reloading. That may seem like a strike against it, but the compensation is that code is executed at native performance. Microsoft also does an excellent job at maintaining parity with the iOS SDK—but that brings us to one of the fundamental problems inherent to all cross-platform frameworks.
The Challenges for Third-Party Mobile Software Development Frameworks
One of the challenges that all cross-platform tool vendors have to face is the fact that Apple changes its SDK every year. It deprecates certain APIs, updates and expands others, and creates entirely new frameworks—year after year. Third-party tool developers then have to wrap and adapt the functionality contained in those new APIs to conform to their frameworks. And those APIs are a moving target even after Apple releases them in June: They undergo bug fixes and reworking from June to September, when the final release of the next version of iOS is published. So if third-party developers base their adapting code on the version released in June, they know that they will have to make significant changes throughout the next three months to keep up with Apple. Alternatively, third-party developers can wait until September, when the final version is released by Apple, to update their solutions.
What is the impact to app developers using those third-party cross-platform development tools? The first obvious problem is that they can’t immediately take advantage of the new awesome features in the most recent version of iOS when the beta arrives in June. Those developers have to wait until the tool vendor can create the framework modifications necessary to enable Apple’s sexy new features. For developers supporting older versions of iOS, this may not be a problem, but the vast majority of iOS developers want to be able to play with the newest technologies, and they will have to use Xcode to do it.
The second major problem with cross-platform development tools is that they often try to be all things to everyone—and end up not feeling quite right in either platform. This is inevitable, due to the differences between the platforms and the concessions that have to be made to accommodate them both. Flutter, for example, is very opinionated and, being a Google product, encourages developers to use Google’s Material Design. But iOS users are not accustomed to the paradigms that Material Design favors. This is not a slight on Material Design, which is a good design system—it just doesn’t result in an app that feels like it was developed with iOS users in mind. React Native is a little more forgiving, but apps created with React Native still tend to feel a little awkward to iOS users, because they don’t use all native components.
The Argument for the Best Possible User Experience
At MartianCraft, we think native development is the way to build long-term, high-functioning, and secure mobile applications. Here’s why. User experience is arguably the most important aspect of building an app: If users don’t adopt it, an app is worthless. Good user experience usually comes from a complex user interface with seamless transitions, animations, and navigation. Building and scaling an application in a totally native language allows an app to flourish from a user experience perspective. For example, an app built in Swift can allow the application to access things like LiDAR with fewer lines of code and has more support from Apple rather than, say, React Native.
A native app can tap into all the latest mobile device features and functionality, taking advantage of the most current technology and keeping user adoption as high as possible. A mobile app is a digital product; if that product is a company’s revenue, the experience had better differentiate the application from competitors and add value to the user’s day-to-day life. An app begins and ends with performance—how well the app has been engineered—but the user experience will determine whether the app grows in consumer adoption.
Maintenance and Security
When building an iOS app natively, using Swift, for example, you are building it on a foundation designed by the hardware manufacturer itself. You know that you will always be able to leverage the latest device capabilities and operating system features—and you know your users will always be able to fully enjoy how seamlessly the application runs on their devices.
With third-party frameworks, there can be gaps in the bridge used to expose the capabilities of the latest iPhone and iOS. Plus, the engineer or engineering team will need to know native development to understand the APIs and access all the devices’ capabilities.
Further, fully native software development gives your app native module support, which is very important for any utility-based application, IoT app, or app relying on native device features. And one other maintenance advantage for a native-built application is the ease of updating to new versions of the app. Most mobile apps need to be updated frequently to adjust to changes in the OS and the mobile device itself.
Then there is the consideration of security. Swift code for iOS is object oriented, and object-oriented programming (OOP) results in tightly documented, highly secure code. Software languages outside of native iOS, like JavaScript, rely heavily on third-party APIs and libraries, which can make code less secure than Swift’s OOP approach.
Native app development and the maintenance of the codebase can be tedious when it comes to solving bugs one at a time. But native code—especially in iOS development—is entirely documented and supported, leading to about as strong of a codebase as you’ll find in any software.
The bottom line is that Swift was created by Apple, and it is the native language of all Apple operating systems—iOS, iPadOS, tvOS, macOS, and watchOS. As such, the multiparadigm language that Swift offers is more supported and more secure for any application on any Apple device than anything produced by a third-party framework. Plus, there is a core team at Apple that is responsible for overseeing various aspects of the language. This includes a Website Workgroup, a Documentation Workgroup, a Language Workgroup and a C++ Interoperability Workgroup. For all these reasons, Swift continues to be one of the most prominent languages in software development, not to mention within apps on the App Store—and it’s our go-to for developing apps for any Apple devices.