Публікація в App Store та Google Play
Вступ: від білду до рук користувачів
Ви завершили розробку застосунку. Код працює бездоганно, дизайн відшліфований, тестування пройдено. Тепер настав момент істини — публікація у App Store (iOS) та Google Play Store (Android), де ваш застосунок стане доступним для мільйонів користувачів по всьому світу.
Публікація мобільного застосунку — це не просто натискання кнопки «Опублікувати». Це багатоетапний процес, що включає:
- Створення облікових записів розробника ($99/рік для Apple, $25 одноразово для Google)
- Підготовку маркетингових матеріалів (іконка, скріншоти, опис, відео-превью)
- Налаштування метаданих (категорія, вікові обмеження, ціна)
- Проходження модерації (App Review для iOS, автоматичний скан для Android)
- Управління версіями та оновленнями
Процес публікації в App Store та Google Play принципово відрізняється за філософією:
🍎 App Store (Apple)
Філософія: Жорсткий контроль якості через ручну модерацію.
- ✅ Кожен білд перевіряється людиною (App Review Team)
- ✅ Висока довіра користувачів до якості застосунків
- ⏱️ Модерація 24–72 години (іноді до 7 днів)
- ❌ Відхилення за порушення Guidelines (~40% при першій спробі)
- 💰 $99/рік за Developer Program
🤖 Google Play (Android)
Філософія: Автоматизована модерація з ручною перевіркою вибіркових застосунків.
- ✅ Автоматичний скан на шкідливий код та політики
- ⏱️ Публікація 1–3 години (іноді миттєво)
- 🔍 Ручна перевірка лише підозрілих застосунків
- ❌ Відхилення рідше (~15%), але за серйозні порушення — permanent ban
- 💰 $25 одноразово за Developer Account
Мета цієї лекції
Ця лекція проведе вас через весь процес публікації від створення облікового запису до отримання першого завантаження:
Крок 1: Підготовка застосунку до релізу
Фінальні перевірки коду, оптимізація, створення production білду через EAS Build.
Крок 2: Маркетингові матеріали
Іконка застосунку, скріншоти, опис, ключові слова, promotional відео.
Крок 3: Створення облікових записів розробника
Реєстрація у Apple Developer Program та Google Play Console.
Крок 4: Налаштування метаданих в App Store Connect
Заповнення інформації про застосунок, категорії, ціноутворення, доступність за регіонами.
Крок 5: Налаштування метаданих у Google Play Console
Аналогічно для Android, але з особливостями платформи.
Крок 6: Завантаження білдів
Upload IPA до App Store Connect, AAB до Google Play Console.
Крок 7: Проходження модерації
Підготовка до App Review, типові причини відхилень, як відповідати на запити модераторів.
Крок 8: Публікація та моніторинг
Запуск у production, відстеження установок, робота з відгуками користувачів.
Передумови: що потрібно мати перед публікацією
Перед початком процесу публікації переконайтеся, що у вас є:
.ipa для iOS, .aab для Android. Детально розглянуто у лекції 29. EAS Build та профілі збірки.Крок 1: Фінальна підготовка застосунку
1.1. Чек-лист перед релізом
Перед створенням production білду пройдіть цей чек-лист:
- Всі екрани працюють без краш-помилок
- Навігація між екранами логічна та інтуїтивна
- Форми валідуються коректно
- API інтеграції працюють стабільно
- Push-нотифікації доставляються
// ❌ ВИДАЛИТИ перед релізом:
console.log('User data:', userData); // логи з sensitive даними
alert('TODO: implement this'); // незакінчені функції
<Button title="Test Crash" onPress={() => { throw new Error() }} />
Перевірте через глобальний пошук:
grep -r "console.log" src/
grep -r "TODO" src/
grep -r "FIXME" src/
grep -r "alert(" src/
// config.ts
const ENV = {
development: {
apiUrl: 'http://localhost:3000',
enableLogging: true,
},
production: {
apiUrl: 'https://api.myapp.com', // ← перевірте!
enableLogging: false,
},
};
export default __DEV__ ? ENV.development : ENV.production;
Перевірте eas.json:
{
"build": {
"production": {
"env": {
"API_URL": "https://api.myapp.com",
"STRIPE_PUBLIC_KEY": "pk_live_...", // не pk_test_!
}
}
}
}
app.json:
{
"expo": {
"version": "1.0.0", // Semantic versioning
"ios": {
"buildNumber": "1", // iOS Build Number (ціле число)
"bundleIdentifier": "com.mycompany.myapp"
},
"android": {
"versionCode": 1, // Android Version Code (ціле число)
"package": "com.mycompany.myapp"
}
}
}
Правила:
version— публічна версія (1.0.0, 1.0.1, 1.1.0)buildNumber/versionCode— монотонно зростає з кожним білдом (1, 2, 3, ...)- При кожному оновленні хоча б одне з чисел має збільшитися
app.json:
{
"expo": {
"icon": "./assets/icon.png", // 1024x1024 px, без заокруглення
"splash": {
"image": "./assets/splash.png", // 1284x2778 px (iPhone 13 Pro Max)
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"ios": {
"icon": "./assets/icon-ios.png" // опціонально
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png", // 1024x1024
"backgroundColor": "#ffffff"
}
}
}
}
Видаліть невикористані дозволи:
app.json (iOS):
{
"ios": {
"infoPlist": {
"NSCameraUsageDescription": "Для завантаження фото профілю",
"NSPhotoLibraryUsageDescription": "Для вибору фото з галереї",
// Видаліть якщо не використовуєте:
// "NSLocationWhenInUseUsageDescription": "..."
}
}
}
app.json (Android):
{
"android": {
"permissions": [
"CAMERA",
"READ_EXTERNAL_STORAGE",
"WRITE_EXTERNAL_STORAGE"
// Не додавайте зайві дозволи!
]
}
}
Типовий розмір:
- iOS: 20–50 MB (залежить від залежностей)
- Android: 15–30 MB (AAB автоматично оптимізується)
Якщо білд > 100 MB:
- Перевірте великі залежності:
npx expo-doctor
npm ls --depth=0 # список всіх залежностей
- Видаліть невикористані:
npm uninstall unused-package
- Оптимізуйте зображення:
# Встановіть ImageOptim (macOS) або TinyPNG CLI
tinypng assets/**/*.png
- Увімкніть Hermes (Android):
{
"android": {
"jsEngine": "hermes" // швидший запуск + менший розмір
}
}
1.2. Тестування production білду
Критично: Тестуйте саме production білд, а не development!
# Створіть preview білд (наближений до production)
eas build --platform android --profile preview
eas build --platform ios --profile preview
Що тестувати:
Перевірте всі критичні флоу
Реєстрація → Логін → Основний функціонал → Оплата (якщо є) → Логаут
Тестуйте на різних версіях ОС
- iOS: мінімум iOS 13, 15, останню версію
- Android: мінімум Android 8.0 (API 26), 11, 13
Перевірте landscape орієнтацію
Якщо застосунок підтримує — перевірте всі екрани у горизонтальному режимі
Тестуйте повільний інтернет
Увімкніть Network Link Conditioner (iOS) або обмежте швидкість в Android
Перевірте crash-free rate
Використовуйте аналітику (Sentry, Firebase Crashlytics) для відстеження крашів
1.3. Створення фінального production білду
# Android (AAB)
eas build --platform android --profile production
# iOS (IPA)
eas build --platform ios --profile production
# Обидві платформи одночасно
eas build --platform all --profile production
Очікуваний результат:
Збережіть посилання на артефакти — вони знадобляться для завантаження у стори.
Крок 2: Підготовка маркетингових матеріалів
2.1. Іконка застосунку
Іконка — це перше враження користувача про ваш застосунок. Вона відображається на домашньому екрані, у результатах пошуку App Store/Play Store, у списку встановлених застосунків.
Технічні вимоги:
| Параметр | Вимога |
|---|---|
| Розмір | 1024×1024 пікселів (обидві платформи) |
| Формат | PNG (без прозорості для iOS, з прозорістю для Android) |
| Колірний простір | RGB (не CMYK) |
| Кути | Квадратна без заокруглення (платформи додають автоматично) |
| Розмір файлу | До 1 MB |
- Текст менше 44pt (нечитабельний на маленьких іконках)
- Скріншоти UI застосунку (Apple вважає це Guideline порушенням)
- Фото реальних людей без письмового дозволу
- Логотипи сторонніх компаній (Apple, Android, тощо)
- Emoji або символи, захищені авторським правом
Рекомендації дизайну:
🎨 Простота
Іконка має бути зрозумілою на екрані 60×60 пікселів. Один чіткий символ краще за складну композицію.
✅ Instagram (градієнт + камера) ❌ Детальна ілюстрація міста
🌈 Контрастність
Висока контрастність між фоном і головним елементом. Уникайте світлих іконок на білому фоні.
✅ Telegram (синє небо + білий літак) ❌ Сірий текст на білому фоні
🔲 Padding
Залиште 10% padding від країв. iOS додає тінь, Android — adaptive icon mask.
✅ Елемент у центрі з відступами ❌ Елемент торкається країв
📱 Тестування
Перевірте як виглядає іконка:
- На світлому та темному фоні (iOS Dark Mode)
- Поруч з іншими іконками на домашньому екрані
- У результатах пошуку App Store/Play Store
Інструменти для створення іконок:
- Figma — безкоштовний онлайн-редактор
- Sketch — macOS додаток ($99/рік)
- Icon Kitchen — автоматична генерація Android adaptive icons
- AppIconMaker — генерація всіх розмірів іконок
2.2. Скріншоти застосунку
Скріншоти — це візуальна розповідь про ваш застосунок. Користувачі приймають рішення про встановлення за 5–7 секунд перегляду сторінки у сторі.
Вимоги Apple App Store:
| Пристрій | Розмір (пікселі) | Обов'язковість |
|---|---|---|
| iPhone 6.7" (15 Pro Max) | 1290×2796 | ✅ Обов'язково |
| iPhone 6.5" (11 Pro Max) | 1284×2778 | Рекомендовано |
| iPhone 5.5" (8 Plus) | 1242×2208 | Опціонально |
| iPad Pro 12.9" (якщо підтримка) | 2048×2732 | Обов'язково для iPad |
Кількість: 2–10 скріншотів на кожен розмір.
Вимоги Google Play Store:
| Пристрій | Розмір (пікселі) | Обов'язковість |
|---|---|---|
| Phone | Мінімум 320px по короткій стороні | ✅ Обов'язково (2–8 шт) |
| 7" Tablet | 1024×600 або більше | Рекомендовано |
| 10" Tablet | 1280×800 або більше | Рекомендовано |
Формат: JPEG або PNG, до 8 MB на скріншот.
- Запустіть застосунок на симуляторі з потрібним розміром екрану
- Натисніть
Cmd + S(iOS Simulator) абоCtrl + S(Android Emulator) - Скріншоти збережуться автоматично у правильному розмірі
Правила дизайну скріншотів:
Перший скріншот = заголовок
Це головний продаючий екран. Має показувати core value proposition.
Приклад (застосунок для подорожей):
"Плануйте ідеальну подорож за 3 хвилини"
Показуйте функціонал, а не пусті стани
Заповніть екрани реальними даними. Ніякого Lorem Ipsum.
✅ Екран з 10 подорожами та красивими фото ❌ "У вас поки немає подорожей"
Додайте текстові описи
Короткі заголовки над кожним скріншотом пояснюють що відбувається.
Шрифт: Жирний, розмір 60–80pt, контрастний колір.
Використовуйте послідовність (flow)
Скріншоти мають розповідати історію: Реєстрація → Головний екран → Основна функція → Результат.
Локалізуйте для різних ринків
Якщо таргетуєте Україну та США — створіть окремі набори скріншотів українською та англійською.
Інструменти для створення скріншотів:
- Figma Templates — готові шаблони
- Fastlane Frameit — автоматичне додавання рамок
- AppLaunchpad — генератор маркетингових скріншотів
2.3. Опис застосунку
Опис має продавати, а не просто перераховувати функції. Формула ефективного опису:
Структура опису:
[1] Привабливий заголовок (1 речення — головна цінність)
[2] Проблема, яку вирішуєте (2–3 речення)
[3] Рішення через ваш застосунок (3–5 ключових функцій з emoji)
✅ Функція 1: пояснення переваги
✅ Функція 2: пояснення переваги
✅ Функція 3: пояснення переваги
[4] Соціальний доказ (відгуки, статистика, нагороди)
"10,000+ користувачів довіряють нам"
⭐⭐⭐⭐⭐ Середній рейтинг 4.8
[5] Заклик до дії
"Завантажте зараз безкоштовно!"
Приклад для застосунку планування подорожей:
🏔️ Nomad — Плануйте ідеальну подорож за 3 хвилини
Втомилися витрачати години на пошук місць, готелів та транспорту?
Nomad об'єднує все в одному місці.
✅ Розумний маршрут — AI підбирає найкращі місця за вашими інтересами
✅ Спільне планування — запрошуйте друзів та плануйте разом
✅ Офлайн-режим — всі карти доступні без інтернету
✅ Бюджет-трекер — контролюйте витрати в реальному часі
Більше 10,000 мандрівників вже створили свою мрію з Nomad.
⭐⭐⭐⭐⭐ Середній рейтинг 4.8 в App Store
Завантажте зараз безкоштовно та почніть планувати!
---
Підтримка: support@nomadapp.com
Privacy Policy: https://nomadapp.com/privacy
Вимоги до довжини:
| Поле | App Store | Google Play |
|---|---|---|
| Короткий опис | 30 символів (Promotional Text) | 80 символів |
| Повний опис | 4000 символів | 4000 символів |
App Store: ✅ Дозволено. Emoji роблять опис живішим і привертають увагу.
Google Play: ✅ Дозволено, але помірно. Не переборщуйте (один emoji на параграф).
Рекомендація: Використовуйте emoji для виділення ключових функцій:
- ✅ ❌ 🚀 💡 🎯 🔐 — універсальні
- Уникайте специфічних emoji, які можуть інтерпретуватися по-різному
Заборонено обома платформами:
- "Краще за Конкурент"
- "Альтернатива Конкурент"
- "Як Конкурент, але з функцією"
Це призведе до відхилення. Фокусуйтеся на своїх перевагах, не порівнюючи.
2.4. Ключові слова (Keywords)
App Store (iOS):
Можна вказати до 100 символів ключових слів (через кому без пробілів).
Стратегія підбору:
- Основні терміни: назва категорії (travel, planner, trip)
- Довгий хвіст: специфічні запити (budget travel planner, road trip planner)
- Конкуренти: назви альтернативних застосунків (якщо не порушує правила)
Приклад:
travel,trip,planner,vacation,holiday,itinerary,roadtrip,backpacking,budget,offline,maps,guide,tourism,adventure,destinations
Інструменти підбору:
- App Store Search Ads — показує популярність запитів
- Sensor Tower — аналіз ключових слів конкурентів
- App Radar — оптимізація ASO (App Store Optimization)
Google Play (Android):
Немає окремого поля для ключових слів. Google індексує:
- Назву застосунку
- Короткий опис
- Повний опис
Стратегія: Природно вплетіть ключові слова у опис. Уникайте keyword stuffing (переповнення ключовими словами).
2.5. Promotional відео (опціонально)
App Store: App Preview Video (до 30 секунд)
Вимоги:
- Формат: MP4 або MOV
- Роздільна здатність: відповідає розміру скріншотів (1290×2796 для iPhone)
- Розмір: до 500 MB
- Перші 3 секунди критичні (автоплей без звуку)
Структура відео:
Секунди 1–3: Hook (гачок)
Покажіть найцікавішу функцію без контексту. Це має зупинити скролінг.
Секунди 4–10: Проблема
Коротко покажіть болючу точку користувача.
Секунди 11–25: Рішення
Демонстрація застосунку в дії. Швидкий темп, без надмірних деталей.
Секунди 26–30: Заклик до дії
"Завантажте зараз" з іконкою застосунку.
Google Play: Feature Graphic + Promotional Video (YouTube)
Feature Graphic — це банер 1024×500 пікселів, який відображається у верхній частині сторінки застосунку.
Вимоги:
- Формат: PNG або JPEG
- Розмір: 1024×500 пікселів
- Без тексту (Google накладає текст автоматично)
Крок 3: Створення облікових записів розробника
3.1. Apple Developer Program ($99/рік)
Реєстрація облікового запису
- Відкрийте developer.apple.com/programs/enroll
- Натисніть "Start Your Enrollment"
- Увійдіть з вашим Apple ID (рекомендовано створити окремий для бізнесу)
- Оберіть тип акаунту:
- Individual — особистий розробник ($99/рік)
- Organization — компанія ($99/рік, потрібен DUNS number)
- Заповніть персональну інформацію:
- Повне ім'я
- Адреса (має збігатися з адресою кредитної картки)
- Телефон (для двофакторної автентифікації)
- Прийміть Apple Developer Program License Agreement
- Оплата:
- $99 USD (повторюється щороку автоматично)
- Приймаються: Visa, MasterCard, Amex
- Платіж обробляється 24–48 годин
- Підтвердження email:
- Apple надішле лист підтвердження
- Після схвалення отримаєте доступ до developer.apple.com/account
Що отримуєте з Developer Program:
3.2. Google Play Console ($25 одноразово)
Реєстрація облікового запису
- Відкрийте play.google.com/console/signup
- Увійдіть з Google Account (рекомендовано створити окремий для бізнесу)
- Оберіть тип акаунту:
- Personal — особистий розробник
- Organization — компанія (потрібні документи реєстрації)
- Заповніть профіль розробника:
- Developer name: Назва, що відображатиметься у Google Play
- Email address: Контактний email для користувачів
- Phone number: Опціонально
- Website: URL вашого сайту або застосунку
- Прийміть Google Play Developer Distribution Agreement
- Оплата:
- $25 USD одноразово (не повторюється)
- Приймаються: кредитні картки, Google Pay
- Верифікація особи:
- Google вимагає документ (паспорт або водійські права)
- Завантажте скан у розділі Settings → Account details
- Верифікація займає 24–48 годин
- Заборонено створювати більше одного Developer Account на особу
- Permanent ban за:
- Spam (накрутка установок, фейкові відгуки)
- Malware (шкідливий код)
- Порушення Privacy Policy (збір даних без дозволу)
- Repeated policy violations (3+ відхилення за той самий тип порушення)
- Після бану неможливо створити новий акаунт
Що отримуєте з Play Console:
Крок 4: Налаштування метаданих в App Store Connect
4.1. Створення застосунку в App Store Connect
- Відкрийте appstoreconnect.apple.com
- Натисніть "My Apps" → "+" → "New App"
Форма створення:
| Поле | Опис |
|---|---|
| Platforms | iOS (оберіть лише якщо є iPad версія) |
| Name | Назва застосунку (до 30 символів, має бути унікальною у App Store) |
| Primary Language | Основна мова (англійська для глобального запуску, українська для локального) |
| Bundle ID | Оберіть зі списку (має збігатися з app.json → ios.bundleIdentifier) |
| SKU | Унікальний ID для внутрішнього обліку (наприклад: myapp-ios-2024) |
| User Access | Full Access (за замовчуванням) |
- Натисніть "Create"
4.2. Заповнення App Information
Секція: App Information
https://nomadapp.com/privacy- Primary: Travel
- Secondary: Productivity
4.3. Pricing and Availability
Секція: Pricing and Availability
| Параметр | Опис |
|---|---|
| Price | Безкоштовний або платний (ціна від $0.99 до $999.99) |
| Availability | У яких країнах доступний (оберіть регіони або "All countries") |
| Pre-orders | Чи дозволити передзамовлення (доступно до 180 днів до релізу) |
- Більшість застосунків (95%) — безкоштовні з in-app purchases або підписками
- Платні застосунки рідко працюють без великого бренду
- Якщо плануєте монетизацію — використовуйте freemium модель
4.4. App Privacy (Конфіденційність)
Apple вимагає детальну декларацію про те, які дані збирає застосунок.
Крок 1: Натисніть "App Privacy" → "Get Started"
Крок 2: Відповідайте на запитання:
Приклади даних, що вважаються "збором":
- Email, ім'я, телефон (контактна інформація)
- Геолокація
- Фото з камери або галереї
- Історія покупок
- Аналітика (Firebase Analytics, Amplitude)
- Crash reports (Sentry, Crashlytics)
Якщо НЕ збираєте: Оберіть "No, we do not collect data from this app"
Якщо збираєте: Детально вкажіть:
- Які типи даних (Contact Info, Location, User Content)
- Навіщо (Analytics, App Functionality, Advertising)
- Чи пов'язані з особистістю користувача (Linked to User / Not Linked)
Приклад декларації для застосунку з аналітикою:
Data Types Collected:
- Email Address (Linked to User)
Purpose: Account Creation, App Functionality
- Device ID (Not Linked to User)
Purpose: Analytics
- Crash Data (Not Linked to User)
Purpose: App Functionality
Tracking: No (not used for cross-app tracking)
4.5. Завантаження скріншотів та метаданих
Секція: App Store → Version Information
- App Preview and Screenshots:
- Завантажте скріншоти для кожного розміру (6.7", 6.5", iPad)
- Опціонально додайте App Preview Video (до 30 секунд)
- Promotional Text (опціонально):
- До 170 символів
- Можна змінювати без нової версії застосунку
- Показується над описом
- Description:
- До 4000 символів
- Використовуйте форматування: нові рядки, emoji
- Не можна змінити без нової версії
- Keywords:
- До 100 символів (через кому без пробілів)
- Не дублюйте слова з назви застосунку (Apple автоматично індексує)
- Support URL:
- URL сторінки підтримки або FAQ
- Marketing URL (опціонально):
- Посилання на лендінг застосунку
4.6. Налаштування Build
Секція: Build
- Натисніть "+" біля Build
- Оберіть білд зі списку (має бути завантажений через EAS або Xcode)
- Якщо білд не відображається — почекайте 10–15 хвилин після завантаження
Export Compliance:
Apple запитає: "Does your app use encryption?"
| Ваш випадок | Відповідь |
|---|---|
| Використовуєте HTTPS для API | No (стандартне шифрування) |
| Використовуєте власне шифрування даних | Yes (потрібна додаткова документація) |
| Не використовуєте шифрування взагалі | No |
4.7. Age Rating (Віковий рейтинг)
Секція: Age Rating
Відповідайте на запитання чесно:
- Чи містить застосунок насильство?
- Чи є контент сексуального характеру?
- Чи є ненормативна лексика?
- Чи є азартні ігри?
- Чи збирається медична інформація?
Результат: Автоматично призначається рейтинг (4+, 9+, 12+, 17+)
4.8. App Review Information
Секція: App Review Information
Username: test@nomadapp.com
Password: TestPassword123!
Notes: Account has pre-filled data for testing all features
- First Name / Last Name
- Phone Number (з кодом країни)
- Email (буде використано для зв'язку під час модерації)
- Особливості тестування
- Географічні обмеження
- Сезонний функціонал (наприклад, доступний лише влітку)
Our app requires location services to function.
Please allow location access during testing.
Test data is pre-loaded for the test account.
Крок 5: Налаштування метаданих у Google Play Console
5.1. Створення застосунку в Google Play Console
- Відкрийте play.google.com/console
- Натисніть "Create app"
Форма створення:
| Поле | Опис |
|---|---|
| App name | Назва застосунку (до 50 символів) |
| Default language | Основна мова (English - United States для глобального) |
| App or game | Оберіть "App" |
| Free or paid | Безкоштовний або платний (після публікації не можна змінити) |
- Підтвердіть declarations:
- ☑ Застосунок відповідає Google Play policies
- ☑ Застосунок відповідає US export laws
- Натисніть "Create app"
5.2. Dashboard та обов'язкові секції
Google Play Console показує checklist обов'язкових секцій для публікації:
Set up your app
Базова інформація про застосунок
Store settings
Категорія, теги, контактна інформація
Main store listing
Опис, скріншоти, графіка
Release
Завантаження AAB файлу
Content rating
Віковий рейтинг через IARC
Data safety
Декларація про збір даних
Privacy policy
URL політики конфіденційності
5.3. App details (Store settings)
Navigation: Dashboard → Grow → Store settings → App details
<b>Bold text</b>
<i>Italic text</i>
<u>Underline text</u>
[Hook - 1 sentence]
<b>Key Features:</b>
• Feature 1
• Feature 2
• Feature 3
[Social proof]
[Call to action]
5.4. Store listing (Графіка та скріншоти)
Navigation: Dashboard → Grow → Main store listing
App icon
| Параметр | Вимога |
|---|---|
| Розмір | 512×512 пікселів |
| Формат | PNG (з прозорістю або без) |
| Розмір файлу | До 1 MB |
Feature graphic (банер)
| Параметр | Вимога |
|---|---|
| Розмір | 1024×500 пікселів |
| Формат | PNG або JPEG |
| Вимоги | Без тексту (Google накладає автоматично) |
Screenshots
Вимоги:
- Phone: Мінімум 2, максимум 8 скріншотів
- Мінімальний розмір: 320px по короткій стороні
- Рекомендований розмір: 1080×1920 або 1080×2340 (сучасні Android пристрої)
- Формат: PNG або JPEG
- Розмір файлу: До 8 MB кожен
7" Tablet та 10" Tablet (опціонально):
- Рекомендовано якщо ваш застосунок оптимізований для планшетів
- Google показує окремі скріншоти для різних форм-факторів
Promo video (опціонально)
Посилання на YouTube відео (публічне або unlisted).
Вимоги:
- Тривалість: 30 секунд – 2 хвилини
- Перші 3 секунди критичні (автоплей)
- Формат: будь-який, підтримуваний YouTube
5.5. Contact details
Navigation: Dashboard → Grow → Store settings → Contact details
5.6. Data safety (Конфіденційність даних)
Google вимагає декларацію про збір даних (аналогічно Apple App Privacy).
Navigation: Dashboard → Grow → Data safety
Крок 1: Чи збираєте особисті дані?
- Location: Точна або приблизна геолокація
- Personal info: Ім'я, email, телефон
- Photos and videos: Контент з камери/галереї
- Files and docs: Завантажені файли
- Calendar: Події з календаря
- Contacts: Список контактів
- App activity: Історія взаємодії з застосунком
- Device or other IDs: Advertising ID, Device ID
Крок 2: Як використовуються дані?
- App functionality: Основний функціонал
- Analytics: Аналітика поведінки
- Developer communications: Комунікація з користувачами
- Advertising: Таргетована реклама
- Fraud prevention: Запобігання шахрайству
Крок 3: Чи шифруються дані?
- Yes, data is encrypted in transit (HTTPS)
- Yes, data is encrypted at rest (зберігання на сервері)
Крок 4: Чи можна видалити дані?
- Yes, users can request deletion (через Support або в застосунку)
Приклад декларації:
Data collected:
✅ Email address (required for account creation)
- Used for: App functionality
- Can be deleted: Yes
✅ Approximate location (optional)
- Used for: App functionality (nearby destinations)
- Can be deleted: Yes
✅ App interactions (analytics)
- Used for: Analytics
- Not linked to user identity
- Can be deleted: Not applicable (anonymous)
Security:
✅ Data encrypted in transit (HTTPS)
✅ Data encrypted at rest (AES-256)
User controls:
✅ Users can delete their account through Settings
5.7. Content rating (Віковий рейтинг)
Google використовує систему IARC (International Age Rating Coalition) для автоматичного визначення рейтингу у різних регіонах.
Navigation: Dashboard → Grow → Content rating
- Натисніть "Start questionnaire"
- Оберіть категорію застосунку (App, Game, Browser тощо)
- Відповідайте на запитання:
| Запитання | Приклад відповіді |
|---|---|
| Does your app contain violence? | No |
| Does your app contain sexual content? | No |
| Does your app contain profanity? | No |
| Does your app simulate gambling? | No |
| Does your app use location services? | Yes (for showing nearby destinations) |
- Отримайте сертифікат IARC:
Результат: Автоматично призначаються рейтинги для різних регіонів:
| Регіон | Система | Типовий рейтинг |
|---|---|---|
| США | ESRB | Everyone (E) |
| Європа | PEGI | PEGI 3 |
| Німеччина | USK | All ages |
| Австралія | ACB | General (G) |
| Корея | GRAC | All |
5.8. Pricing and distribution
Navigation: Dashboard → Grow → Store settings → Pricing and distribution
- All countries (рекомендовано для максимального охоплення)
- Specific countries (якщо є географічні обмеження)
Крок 6: Завантаження білдів
6.1. Завантаження IPA до App Store Connect
Спосіб 1: Через EAS Submit (рекомендовано)
eas submit --platform ios --profile production
Інтерактивний процес:
Спосіб 2: Через Transporter App (macOS)
- Завантажте Transporter з Mac App Store
- Відкрийте застосунок та увійдіть з Apple ID
- Перетягніть
.ipaфайл у вікно Transporter - Натисніть "Deliver"
- Дочекайтеся завершення upload (може зайняти 10–30 хвилин залежно від розміру)
Спосіб 3: Через Xcode (для локальних білдів)
- Відкрийте Xcode
- Window → Organizer
- Оберіть архів білду
- Натисніть "Distribute App"
- Оберіть "App Store Connect"
- Слідуйте інструкціям wizard
6.2. Завантаження AAB до Google Play Console
Спосіб 1: Через EAS Submit (рекомендовано)
eas submit --platform android --profile production
Інтерактивний процес:
Спосіб 2: Через веб-інтерфейс Google Play Console
- Navigation: Dashboard → Release → Production → Create new release
- Натисніть "Upload" → оберіть
.aabфайл - Дочекайтеся завершення upload (5–10 хвилин)
- Google автоматично проведе Pre-launch report:
- Тестування на реальних пристроях
- Скріншоти автоматично згенеровані
- Виявлення crashів
6.3. Перевірка білду перед публікацією
App Store Connect:
- Перейдіть до App Store → Version → секція Build
- Білд з'явиться у списку через 10–15 хвилин після upload
- Натисніть Select a build
- Оберіть завантажений білд
- Перевірте Build Metadata:
- Version: 1.0.0
- Build Number: 1
- File size: ~50 MB
- Minimum OS: iOS 13.0
Google Play Console:
- Navigation: Release → Production → Draft release
- Перевірте інформацію про білд:
- Version name: 1.0.0
- Version code: 1
- Minimum SDK: 26 (Android 8.0)
- Target SDK: 34 (Android 14)
- ABIs supported: arm64-v8a, armeabi-v7a, x86_64
Крок 7: Проходження модерації
7.1. App Review (Apple) — що перевіряють модератори?
Apple App Review — це команда людей, які вручну тестують ваш застосунок протягом 24–72 годин (іноді до 7 днів). Вони перевіряють:
Функціональність
Всі екрани працюють, навігація логічна, немає crashів.
Відповідність метаданим
Опис застосунку відповідає реальному функціоналу. Скріншоти показують актуальний UI.
App Store Review Guidelines
2.8 тис+ правил у developer.apple.com/app-store/review/guidelines
Безпека
Немає шкідливого коду, private API, jailbreak detection exploitation.
Privacy
Правильна декларація збору даних у App Privacy секції.
Design
Відповідність Human Interface Guidelines (не обов'язково, але рекомендовано).
Типові причини відхилення (Rejection reasons):
Проблема: Застосунок незавершений або містить placeholder-контент.
Приклади:
- "Coming soon" на деяких екранах
- Lorem ipsum текст
- Кнопки, що нічого не роблять
- "Under construction" повідомлення
Рішення: Видаліть або доповніть незавершені функції перед submission.
Проблема: Скріншоти або опис не відповідають реальному застосунку.
Приклади:
- Скріншоти показують функції, яких немає у білді
- Опис обіцяє "AI-powered recommendations", але застосунок цього не робить
- Іконка змінена після submission (не збігається з білдом)
Рішення: Переконайтеся що всі маркетингові матеріали відповідають дійсності.
Проблема: Застосунок не надає достатньої цінності або це просто обгортка над веб-сайтом.
Приклади:
- WebView з вашим сайтом без нативного функціоналу
- Застосунок робить лише одну просту дію (таймер, калькулятор tip)
- Дублікат існуючого застосунку без унікальних фіч
Рішення: Додайте унікальний нативний функціонал або не публікуйте як застосунок.
Проблема: Порушення Privacy Policy або невідповідність декларації App Privacy.
Приклади:
- Збираєте геолокацію, але не вказали у App Privacy
- Privacy Policy URL не працює (404 error)
- Немає можливості видалити акаунт та дані
Рішення: Оновіть App Privacy декларацію, перевірте Privacy Policy URL, додайте функцію видалення акаунту.
Проблема: Застосунок падає під час тестування модераторами.
Приклади:
- Crash при відсутності інтернету
- Crash при відмові у дозволі на геолокацію
- Crash при повороті екрану
Рішення: Тестуйте всі edge cases. Використовуйте Sentry або Crashlytics для відстеження крашів у реальному часі.
7.2. Як відповідати на відхилення (Rejection response)
Коли застосунок відхилено, ви отримаєте email з детальним поясненням:
Приклад rejection email:
Hello,
Guideline 2.1 - Performance - App Completeness
We discovered one or more bugs in your app. Specifically, your app displays
a "Feature coming soon" message on the Settings screen.
Next Steps
To resolve this issue, please run your app on a device to identify any
issues, then revise and resubmit your app for review.
Як відповісти:
- Виправте проблему у коді
- Створіть новий білд із більшим Build Number
- Upload новий білд до App Store Connect
- У Resolution Center напишіть відповідь модераторам:
Hello App Review Team,
Thank you for your feedback. We have removed the "Coming soon" placeholder
from the Settings screen. All features are now fully functional.
Changes in build 2:
- Removed placeholder text from Settings
- Implemented Settings functionality
- Tested on iOS 15.0, 16.0, and 17.0
We have uploaded build 1.0.0 (2) for your review.
Best regards,
[Your Name]
- Натисніть "Submit for Review" знову
7.3. App Review Phone Call (рідкісний випадок)
Іноді модератори телефонують для з'ясування деталей (якщо застосунок складний або є питання щодо функціоналу).
Що робити:
- Відповідайте чесно та професійно
- Поясніть архітектуру та призначення застосунку
- Надайте додаткові скріншоти або відео якщо потрібно
- Запитайте конкретні рекомендації щодо виправлення
Типові запитання:
- "How does feature X work?"
- "Why do you collect specific data?"
- "Can you demonstrate specific functionality via screen sharing?"
7.4. Google Play Automated Review
Google використовує автоматизовану модерацію через машинне навчання:
Що перевіряється автоматично:
Malware scan
Статичний аналіз APK/AAB на наявність шкідливого коду.
Policy compliance
Автоматична перевірка SDK на порушення Privacy Policy.
Content rating validation
Сканування на невідповідність заявленому віковому рейтингу.
Trademark infringement
Перевірка назви та іконки на порушення торгових марок.
SDK detection
Виявлення banned SDK (наприклад, реклама від заблокованих мереж).
Типовий час модерації:
- 80% застосунків: Публікуються автоматично за 1–3 години
- 15% застосунків: Ручна перевірка 1–3 дні (якщо виявлені підозрілі ознаки)
- 5% застосунків: Відхилення (policy violation)
Типові причини відхилення Google Play:
Проблема: Виявлено шкідливий код або підозрілу поведінку.
Приклади:
- Збір SMS без явного дозволу користувача
- Приховане завантаження APK з інтернету
- Root exploit спроби
Рішення: Видаліть підозрілий код. Якщо це помилкове спрацювання — оскаржте через Appeal form.
Проблема: Назва або опис вводять в оману.
Приклади:
- Назва містить "Official" без дозволу бренду
- Іконка копіює популярний застосунок
- Опис обіцяє функції, яких немає
Рішення: Змініть назву/іконку, оновіть опис.
Проблема: Відсутня або неправильна Privacy Policy.
Приклади:
- Privacy Policy URL повертає 404
- Політика не описує збір даних, заявлений у Data Safety
- Privacy Policy не оновлена 5+ років
Рішення: Опублікуйте актуальну Privacy Policy на вашому сайті.
7.5. Appeal (Оскарження відхилення)
Якщо вважаєте що відхилення помилкове:
Apple:
- Resolution Center → Appeal
- Поясніть чому вважаєте рішення неправильним (з доказами)
- Очікування розгляду: 1–3 дні
- Якщо appeal відхилено — рішення остаточне
Google:
- Play Console → Policy status → Appeal
- Заповніть форму з детальним поясненням
- Очікування: 1–5 днів
- Можна апелювати повторно якщо надали нові докази
Крок 8: Публікація та пост-релізний моніторинг
8.1. Запуск у production
Apple App Store:
Після схвалення модерації (статус "Ready for Sale"):
Застосунок автоматично публікується одразу після approval.
Налаштування: App Store → Version → Release → Automatically release this version
Ви контролюєте точний час публікації.
Налаштування: App Store → Version → Release → Manually release this version
Після approval натисніть "Release this version"
Запланована публікація у конкретний день/час.
Налаштування: App Store → Version → Release → Release on date
Google Play:
Після завантаження білду:
- Navigation: Release → Production → Review release
- Перевірте всю інформацію
- Натисніть "Start rollout to Production"
- Оберіть стратегію rollout:
Застосунок одразу доступний всім користувачам.
Використання: Якщо впевнені у якості білду (пройшов beta testing).
Поступовий запуск:
- 5% користувачів → моніторинг 24 години
- 10% → моніторинг 24 години
- 20% → 50% → 100%
Використання: Для мінімізації ризику критичних багів.
Налаштування: Оберіть "Create staged rollout" → вкажіть % (5%, 10%, 20%, 50%)
8.2. Моніторинг після публікації
Перші 48 годин критичні. Відстежуйте:
📊 Crash-free rate
Цільовий показник: > 99% (менше 1% користувачів мають краші)
Інструменти:
- Sentry — real-time crash tracking
- Firebase Crashlytics — безкоштовна альтернатива
- App Store Connect Analytics — вбудована статистика
Дії при crash rate > 2%:
- Ідентифікуйте топ-3 crashy екрани
- Виправте критичні баги
- Створіть hotfix білд (version 1.0.1)
- Submit для expedited review (Apple) або push hotfix (Android)
⭐ Рейтинг та відгуки
Стратегія роботи з відгуками:
✅ Відповідайте на негативні відгуки (1–2 зірки) протягом 24 годин
- Вибачтеся за незручності
- Запропонуйте вирішення або компенсацію
- Повідомте про виправлення у наступному оновленні
✅ Дякуйте за позитивні відгуки (4–5 зірок)
✅ Не просіть "купити" 5-зірковий рейтинг — це порушення Guidelines
Коли просити відгук:
- Після 3-го успішного використання core функції
- Не частіше 1 разу на 120 днів (Apple обмеження)
- Ніколи після негативного досвіду (помилка, краш)
📈 Install/Uninstall rate
Здорові показники:
| Метрика | Цільове значення |
|---|---|
| Day 1 retention | > 40% (користувачі повертаються наступного дня) |
| Day 7 retention | > 20% |
| Day 30 retention | > 10% |
| Uninstall rate | < 5% протягом першого тижня |
Якщо retention низький:
- Перевірте onboarding (чи зрозуміло що робити?)
- Додайте push-нотифікації (нагадування про цінність)
- A/B тестуйте різні флоу
🐛 Bug reports
Канали збору:
- Email підтримки (support@yourapp.com)
- In-app feedback форма
- Соціальні мережі (Twitter, Reddit)
- App Store / Google Play відгуки
Пріоритизація:
| Пріоритет | Критерії | Дії |
|---|---|---|
| P0 (Critical) | Блокує core функціонал, масові краші | Hotfix протягом 24 годин |
| P1 (High) | Важлива функція не працює | Виправлення у наступному релізі (1–2 тижні) |
| P2 (Medium) | Minor баг, не впливає на UX | Backlog |
| P3 (Low) | Косметичні проблеми | Nice-to-have |
8.3. Оновлення застосунку (Updates)
Коли випускати оновлення:
Hotfix (1.0.1) — терміново
Критичні баги, що блокують функціонал. Випускаємо протягом 1–3 днів.
Minor Update (1.1.0) — щомісяця
Нові фічі, покращення UX, виправлення накопичених багів.
Major Update (2.0.0) — щороку
Великий редизайн, нова архітектура, breaking changes.
Процес оновлення:
- Збільшіть версію у
app.json:
{
"version": "1.0.1", // було 1.0.0
"ios": { "buildNumber": "2" }, // було "1"
"android": { "versionCode": 2 } // було 1
}
- Створіть новий production білд:
eas build --platform all --profile production
- Upload до App Store Connect / Google Play Console
- Оновіть "What's New" (Release Notes):
Приклад якісних Release Notes:
🐛 Bug Fixes
- Fixed crash when opening trip details without internet
- Resolved issue with camera permissions on Android 14
✨ Improvements
- Faster loading of trip photos
- Better offline mode experience
📱 Under the hood
- Performance improvements
- Reduced app size by 15%
❌ Поганий приклад:
- Bug fixes
- Performance improvements
- Submit for Review (Apple) або Rollout (Google)
8.4. Версіонування: best practices
Semantic Versioning (рекомендовано):
MAJOR.MINOR.PATCH
1.0.0 → Initial release
1.0.1 → Hotfix (bug fixes)
1.1.0 → New features
2.0.0 → Breaking changes / major redesign
Build Number / Version Code:
Завжди збільшується на 1 з кожним білдом (навіть якщо version не змінюється).
Приклад еволюції:
| Дата | Version | Build | Зміни |
|---|---|---|---|
| Dec 1 | 1.0.0 | 1 | Initial release |
| Dec 3 | 1.0.1 | 2 | Hotfix: crash fix |
| Dec 15 | 1.1.0 | 3 | New feature: offline mode |
| Jan 10 | 1.1.1 | 4 | Bug fix |
| Feb 1 | 2.0.0 | 5 | Major redesign |
Підсумки: чек-лист успішної публікації
✅ Підготовка
- Production білди створені (IPA + AAB)
- Іконка 1024×1024 готова
- Скріншоти підготовлені (2+ для кожної платформи)
- Опис написаний (продає, а не описує)
- Privacy Policy опублікована
- Тестові акаунти готові (для App Review)
🍎 App Store
- Developer Program ($99) активний
- App Store Connect: застосунок створений
- Метадані заповнені (назва, опис, категорія)
- App Privacy декларація завершена
- Age Rating призначений
- Білд завантажений та обраний
- App Review Information заповнена
- Submitted for Review
🤖 Google Play
- Developer Account ($25) активний
- Play Console: застосунок створений
- Store listing заповнений
- Data Safety декларація завершена
- Content Rating отриманий через IARC
- Білд завантажений (AAB)
- Pre-launch report переглянутий
- Started rollout to Production
📊 Пост-реліз
- Crash tracking налаштований (Sentry/Crashlytics)
- Analytics інтегрована (Firebase/Amplitude)
- Моніторинг crash-free rate (> 99%)
- Відповіді на відгуки (< 24 години)
- Hotfix готовий у випадку критичних багів
- Update roadmap сплановано
Додаткові ресурси
Вітаємо! Ваш застосунок тепер у руках користувачів. 🎉
EAS Build та профілі збірки
Повний покроковий гід зі збірки React Native застосунків через Expo Application Services (EAS Build) — від реєстрації облікового запису до отримання готових APK/IPA файлів. Налаштування профілів збірки, змінних оточення, підписування сертифікатів та автоматизація через CI/CD
Вступ до штучного інтелекту та машинного навчання
Що таке AI, ML та Data Science, чим вони відрізняються, як комп'ютер навчається на даних — без формул, але з ясними аналогіями та хронологією розвитку від 1950 до ChatGPT