Flutter
app development
mobile apps
app display name
Flutter build

How can I change the app display name build with Flutter?

Master System Design with Codemia

Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.

Introduction

In Flutter, app display name is configured in native platform files, not in Dart code. Changing it correctly means updating Android and iOS metadata, then rebuilding the app. If you support localization, you also need per-language name resources to keep launcher text consistent for users.

Where Display Name Is Defined

Flutter projects contain separate platform folders:

  • Android metadata under android/app/src/...
  • iOS metadata under ios/Runner/...

The visible app name in launcher or home screen comes from those native files. pubspec.yaml does not control display name for installed apps.

Android Configuration

The application label in AndroidManifest.xml usually references a string resource.

Open:

  • android/app/src/main/AndroidManifest.xml

Typical entry:

xml
1<application
2    android:name="${applicationName}"
3    android:label="@string/app_name"
4    android:icon="@mipmap/ic_launcher">
5</application>

Then set value in:

  • android/app/src/main/res/values/strings.xml
xml
<resources>
    <string name="app_name">My New App Name</string>
</resources>

Using string resource is preferred because it supports localization and flavor-specific overrides.

Android Product Flavors

If you use flavors, each flavor can have its own display name by creating flavor-specific resource files.

Example path for staging flavor:

  • android/app/src/staging/res/values/strings.xml
xml
<resources>
    <string name="app_name">MyApp Staging</string>
</resources>

This avoids confusion when both staging and production builds are installed on one device.

iOS Configuration

For iOS, app name is controlled by CFBundleDisplayName in Info.plist.

Open:

  • ios/Runner/Info.plist

Set key:

xml
<key>CFBundleDisplayName</key>
<string>My New App Name</string>

If this key is missing, iOS may fall back to bundle name. Explicitly setting it is clearer and safer.

iOS Localization

For localized app names, use InfoPlist.strings files in language-specific directories.

Example:

  • ios/Runner/en.lproj/InfoPlist.strings
  • ios/Runner/fr.lproj/InfoPlist.strings
text
CFBundleDisplayName = "My App";
text
CFBundleDisplayName = "Mon Appli";

This lets launcher name match system language.

Rebuild and Verify

After updating native files:

bash
flutter clean
flutter pub get
flutter run

For release artifacts:

bash
flutter build apk
flutter build ios

On devices, uninstall old build if launcher cache shows stale name. Some launchers keep icon labels cached across quick reinstalls.

Automating with Build Variants

Teams often automate naming by build mode or environment.

Android Gradle example:

gradle
1android {
2    buildTypes {
3        debug {
4            resValue "string", "app_name", "MyApp Debug"
5        }
6        release {
7            resValue "string", "app_name", "MyApp"
8        }
9    }
10}

iOS variants can be handled via Xcode build settings or separate xcconfig files tied to schemes.

Automation prevents accidental shipping of test app labels.

App Store and UX Considerations

Name changes can affect discoverability and user recognition. Before release:

  • Confirm name complies with Google Play and App Store policies.
  • Keep icon and naming consistent across platforms.
  • Verify truncation behavior on small screens.
  • Check right-to-left and non-Latin locales if localized.

A long display name may be clipped on home screen, so test on multiple device sizes.

Troubleshooting Checklist

If the name does not change:

  1. Confirm correct file was edited for active flavor or scheme.
  2. Ensure Android label points to intended resource key.
  3. Verify iOS CFBundleDisplayName in built app bundle.
  4. Rebuild from clean state.
  5. Reinstall app and clear launcher cache when needed.

For CI pipelines, include a step that prints resolved Android string resources and iOS plist values before signing.

Common Pitfalls

  • Editing Dart files and expecting launcher name to update. Fix by changing native Android and iOS metadata.
  • Hardcoding Android label in manifest without resource indirection. Fix by using @string/app_name for maintainability.
  • Forgetting flavor-specific resources. Fix by setting per-flavor names where needed.
  • Updating iOS plist but ignoring localized InfoPlist.strings. Fix by aligning localization strategy.
  • Skipping clean rebuild after metadata changes. Fix by running flutter clean before verification.

Summary

  • Flutter app display name is defined in native platform configuration files.
  • Android usually uses @string/app_name in manifest plus strings.xml values.
  • iOS uses CFBundleDisplayName and optional localized InfoPlist.strings files.
  • Flavors and schemes should set explicit names to avoid build confusion.
  • Rebuild, reinstall, and validate on real devices before release.

Course illustration
Course illustration