Реализация миграции пользовательских настроек между версиями мобильного приложения

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация миграции пользовательских настроек между версиями мобильного приложения
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    874
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация миграции пользовательских настроек между версиями мобильного приложения

Пользователь обновил приложение — и все его настройки сбросились на дефолтные. Тема «тёмная» стала «светлой», уведомления включились заново, выбранный язык сменился на системный. Это происходит, когда в новой версии переименовали ключи в SharedPreferences / UserDefaults или изменили тип хранимого значения. Без явной миграции старые значения просто игнорируются.

Стратегия миграции UserDefaults / SharedPreferences

Основной принцип — версионирование хранилища настроек, аналогичное версионированию базы данных.

// Android
class SettingsMigration(private val prefs: SharedPreferences) {
    private val PREFS_VERSION_KEY = "prefs_version"

    fun migrate() {
        val currentVersion = prefs.getInt(PREFS_VERSION_KEY, 0)
        if (currentVersion < 1) migrateV0toV1()
        if (currentVersion < 2) migrateV1toV2()
        prefs.edit().putInt(PREFS_VERSION_KEY, CURRENT_VERSION).apply()
    }

    private fun migrateV0toV1() {
        // Переименование ключа: "dark_mode" (boolean) → "theme" (string)
        val wasDark = prefs.getBoolean("dark_mode", false)
        prefs.edit()
            .putString("theme", if (wasDark) "dark" else "light")
            .remove("dark_mode")
            .apply()
    }
}

Вызывается при первом запуске новой версии — до инициализации UI.

// iOS
class SettingsMigrator {
    private let defaults = UserDefaults.standard
    private let versionKey = "settingsVersion"

    func migrate() {
        let version = defaults.integer(forKey: versionKey)
        if version < 1 { migrateToV1() }
        if version < 2 { migrateToV2() }
        defaults.set(2, forKey: versionKey)
    }

    private func migrateToV1() {
        // Bool → String enum
        let wasDark = defaults.bool(forKey: "darkMode")
        defaults.set(wasDark ? "dark" : "light", forKey: "theme")
        defaults.removeObject(forKey: "darkMode")
    }
}

Что входит в работу

  • Аудит текущих ключей SharedPreferences / UserDefaults
  • Версионирование хранилища настроек
  • Миграторы для переименований и изменений типов
  • Запуск миграции при старте приложения до инициализации UI

Сроки

Миграция настроек для 1–2 версий: 0,5 дня. Полный аудит и цепочка миграций для нескольких версий: 1 день.