Демо Flow Lab: пример отчёта на выдуманном проекте (FieldCrew). Такой отчёт вы получите по своему приложению.
Проверка готовности к магазинам: FieldCrew
Стек: Expo ~53.0.9 · React Native 0.79.2 · TypeScript · тестов: 0 · lock-файл: yarn.lock
Идентификатор iOS: com.example.fieldcrew · пакет Android: com.example.fieldcrew
Мешает выпуску: 3 · исправить: 10 · заметки: 3. Проверка только читала файлы проекта: ничего не устанавливалось и не запускалось.
| Уровень | Раздел | Что нашли | Что сделать |
|---|---|---|---|
| 🔴 | Стек | Expo SDK 53 отстаёт от текущего SDK 57 на 4 версии. Для магазинов сейчас нужны свежие Xcode, iOS SDK и уровень Android API, а со старым SDK сборку обычно не примут. | Обновить SDK по шагам (с 53 до 57), исправить несовместимости, заново проверить. |
| 🔴 | Безопасность | .env лежит в проекте, и .gitignore не исключает файлы .env. | Убрать из репозитория, сменить ключи, добавить .env* в .gitignore. |
| 🔴 | Безопасность | В src/billing/config.ts, похоже, лежит секретный ключ (Stripe live secret key). | Перенести на сервер или в секреты EAS и сменить: всё, что попало в приложение, может прочитать любой. |
| 🟡 | Настройки | Идентификатор iOS «com.example.fieldcrew» похож на шаблонный. | Выбрать окончательный идентификатор до первой загрузки в магазин: потом его не изменить. |
| 🟡 | Настройки | Имя пакета Android «com.example.fieldcrew» похоже на шаблонное. | Выбрать окончательный идентификатор до первой загрузки в магазин: потом его не изменить. |
| 🟡 | Сборка | Нет eas.json: облачная сборка не настроена. | Добавить профили сборки EAS (разработка, тест, магазин). |
| 🟡 | App Store | Значок 512×512, а магазину нужен 1024×1024. | Сохранить значок в размере 1024×1024. |
| 🟡 | App Store | У значка есть прозрачность, а значки App Store должны быть без неё. | Положить значок на сплошной фон. |
| 🟡 | Google Play | Нет адаптивного значка Android. | Добавить adaptiveIcon: передний план и цвет фона. |
| 🟡 | App Store | Не указано, использует ли приложение шифрование, поэтому App Store Connect спрашивает об этом при каждой загрузке. | Задать ios.config.usesNonExemptEncryption (обычно false, если приложение шифрует только через HTTPS). |
| 🟡 | App Store | expo-camera используется, но не задан текст разрешения iOS (NSCameraUsageDescription), а из-за общих шаблонных текстов App Store часто отказывает (правило 5.1.1). | Написать для каждого разрешения конкретное объяснение, зачем оно нужно. |
| 🟡 | App Store | expo-location используется, но не задан текст разрешения iOS (NSLocationWhenInUseUsageDescription), а из-за общих шаблонных текстов App Store часто отказывает (правило 5.1.1). | Написать для каждого разрешения конкретное объяснение, зачем оно нужно. |
| 🟡 | Безопасность | В разделе «extra» конфигурации есть supabaseServiceKey, а всё из extra попадает внутрь приложения. | Оставить там только открытые значения. |
| ⚪ | Сборка | При установке зависимостей запускается скрипт postinstall: «patch-package» (обычный инструмент). | |
| ⚪ | App Store | Не описан манифест приватности приложения (для своих модулей Expo добавляет его сам). | Описать сбор данных и «API с обязательной причиной», если их использует приложение или подключённые библиотеки. |
| ⚪ | Качество | Автоматических тестов нет. | Перед изменениями добавить тесты на ключевую логику. |
Оценка работы до сборки, готовой к магазину: около 21 ч (исправления из таблицы + настройка EAS и первые сборки). Аккаунты магазинов (Apple Developer, Google Play) и публикация остаются на аккаунтах владельца.
План по шагам
- Убрать ключи и секреты из кода и репозитория, сменить их (до всего остального).
- Обновить Expo SDK и зависимости, исправить несовместимости, проверить приложение.
- Исправить пункты 🟡: тексты разрешений, значки, шифрование, настройки сборки.
- Настроить облачную сборку EAS и собрать тестовые версии iOS и Android.
- Проверка на ваших устройствах: TestFlight (iOS) и внутреннее тестирование (Google Play).
- Отправка на проверку в App Store и Google Play с вашего аккаунта; ответы на замечания проверяющих.