В чем различие между вшитым и удаленным конфигом в мобильном приложении?
Что проверяют
Понимаете ли вы, откуда приложение берёт настройки и как это меняет тестирование: какие сценарии появляются, когда часть поведения приходит с сервера. Следом обычно спрашивают, как вы проверите, что приложение не сломается без сети или со старым конфигом.
Как отвечать
Вшитый конфиг собирается вместе с приложением: BuildConfig и ресурсы в Android, Info.plist и .xcconfig в iOS, JSON в ассетах. Он доступен сразу и без сети, но любое изменение означает новую сборку, ревью в магазине и ожидание, пока пользователи обновятся. Так обычно живут адреса окружений, ключи SDK и значения по умолчанию.
Удалённый конфиг приложение запрашивает с сервера: Firebase Remote Config, сервис фича-флагов или свой эндпоинт. Через него включают функцию на процент аудитории, проводят A/B-тесты, выключают сломанную функцию без релиза, показывают экран принудительного обновления.
На практике они работают вместе: в сборке лежат значения по умолчанию, поверх них применяется загруженный конфиг, последний полученный кешируется. Для QA отсюда набор проверок:
- первый запуск без сети: приложение стартует на дефолтах и не висит на загрузке;
- кеш: при недоступном сервере применяется сохранённый конфиг, а новый подхватывается в ожидаемый момент, часто только при следующем запуске;
- битые данные: неверный JSON, отсутствующий ключ, строка вместо числа;
- совместимость: старая версия приложения получает конфиг, рассчитанный на новую;
- таргетинг: условия по версии, платформе, региону, проценту раскатки.
Подменять ответ удобно через Charles или Proxyman либо через отладочное меню, если разработчики его сделали.
Где спотыкаются
Считают вшитый конфиг безопасным местом для секретов. APK и IPA распаковываются, строки из них достаются за минуты, а удалённый конфиг клиент тоже видит целиком. Секретам место на сервере.
Проверяют только счастливый путь с живым сервером и забывают про офлайн и кеш.
Не учитывают момент применения: поменяли флаг в консоли, не увидели эффекта и завели баг, хотя конфиг применится при следующем запуске или после интервала загрузки.