White-Label App Brand Customization for Client
Ready white-label app delivered to new client—adapt to brand identity: replace logo, colors, fonts, onboarding screens, splash screen. Sounds simple, but without proper resource structure becomes hours searching hardcoded colors.
What Changes on Rebranding
Visual Identity
App Icon. iOS needs 15+ sizes for all devices and App Store. Modern approach—one AppIcon.appiconset with 1024×1024 source and auto-generation via Xcode or Fastlane appicon. Android—adaptive icon (mipmap-anydpi-v26/ic_launcher.xml) with foreground and background layers: brand background + logo.
Color Scheme. All colors in colors.xml (Android) or Assets.xcassets → Color Set (iOS). Hardcoded hex values in layout or code—sign rebranding takes days instead hours.
<!-- Android: res/values/colors.xml for tenant -->
<resources>
<color name="color_primary">#1A73E8</color>
<color name="color_secondary">#FB8C00</color>
<color name="color_error">#B00020</color>
</resources>
Fonts. Brand font via res/font/ (Android) or Info.plist UIAppFonts (iOS). If paid—check license for mobile use (Desktop/Web license doesn't cover app embedding).
Texts and Localization
All brand-name text, slogans, descriptions—in tenant strings.xml / Localizable.strings. No hardcoded strings in common code.
Splash screen text, onboarding texts, tab bar title—all override without code change.
Onboarding and Splash Screens
Splash on iOS via LaunchScreen.storyboard (or Launch Screen in Info.plist for SwiftUI). Android via SplashScreen API (Android 12+) with brand icon and background:
installSplashScreen().apply {
setKeepOnScreenCondition { viewModel.isLoading.value }
}
Theme for splash:
<style name="Theme.App.SplashScreen" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/color_primary</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_splash_logo</item>
</style>
Customization Checklist
| Element | iOS | Android |
|---|---|---|
| App Icon | AppIcon.appiconset | mipmap + adaptive icon |
| Colors | Assets Color Set | colors.xml |
| Fonts | Info.plist + .ttf/.otf | res/font/ |
| Strings | Localizable.strings | strings.xml |
| Splash | LaunchScreen.storyboard | SplashScreen theme |
| Bundle ID / Package | Xcode Target settings | flavor applicationId |
| Firebase config | GoogleService-Info.plist | google-services.json |
| Push entitlements | .entitlements | — |
| Deep link scheme | Info.plist URL Schemes | intent-filter |
| App Store metadata | Connect → App Information | Play Console |
Automation via Fastlane
Manual resource replacement per tenant is error-prone. Fastlane action for branding:
lane :apply_branding do |options|
tenant = options[:tenant]
brand_dir = "tenants/#{tenant}"
sh "cp #{brand_dir}/AppIcon.png fastlane/metadata/#{tenant}/app_icon.png"
sh "cp -r #{brand_dir}/assets.xcassets ios/MyApp/#{tenant}.xcassets"
update_app_identifier(
xcodeproj: "ios/MyApp.xcodeproj",
app_identifier: "com.#{tenant}.app"
)
end
fastlane apply_branding tenant:brand_b display_name:"Brand B"
fastlane ios build tenant:brand_b
Timeline
Customizing ready white-label app for new client with proper resource structure—1–3 days. Without tenant directories requiring refactoring—3–7 days. Cost calculated individually.







