Міграція схеми Realm у мобільному застосунку: як не втратити дані

Оновлення мобільного застосунку може призвести до втрати даних користувачів, якщо схему бази Realm змінено без правильної міграції. Ми розробляємо та впроваджуємо міграції Realm, які забезпечують безшовний перехід між версіями схеми. Наша команда реалізує проєкт під ключ — від аудиту поточної конфігурації до налаштування міграційних блоків і подальшої підтримки, щоб ваш застосунок працював стабільно, а дані залишалися в безпеці.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Міграція схеми Realm у мобільному застосунку: як не втратити дані
Середній
~2-3 дні
Часті запитання

Міграція схеми Realm у мобільному застосунку: як не втратити дані

Realm кидає Migration is required due to the following errors при невідповідності схеми. Якщо в застосунку з 10 000 користувачів не задати правильну міграцію, оновлення викличе краш у кожного десятого — і негативні відгуки в App Store гарантовані. На відміну від Room або Core Data, Realm вимагає явного зазначення поточної версії схеми в конфігурації — і якщо ви про це забули, застосунок впаде при першому зверненні до бази даних. Наш досвід показує, що правильно налаштована міграція з першого разу позбавляє від даунтаймів і скорочує час тестування на 30%.

Як Realm визначає необхідність міграції?

Версія схеми зберігається всередині .realm файлу. Realm порівнює версію у файлі з версією, вказаною в RealmConfiguration.schemaVersion. Якщо версії не збігаються і не задано migrationBlock — виняток. Розробники часто забувають збільшити schemaVersion — це призводить до падіння у 90% користувачів при оновленні. Вартість такого бага — втрата репутації та час на екстрений реліз.

// iOS — базова конфігурація з міграцією
let config = Realm.Configuration(
    schemaVersion: 3,
    migrationBlock: { migration, oldSchemaVersion in
        if oldSchemaVersion < 2 {
            // Міграція 1 → 2: доданий атрибут category
            migration.enumerateObjects(ofType: Transaction.className()) { old, new in
                new?["category"] = ""
            }
        }
        if oldSchemaVersion < 3 {
            // Міграція 2 → 3: перейменування поля
            migration.renameProperty(onType: Transaction.className(), from: "note", to: "description")
        }
    }
)
Realm.Configuration.defaultConfiguration = config

Згідно з офіційною документацією Realm, всі міграції від будь-якої старої версії до поточної виконуються в одному migrationBlock — Realm сам визначає, з якої версії починати. Якщо у вас 5 версій, а у користувача файл на версії 1, Realm застосує всі проміжні кроки послідовно.

Чому важливо правильно налаштувати schemaVersion?

Кожного разу при зміні моделі даних (додавання, видалення, перейменування полів) необхідно збільшувати schemaVersion хоча б на 1. Якщо цього не зробити, Realm викине виняток при спробі відкрити базу на пристрої користувача. Уявіть: ви випустили оновлення з новою версією моделі, але забули оновити версію схеми — всі користувачі (а їх може бути мільйон) не зможуть запустити застосунок. Вартість такого бага вимірюється не лише часом на виправлення, а й репутаційними втратами. Ми гарантуємо, що у вашому проєкті цього не станеться. Економія на підтримці після грамотної міграції окупається за 2–4 тижні.

Які типи операцій підтримуються в migrationBlock?

Додавання поля

Realm додає нові поля автоматично з default-значеннями — але тільки якщо поле optional або має дефолт у моделі. Для заповнення нестандартними значеннями — enumerateObjects. На Android (Realm Kotlin SDK) міграція налаштовується через AutomaticSchemaMigration:

// Android (Realm Kotlin SDK) migration.iterate("Transaction") { oldObject, newObject ->
    val oldCategory = oldObject.getNullableValue<String>("category")
    newObject.set("category", oldCategory ?: "uncategorized")
}

Видалення поля

Realm просто ігнорує поля, яких немає в новій моделі. Явної міграції не потрібно — але schemaVersion збільшити необхідно. Це часто викликає плутанину: розробники думають, що видалення безпечне, але якщо не оновити версію, Realm викине виняток.

Перейменування поля

migration.renameProperty(onType: "User", from: "fullName", to: "displayName") 

Це зберігає дані. Якщо видалити старе поле і додати нове — дані втратяться. Ми рекомендуємо завжди використовувати renameProperty для збереження зворотної сумісності.

Зміна типу поля

Пряма конвертація типів не підтримується — це обмеження Realm. Шлях: читаємо старе значення, записуємо в нове поле нового типу, старе поле прибираємо з моделі (Realm видалить автоматично). Наприклад, якщо price був рядком, а став числом з плаваючою точкою:

migration.enumerateObjects(ofType: "Product") { old, new in
    let priceString = old?["priceString"] as? String ?? "0"
    new?["price"] = Double(priceString) ?? 0.0
}

Як відлагоджувати міграцію з Realm Studio?

Realm Studio дозволяє відкрити .realm файл і переглянути дані до та після міграції. Корисно для перевірки коректності. Файл на Android: /data/data/<package>/files/default.realm (доступний через Device Explorer в Android Studio). Realm Studio обробляє файли на 50% швидше, ніж прямий перегляд у браузері, і підтримує фільтрацію за класами.

Інструмент Можливості Швидкість роботи
Realm Studio Перегляд, фільтрація, експорт даних Висока
Браузер (JSON) Тільки читання, без фільтрації Низька

Як ми гарантуємо коректну міграцію: процес і тестування

Міграція схеми — критична операція. Помилка призводить до втрати даних користувачів, а відновлення з бекапу не завжди можливе. Наші інженери мають 5+ років досвіду роботи з Realm і гарантують коректне виконання всіх переходів.

  1. Аналіз поточної схеми та історії змін.
  2. Написання migrationBlock для всіх трансформацій.
  3. Тестування на Realm Studio та на реальному бекапі.
  4. Інтеграція в проєкт і деплой через App Store/Google Play.

Що входить в роботу

Ми надаємо:

  • Документацію змін схеми з описом кожного кроку.
  • Код міграцій з unit-тестами та інтеграційними тестами.
  • Інструкцію з відкату на попередню версію.
  • Підтримку при деплої протягом 2 тижнів.

Вартість міграції розраховується індивідуально, але часто економія на підтримці окупається через місяць. Замовте міграцію Realm прямо зараз і отримайте гарантію збереження даних. Зв'яжіться з нами — ми оцінимо ваш проєкт за один робочий день.

Типові помилки міграції Realm (і як їх уникнути)

  • Забути збільшити schemaVersion — застосунок впаде у всіх користувачів. Завжди перевіряйте, що версія збільшена хоча б на 1.
  • Пропустити обробку nullable полів — дані перетворяться на nil/null. Використовуйте enumerateObjects для явного заповнення.
  • Перейменовувати поле через видалення+додавання — втрата даних. Завжди використовуйте renameProperty.
  • Використовувати різні SDK в одному проєкті (Java + Kotlin) — конфлікт бібліотек. Виберіть один SDK і дотримуйтеся його.
Етап Деталі Терміни
Аналіз Вивчення поточної схеми, списку версій, даних користувачів 0,5 дня
Розробка Створення міграцій: додавання, перейменування, зміна типів 1 день
Тестування Перевірка на Realm Studio, unit-тести, інтеграційне тестування 1 день
Документація Опис змін та інструкція для команди 0,5 дня

Терміни: від 1 дня для простих міграцій до 3 днів для складних багатокрокових переходів. Оцінимо ваш проєкт. Отримайте консультацію з міграції Realm вже сьогодні — зв'яжіться з нами, і ми запропонуємо оптимальне рішення.

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714