25. Публикация приложений
Финальный шаг — сборка и публикация в App Store (iOS) и Google Play (Android). EAS Build упрощает это до нескольких команд.
EAS Build
Заголовок раздела «EAS Build»# Установкаnpm install -g eas-cli
# Логинeas login
# Настройка (создаёт eas.json)eas build:configureeas.json — конфигурация сборок
Заголовок раздела «eas.json — конфигурация сборок»{ "cli": { "version": ">= 3.0.0" }, "build": { "development": { "developmentClient": true, "distribution": "internal", "ios": { "simulator": true }, "android": { "buildType": "apk" } }, "preview": { "distribution": "internal", "android": { "buildType": "apk" } }, "production": { "autoIncrement": true, "android": { "buildType": "app-bundle" }, "ios": {} } }, "submit": { "production": { "android": { "serviceAccountKeyPath": "./google-service-account.json" } } }}# Development build (с dev tools)eas build --platform android --profile developmenteas build --platform ios --profile development
# Preview (тестовая сборка, APK)eas build --platform android --profile preview
# Production (App Store / Play Store)eas build --platform android --profile productioneas build --platform ios --profile production
# Обе платформыeas build --platform all --profile productionПодпись приложений
Заголовок раздела «Подпись приложений»Android (Keystore)
Заголовок раздела «Android (Keystore)»# EAS автоматически создаёт и хранит keystore# Или используй свой:eas credentials # Интерактивное управление
# Eas.json"android": { "buildType": "app-bundle", // AAB для Play Store "credentialsSource": "remote" // EAS хранит keystore}iOS (Provisioning Profiles & Certificates)
Заголовок раздела «iOS (Provisioning Profiles & Certificates)»# EAS автоматически управляет сертификатами!# Нужен Apple Developer Account ($99/год)
eas build --platform ios# → EAS запросит логин в Apple Developer# → Автоматически создаст provisioning profile# → Автоматически создаст distribution certificateEAS Submit — публикация в сторы
Заголовок раздела «EAS Submit — публикация в сторы»# Отправить в Play Storeeas submit --platform android --latest# или конкретную сборку:eas submit --platform android --id BUILD_ID
# Отправить в App Store (TestFlight → Review)eas submit --platform ios --latestТребования для публикации
Заголовок раздела «Требования для публикации»Google Play:
- Google Developer Account ($25 одноразово)
- Service Account JSON (для автоматической загрузки)
- Приложение создано в Play Console
- Privacy Policy URL
App Store:
- Apple Developer Account ($99/год)
- App создано в App Store Connect
- Screenshots для всех размеров
- Privacy Policy URL
- App Review (1-7 дней)
OTA Updates (expo-updates)
Заголовок раздела «OTA Updates (expo-updates)»Обновление JavaScript кода БЕЗ перепубликации в сторах:
npx expo install expo-updates# Отправить OTA обновлениеeas update --branch production --message "Fix: исправлен баг на главной"
# Просмотр обновленийeas update:list{ "expo": { "updates": { "url": "https://u.expo.dev/PROJECT_ID", "enabled": true, "fallbackToCacheTimeout": 0 }, "runtimeVersion": { "policy": "appVersion" } }}Что можно обновить через OTA:
- JavaScript код
- Стили
- Изображения в JS бандле
- Конфигурация
Что НЕЛЬЗЯ обновить через OTA:
- Нативные модули
- app.json настройки
- Разрешения
- Splash screen
app.json для продакшена
Заголовок раздела «app.json для продакшена»{ "expo": { "name": "МоёПриложение", "slug": "my-app", "version": "1.0.0", "orientation": "portrait", "icon": "./assets/icon.png", "splash": { "image": "./assets/splash.png", "resizeMode": "contain", "backgroundColor": "#1e1e2e" }, "ios": { "supportsTablet": true, "bundleIdentifier": "com.company.myapp", "buildNumber": "1" }, "android": { "adaptiveIcon": { "foregroundImage": "./assets/adaptive-icon.png", "backgroundColor": "#1e1e2e" }, "package": "com.company.myapp", "versionCode": 1 } }}Чеклист перед публикацией
Заголовок раздела «Чеклист перед публикацией»- Иконка приложения (1024x1024)
- Splash screen
- Bundle Identifier / Package name
- Версия и build number
- Privacy Policy
- Screenshots для сторов
- Описание приложения
- Тестирование на реальных устройствах
- Performance profiling
- Error tracking (Sentry, Bugsnag)
- Analytics (Firebase, Amplitude)