App Identity
App Identity Configuration
Section titled “App Identity Configuration”This guide covers changing the fundamental identity of your app: the name, package identifier, and core configuration settings.
Step 1: Choose Your App Identity
Section titled “Step 1: Choose Your App Identity”App Name Requirements
Section titled “App Name Requirements”- Length: 2-30 characters for most app stores
- Uniqueness: Check availability on Google Play and App Store
- Clarity: Should clearly indicate the app’s purpose
- Trademark: Ensure no trademark conflicts
Package Name Guidelines
Section titled “Package Name Guidelines”- Format: Reverse domain notation (e.g.,
com.yourcompany.yourapp) - Uniqueness: Must be unique across all app stores
- Characters: Only lowercase letters, numbers, underscores, dots
- Stability: Cannot be changed after app store publication
Example: If your company is “SecureAuth” and app is “AuthGuard”:
- App Name: “AuthGuard”
- Package Name:
com.secureauth.authguard
Step 2: Android Configuration
Section titled “Step 2: Android Configuration”android/app/src/main/AndroidManifest.xml
Section titled “android/app/src/main/AndroidManifest.xml”<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Permissions remain the same --> <uses-permission android:name="android.permission.CAMERA" /> <!-- ... other permissions ... -->
<application android:label="Your App Name" <!-- UPDATE THIS --> android:name="${applicationName}" android:icon="@mipmap/ic_launcher">
<!-- Activity configuration --> <activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:taskAffinity="" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
<!-- Standard launch intent --> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter>
<!-- Deep links - update with your scheme --> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="yourapp" /> <!-- UPDATE THIS --> </intent-filter> </activity>
<!-- Flutter metadata --> <meta-data android:name="flutterEmbedding" android:value="2" /> </application>
<!-- Hardware features remain the same --> <uses-feature android:name="android.hardware.camera" android:required="true" /> <!-- ... other features ... --></manifest>android/app/build.gradle.kts
Section titled “android/app/build.gradle.kts”plugins { id("com.android.application") id("com.google.gms.google-services") id("kotlin-android") id("dev.flutter.flutter-gradle-plugin")}
android { namespace = "com.yourcompany.yourapp" // UPDATE THIS compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion
compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 }
kotlinOptions { jvmTarget = JavaVersion.VERSION_11.toString() }
defaultConfig { applicationId = "com.yourcompany.yourapp" // UPDATE THIS minSdk = 23 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName }
buildTypes { release { // Add your signing config here later signingConfig = signingConfigs.getByName("debug") } }}
flutter { source = "../.."}iOS Configuration
Section titled “iOS Configuration”ios/Runner/Info.plist
Section titled “ios/Runner/Info.plist”<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key> <string>Your App Name</string> <!-- UPDATE THIS -->
<key>CFBundleExecutable</key> <string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key> <string>6.0</string>
<key>CFBundleName</key> <string>your_app_name</string> <!-- UPDATE THIS -->
<key>CFBundlePackageType</key> <string>APPL</string>
<key>CFBundleShortVersionString</key> <string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key> <string>????</string>
<key>CFBundleVersion</key> <string>$(FLUTTER_BUILD_NUMBER)</string>
<!-- ... other iOS configuration ... -->
<!-- Deep links configuration --> <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>yourapp</string> <!-- UPDATE THIS --> <key>CFBundleURLSchemes</key> <array> <string>yourapp</string> <!-- UPDATE THIS --> </array> </dict> </array>
<!-- Required permissions --> <key>NSCameraUsageDescription</key> <string>This app needs camera access to scan QR codes for importing OTP accounts.</string>
<key>NSFaceIDUsageDescription</key> <string>This app uses Face ID for secure authentication to protect your OTP accounts.</string>
<!-- ... rest of configuration ... --> </dict></plist>ios/Runner.xcodeproj/project.pbxproj
Section titled “ios/Runner.xcodeproj/project.pbxproj”Update the bundle identifier in Xcode:
- Open
ios/Runner.xcodeprojin Xcode - Select the “Runner” project in the navigator
- In “General” tab, update:
- Display Name: Your App Name
- Bundle Identifier: com.yourcompany.yourapp
Step 3: Update In-App Text
Section titled “Step 3: Update In-App Text”About Page Text
Section titled “About Page Text”Find and update files containing app information:
// In about or settings pagesText('About Your App Name'),Text('Your App Name is a secure OTP authenticator...'),Error Messages and Dialogs
Section titled “Error Messages and Dialogs”Update any hardcoded references to “Lumo” in:
- Error messages
- Dialog titles
- Help text
- Notification messages
Step 4: Verification Steps
Section titled “Step 4: Verification Steps”1. Build Test
Section titled “1. Build Test”# Test Android buildflutter build apk --debug
# Test iOS build (macOS only)flutter build ios --debug2. Check App Display
Section titled “2. Check App Display”- Verify app name appears correctly in:
- App launcher
- Settings > Apps
- Recent apps list
3. Deep Links Test
Section titled “3. Deep Links Test”Create a test HTML file to verify deep links work:
<!DOCTYPE html><html><body> <a href="yourapp://test">Test Deep Link</a></body></html>Common Issues & Solutions
Section titled “Common Issues & Solutions”Build Errors
Section titled “Build Errors”Issue: “Package name conflict”
# Solution: Clean and rebuildflutter cleanflutter pub getflutter build apk --debugIssue: iOS bundle identifier errors
# Solution: Clean iOS buildcd iosrm -rf build/cd ..flutter cleanflutter build ios --debugRuntime Issues
Section titled “Runtime Issues”Issue: App crashes on launch
- Check that all references to old package name are updated
- Verify Firebase configuration matches new package name
Issue: Deep links not working
- Verify URL scheme is correctly configured
- Test with both
adb(Android) and simulator (iOS)
Testing Checklist
Section titled “Testing Checklist”- App builds successfully for both platforms
- App name displays correctly in launcher
- Deep links work with new scheme
- No references to “Lumo” remain in UI
- Package name is unique and follows conventions
- Firebase configuration updated (next step)
Next Steps
Section titled “Next Steps”Once your app identity is configured:
- Icons & Assets - Update visual assets
- Firebase Setup - Configure backend services
- App Store Configuration - Prepare for distribution
Your app now has its own unique identity! 🏷️