Код-ревью Middle Сборка и OTA-обновления обновлено

Код-ревью: работа с OTA-обновлениями

Вопрос

Код проверки обновлений и конфигурация. Найдите проблемы.

// app.json: "runtimeVersion": "1.0.0" (не менялся год, за это время обновили RN и добавили 3 нативные библиотеки)

export function useForceUpdates() {
  useEffect(() => {
    const id = setInterval(async () => {
      const res = await Updates.checkForUpdateAsync();
      if (res.isAvailable) {
        await Updates.fetchUpdateAsync();
        await Updates.reloadAsync();
      }
    }, 10_000);
  }, []);
}

Коротко

OTA безопасно при правильном runtimeVersion, проверке в разумные моменты, применении без прерывания пользователя и обработке ошибок. Плюс поэтапная публикация и готовый откат.

Что должен найти ревьюер

  1. Ошибкастрока 1
    runtimeVersion не меняется при изменении нативной части: новые обновления с обращениями к новым нативным модулям уйдут в старые сборки и уронят их. Нужна политика fingerprint или ручная смена при каждом изменении натива.
  2. Производительностьстрока 5
    Проверка обновлений каждые 10 секунд: лишний трафик и нагрузка на сервер. Достаточно проверки при старте и при возврате из фона.
  3. Ошибкастрока 9
    Перезагрузка сразу после загрузки обрывает действия пользователя посреди сценария (оплата, форма). Применять при следующем запуске или в безопасный момент с согласия.
  4. Ошибкастрока 6
    Нет обработки ошибок: исключение в асинхронном колбэке интервала станет необработанным.
  5. Ошибкастрока 11
    Интервал не очищается при размонтировании.

Разбор

OTA безопасно при правильном runtimeVersion, проверке в разумные моменты, применении без прерывания пользователя и обработке ошибок. Плюс поэтапная публикация и готовый откат.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.