Перейти к содержанию

Mobile Release Guide — Архыз.CLUB

Полный путь от исходников до публикации в Google Play / RuStore / App Store.


1. Требования

Локально (для Android)

  • Node.js 20+
  • JDK 21 (Capacitor 8 требует именно 21): C:\Program Files\Eclipse Adoptium\jdk-21.0.10.7-hotspot
  • Android SDK (через Android Studio): C:\Users\Roman\AppData\Local\Android\Sdk
  • Android Studio — для UI отладки и эмулятора (опционально)

Для iOS

  • macOS (Xcode 15+)
  • Apple Developer account ($99/год)

2. Android — Debug APK (для теста на телефоне)

cd tourist-app
bash scripts/build-android-debug.sh

Результат: tourist-app/android/app/build/outputs/apk/debug/app-debug.apk (~14 MB)

Установка на телефон:

adb install -r tourist-app/android/app/build/outputs/apk/debug/app-debug.apk


3. Android — Release AAB (для Google Play / RuStore)

3.1. Один раз — создать release-keystore

cd tourist-app/android
keytool -genkey -v -keystore arkhyz-release.keystore \
  -alias arkhyz -keyalg RSA -keysize 2048 -validity 10000

Запомнить пароли: <store-password> и <key-password>.

3.2. Создать tourist-app/android/keystore.properties

storeFile=arkhyz-release.keystore
storePassword=<store-password>
keyAlias=arkhyz
keyPassword=<key-password>

Важно: *.keystore и keystore.properties в .gitignore — НЕ коммитить!

3.3. Сборка

cd tourist-app
bash scripts/build-android-release.sh

Результат: tourist-app/android/app/build/outputs/bundle/release/app-release.aab

3.4. Публикация

Google Play Console → Создать приложение ru.arkhyzclub.app → Внутреннее тестирование → Загрузить AAB → Добавить тестеров (email-list).

RuStore Console → создать приложение → загрузить AAB → отправить на модерацию.


4. iOS — TestFlight (только на macOS)

4.1. Первая инициализация

cd tourist-app
bash scripts/build-ios.sh

Скрипт создаст iOS-проект (npx cap add ios), сделает cap sync и откроет Xcode.

4.2. В Xcode

  1. Product → Scheme → "App"
  2. Targets → App → General → Identity → Bundle Identifier ru.arkhyzclub.app
  3. Signing & Capabilities → выбрать Team (Apple Developer)
  4. + CapabilityPush Notifications
  5. + CapabilityBackground Modes → ☑ Remote notifications
  6. Product → Archive (минут 5)
  7. Window → Organizer → Distribute App → App Store Connect → Upload
  8. App Store Connect (https://appstoreconnect.apple.com) → TestFlight → Internal Testing → добавить тестеров (Apple ID)

5. Push-нотификации — итоговая настройка

5.1. Firebase (Android)

  1. Создать проект на https://console.firebase.google.com
  2. Add app → Android → пакет ru.arkhyzclub.app
  3. Скачать google-services.json → положить в tourist-app/android/app/
  4. Пересобрать APK/AAB — Capacitor сам подключит FCM

5.2. APNs (iOS) — через Apple Developer + Firebase

  1. Apple Developer → Keys → создать APNs Auth Key (.p8)
  2. Firebase Console → Project Settings → Cloud Messaging → Apple app config → загрузить .p8 + Key ID + Team ID
  3. В Xcode уже включен Push Notifications capability — больше ничего не надо

5.3. AppMetrica server-side push

В кабинете https://appmetrica.yandex.ru → ваше приложение → Push-кампании → API: - скопировать Push API key → в .env как APPMETRICA_POST_API_KEY=<...> - скопировать Group ID (число) → APPMETRICA_GROUP_ID=<...>

cd /path/to/arkhyz-admin-main
PROJECT_ROOT="." docker compose \
  -f docker-compose.yml \
  -f infra/compose/docker-compose.services.yml \
  up -d platform-svc

Проверка:

curl -X POST http://localhost:9108/api/v1/push/test \
  -H 'Content-Type: application/json' \
  -H 'X-User-Id: <real-user-id>' \
  -d '{"title":"Test","body":"Hello from AppMetrica"}'


6. Versioning

При каждом релизе бампать:

Файл Поле
tourist-app/package.json version
tourist-app/android/app/build.gradle versionCode (+1) и versionName
tourist-app/ios/App/App.xcodeproj (Xcode UI) Build / Version

Текущая версия: 1.0.0 / versionCode 100


7. Быстрая команда «всё пересобрать»

cd tourist-app
npm run build          # Vite → dist/
npx cap sync           # → android/ + ios/
bash scripts/build-android-debug.sh   # APK для теста
bash scripts/build-android-release.sh # AAB для сторов (нужен keystore)