Кастомизация White-Label мобильного приложения под бренд клиента
Готовое white-label приложение передаётся новому клиенту — и его нужно адаптировать под фирменный стиль: заменить логотип, цвета, шрифты, экраны онбординга и splash screen. Звучит просто, но без правильной структуры ресурсов эта работа превращается в многочасовой поиск всех мест, где хардкодились цвета и строки.
Что именно меняется при ребрендинге
Визуальная идентичность
Иконка приложения. На iOS нужны иконки в 15+ размерах для всех устройств и App Store. Современный подход — одна AppIcon.appiconset с одним исходным изображением 1024×1024 и автогенерацией через Xcode или Fastlane appicon. На Android — адаптивная иконка (mipmap-anydpi-v26/ic_launcher.xml) с foreground и background слоями: фон бренда + логотип.
Цветовая схема. Все цвета должны быть вынесены в colors.xml (Android) или Assets.xcassets → Color Set (iOS). Прямые hex-значения в layout или коде — признак того, что ребрендинг займёт несколько дней вместо нескольких часов.
<!-- Android: res/values/colors.xml для конкретного tenant -->
<resources>
<color name="color_primary">#1A73E8</color>
<color name="color_primary_variant">#1557B0</color>
<color name="color_secondary">#FB8C00</color>
<color name="color_surface">#FFFFFF</color>
<color name="color_on_primary">#FFFFFF</color>
<color name="color_error">#B00020</color>
</resources>
Шрифты. Брендовый шрифт подключается через res/font/ (Android) или через Info.plist UIAppFonts (iOS). Если шрифт платный — проверяем лицензию на мобильное использование (Desktop/Web лицензия не покрывает встраивание в приложение).
Тексты и локализация
Все тексты, которые содержат имя бренда, слоганы или описания — в strings.xml / Localizable.strings в директории tenant. Никаких захардкоженных строк в общем коде.
Splash screen text, onboarding-тексты, заголовок в tab bar — всё переопределяется без изменения кода.
Экраны онбординга и splash
Splash screen на iOS реализуется через LaunchScreen.storyboard (или Launch Screen в Info.plist для SwiftUI). На Android — через SplashScreen API (Android 12+) с брендовым иконом и фоном:
// Android 12+ SplashScreen с брендовым цветом
installSplashScreen().apply {
setKeepOnScreenCondition { viewModel.isLoading.value }
}
Тема для 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>
Чеклист кастомизации нового tenant
| Элемент | iOS | Android |
|---|---|---|
| Иконка приложения | AppIcon.appiconset | mipmap + adaptive icon |
| Цвета | Assets Color Set | colors.xml |
| Шрифты | Info.plist + .ttf/.otf | res/font/ |
| Строки | Localizable.strings | strings.xml |
| Splash screen | LaunchScreen.storyboard | SplashScreen theme |
| Bundle ID / Package | Xcode Target settings | applicationId в flavor |
| 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 |
Автоматизация через Fastlane
Ручная замена ресурсов при добавлении каждого нового tenant — источник ошибок. Fastlane action для применения брендинга:
# Fastfile
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"
# Обновляем Bundle ID
update_app_identifier(
xcodeproj: "ios/MyApp.xcodeproj",
plist_path: "MyApp/Info.plist",
app_identifier: "com.#{tenant}.app"
)
# Обновляем Display Name
update_info_plist(
plist_path: "ios/MyApp/Info.plist",
display_name: options[:display_name]
)
end
fastlane apply_branding tenant:brand_b display_name:"Brand B"
fastlane ios build tenant:brand_b
Ориентиры по срокам
Кастомизация готового white-label приложения под нового клиента при правильно настроенной структуре ресурсов — 1–3 дня. Если ресурсы не были вынесены в tenant-директории и требуется рефакторинг для нескольких мест хардкода — 3–7 дней. Стоимость рассчитывается индивидуально.







