The future of iOS development with Flutter
Our recent accomplishments and future priorities for making Flutter a better tool for developing iOS apps
Since its launch in 2017, Flutter has quickly become a top choice for iOS app development. Developers worldwide love Flutter. Using Flutter, they can code once and deploy their apps to iOS, Android, web and desktop. This has led to a massive following, with over a million apps built using Flutter.
For iOS developers who value innovative design, Flutter has become a go-to platform. By providing a blank canvas, Flutter gives designers endless possibilities. They can create original experiences that break free from pre-set design systems.
Today, I want to tell you about some recent improvements to Flutter and our future focus areas for iOS developers. If you’re a pro or new to Flutter, read on to learn about the future of Flutter for iOS.
Notable Flutter iOS apps
Flutter has seen success across various industries and categories for iOS development. Large enterprises like BMW, Sonos, and Nubank build their digital experiences with Flutter.
Tech giants like WeChat and PUBG MOBILE use Flutter to support over one billion active users. Smaller companies have also capitalized on Flutter’s quick development cycle. One example would be BrickIt which uses machine learning to suggest new LEGO brick creations.
Apple and other tech leaders have even recognized Flutter iOS apps. Wonderous, Flutter’s reference app, was nominated for a Webby in design. Apple accepted Reflection.app to its prestigious accelerator program. So Vegan was awarded Apple’s App of the Day several times.
Flutter’s iOS support has been a top priority. We’ve made significant improvements in recent releases. Let’s review some highlights:
Impeller, our purpose-built rendering engine, now serves as the default for Flutter on iOS. Impeller has been a multi-year journey for our team. It addresses the top concerns for iOS developers leveraging Flutter: smooth graphics and top tier performance. Since its release, we’ve seen great improvements in app quality. More recently, enhancements to Flutter’s engine continue to improve startup latency and reduce app size.
Impeller also simplifies adding new features. These features range from wide gamut image support to custom rendering solutions. We demonstrated one such custom rendering solution, a proof of concept for 3D support, at Flutter Forward.
Developer Experience Enhancements
We understand the challenges of building and releasing an iOS app. To save help save developer’s time, we’ve added new tools and resources to simplify the entire process. You can now connect to iOS devices over Wi-Fi to test and debug your app. We’ve also added validation to the release process. This step ensures that you took all necessary steps before releasing your app to the App Store.
In addition, we’ve created iOS-focused documentation and tutorials to help developers learn Flutter and build iOS apps. We’ve incorporated Swift and SwiftUI examples into our documentation. We added guides on moving from Swift to Dart, SwiftUI to Flutter and adding Flutter to an existing iOS app. We’ve also added resources for supporting flavors on iOS and using iOS app extensions like home and lock screen widgets.
iOS-style UI ComponentUpdates
The Cupertino library provides widgets (UI components) resembling SwiftUI and UIKit views. This should make your app feel right at home on Apple devices. To better align with the latest iOS design guidelines, we’ve made significant updates to our Cupertino library.
We’ve addressed top-voted issues and added new widgets like CupertinoCheckbox, CupertinoRadio, CupertinoListTile and spell check support on text input fields.
In addition, we recognize the importance of cross-platform design. We’ve added adaptive constructors to several Material widgets. This allows your Flutter app to adapt between Android and iOS design conventions. For common widgets without adaptive constructors, we’ve created preliminary guides to give you code snippets to adapt entire widgets or widget properties.
As we continue to make Flutter a better tool for iOS developers, we’re focusing on a few key areas:
Integrations with the Apple ecosystem
Flutter developers should be able to easily use Apple’s APIs in their apps. This allows them to create immersive experiences that integrate all of Apple’s great offerings.
A few months ago, we launched FFIgen. This tool generates bindings to call Objective-C and Swift APIs directly from Dart code. Some apps are using FFIgen to call Apple’s APIs now. But, there are still limitations. We’re actively working on making the tool more robust with support for async callbacks and better Swift interop.
Furthermore, we know the importance of app extensions within the iOS ecosystem. That’s why we’re developing a way to create the user interface (UI) for some extensions using Flutter. This will enable developers to reuse components from their Flutter app to design their extension’s interface. It’s worth noting that this approach won’t work for all types of extensions. WidgetKit widgets, for instance, have strict API restrictions. However, it will work for other common extensions such as Share or iMessage. To keep up with our progress, you can follow this work in this Flutter Github issue.
Deploying your app across multiple platforms requires some design considerations. There’s a balance between customizing the design of UI components to match your brand, while adhering to platform conventions.
As such, we’re investigating ways to improve the experience for designing and building Flutter apps. First, we want to make Flutter’s out-of-the-box UI components more flexible. This way, developers can quickly customize widgets to match their own design systems. Second, we want to leverage more automated adaptations that make Flutter apps feel natural on both iOS and Android.
We’re committed to improving the iOS developer experience with Flutter. One key focus is decreasing build times to improve developer productivity. Additionally, we’re addressing long-standing requests such as the ability to rename the Runner app. Finally, we’ll continue to prioritize performance enhancements and general iOS fidelity.
Send us your feedback
As an open source project, you can track our progress on GitHub. We may add, prolong, or defer features based on what we learn and what you tell us.
As always, we value your feedback and appreciate your support! The best way to send us your input is by filing issues in GitHub and filling out our quarterly user survey. You can stay up to date on future Flutter iOS work by following me on Twitter.