Код-ревью Middle Expo и bare обновлено

Код-ревью: конфигурация Expo-проекта

Вопрос

Фрагмент app.config.ts и кода приложения в проекте на CNG. Найдите проблемы.

export default {
  name: 'Shop',
  ios: { bundleIdentifier: 'com.shop.app' },
  android: { package: 'com.shop.app' },
  extra: {
    apiUrl: process.env.EXPO_PUBLIC_API_URL,
    stripeSecret: process.env.EXPO_PUBLIC_STRIPE_SECRET,
  },
  plugins: [],
};

// после prebuild вручную добавлено в android/app/src/main/AndroidManifest.xml:
// <uses-permission android:name="android.permission.CAMERA" />

// App.tsx
const isDev = true;

Коротко

При CNG вся нативная конфигурация живёт в app.config.ts и плагинах, окружения разводятся переменными и профилями EAS, в публичные переменные попадает только то, что не жалко показать.

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

  1. Стильстрока 3
    Один идентификатор для всех окружений: dev и prod нельзя поставить на одно устройство, dev-сборка может перезаписать боевую. Вычислять идентификатор по переменной окружения.
  2. Безопасностьстрока 7
    Секретный ключ платёжного провайдера в EXPO_PUBLIC_*: он попадёт в бандл. Секреты только на сервере.
  3. Ошибкастрока 13
    Ручная правка манифеста при CNG пропадёт при следующем prebuild. Разрешение задаётся в android.permissions или плагином библиотеки камеры.
  4. Ошибкастрока 16
    Флаг isDev захардкожен и уйдёт в релиз. Использовать __DEV__ или переменную окружения сборки.

Разбор

При CNG вся нативная конфигурация живёт в app.config.ts и плагинах, окружения разводятся переменными и профилями EAS, в публичные переменные попадает только то, что не жалко показать.

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

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

Термины по теме