Ден на издаване (release day) — планирана дата за пускане на нова версия на мобилно приложение, включваща подготовка на билд, ревю от магазина, staged rollout и мониторинг. За iOS приложения процесът започва с качване на билд в App Store Connect 24-48 часа преди планираната дата на издаване поради задължителното ревю на Apple. За Android — изграждане и качване в Google Play Console, където процесът на ревю обикновено отнема 1-4 часа. Според Apple Developer Guidelines (2025), 90% от билдовете преминават ревю за 24 часа. Staged rollout позволява минимизиране на въздействието при откриване на грешки след публикуване.
Основни точки
Ден на издаване — не е просто моментът на натискане на бутона Publish. Това е координиран процес, в който участват разработчици, QA, девопси, продукт мениджъри и понякога поддръжка. Подготовката започва 2-3 седмици преди деня на издаване: съгласуване на обхвата, code freeze, регресионно тестване, подготовка на release notes и маркетингови материали. Колкото по-щателна е подготовката, толкова по-спокойно преминава самият ден на издаване.
Контролният списък за подготовка за деня на издаване включва: финален QA прогон (regression + smoke suite) на билда за издаване; проверка на метаданните в магазините (име, описание, екранни снимки, keywords); съгласуване на процента staged rollout с продукт мениджъра; подготовка на план за rollback (кой маркер да бъде предеплойнат, колко време ще отнеме); уведомяване на екипа и свързаните услуги за предстоящото издаване. Release checklist трябва да бъде автоматизиран чрез CI/CD — например под формата на GitHub Actions workflow, който проверява всички точки преди създаване на маркера за издаване.
Важен елемент от подготовката — blackout период (период, в който деплойванията в продукция са забранени). Обикновено blackout се въвежда 48 часа преди деня на издаване и се премахва 24 часа след успешен rollout на 100%. Това предотвратява случайни деплойвания, които биха могли да нарушат издаването. Change freeze в периода на blackout се прилага за всички услуги, свързани с издаването.
24-48 часа преди деня на издаване се въвежда code freeze — пълно спиране на промените в кода. Разработчиците преминават към подготовка на документация и release notes. DevOps изгражда билда за издаване от фиксиран маркер (напр. v2.6.0-rc1). Билдът преминава пълен regression suite (автоматични + ръчни тестове). Ако бъдат открити критични грешки — те се поправят преди code freeze или издаването се отлага. Release candidate (RC) — билд, преминал QA и готов за изпращане до магазина.
Маркиране в Git: създава се анотиран маркер (git tag -a v2.6.0 -m "Release v2.6.0"). CI/CD pipeline изгражда AAB (Android App Bundle) за Google Play и IPA (iOS App Store Package) за Apple App Store. Към билда се прилага: файл с контролни суми (SHA256), changelog и списък с известни проблеми (known issues). Reproducible builds — идеална практика, при която повторното изграждане от същия маркер дава бинарно идентичен резултат.
# Пайплайн за издаване — създаване на маркер и изграждане
# Предполага, че code freeze вече е активен
# Създайте клон за издаване от develop
git checkout develop
git pull origin develop
git checkout -b release/v2.6.0
git push origin release/v2.6.0
# Code freeze: правилата за защита на клона блокират нови PR
# Пуснете регресионния пакет в CI/CD
./gradlew clean testReleaseUnitTest connectedReleaseTest
# Създайте маркер за издаване след успешна QA
git tag -a v2.6.0 -m "Release v2.6.0: payment module, dark mode"
git push origin v2.6.0
# Изградете двоичния файл за издаване чрез CI/CD
# fastlane build_release произвежда AAB + универсален APK
fastlane build_release
Важно: version bump (актуализиране на version code и version name) се прави преди code freeze. След code freeze версията не се променя. За Android: versionCode — монотонно нарастващо цяло число; versionName — семантична версия (2.6.0). За iOS: CFBundleVersion (build number) и CFBundleShortVersionString (семантична версия). Versioning трябва да бъде автоматизиран в gradle/xcconfig.
За iOS: билдът се качва чрез Xcode, Transporter или fastlane в App Store Connect. След качване билдът преминава автоматична проверка на Apple (processing), след което се изпраща за ръчно ревю. Средно време за ревю — 24 часа, но може да варира от 1 час до 7 дни в зависимост от натоварването на рецензентите на Apple и изискванията за съответствие. Expedited review — заявка за ускорено ревю за критични корекции на грешки (достъпна не повече от веднъж месечно, не е гарантирана).
За Android: билдът се качва чрез Google Play Console. Google използва комбиниран подход: автоматично тестване (accessibility, malware, policy compliance) + селективно ръчно ревю. Средно време за ревю — 1-4 часа. Internal test track и Closed track позволяват финално тестване преди публикуване в Production track. Препоръчва се: 1-2 дни за Internal test → 1 ден за Closed beta → постепенен Production rollout.
И за двете платформи проверката на метаданните преди качване на билда е критично важна: име на приложението, описание (short + full), екранни снимки за всяко поддържано устройство (iPhone 6.5", 5.5", iPad, Android phone, tablet), keywords (iOS) или store listing experiments (Android). Грешка в метаданните може да забави ревюто с допълнителен ден. App metadata трябва да бъде локализирана на всички поддържани езици.
Staged rollout (gradual rollout, staged deployment) — стратегия, при която новата версия става достъпна за потребителите не веднага, а на етапи. Типична схема за зрял екип: 1% от потребителите (първите 2-4 часа) → 10% (24 часа) → 25% (24 часа) → 50% (24 часа) → 100%. Всеки етап включва мониторинг на метрики и проверка за липса на критични грешки. Staged rollout — основният инструмент за минимизиране на риска при издавания.
Google Play Console предоставя вграден staged rollout: можете да посочите процент потребители и да планирате постепенно увеличаване. За iOS App Store Connect няма такава вградена възможност — staged rollout се реализира чрез Phased Release (автоматично увеличаване на обхвата за 7 дни с възможност за пауза) или чрез server-side feature flags с географско разпределение. Phased release в App Store Connect дава възможност за Pause Release (паузиране на издаването) при откриване на проблеми.
Ключови метрики за преминаване към следващия етап: crash-free rate (≥99.9% за новото издание), ANR rate (Android, ≤0.1%), error rate на backend API (≤0.5% 5xx), потребителски оценки (не по-ниски от предишната версия), apdex score (≥0.94). Ако някоя метрика надхвърли прага — rollout се спира до изясняване на причините. Go/no-go gate на всеки етап — отговорност на release manager или на on-call инженер.
Първите 4 часа след издаване — най-критичното време. Екипът следи crash rate (Sentry, Firebase Crashlytics, App Center), error rate 5xx на backend, custom events (успешни плащания, влизания, регистрации), потребителски оценки в App Store и Google Play, споменавания в социалните медии (Twitter, Reddit). Таблото за мониторинг трябва да бъде подготвено предварително и достъпно на голям екран в офиса или в специален Slack канал. Release dashboard — единен прозорец за всички метрики на изданието.
Специално внимание — регресионни метрики: сравнение на crash rate с предишната версия за аналогичен период. Ако crash rate се е увеличил с повече от 0.1% — това е червен флаг, изискващ незабавен анализ. Също така е важно да се сравни медианната и p95 латентност на ключови API крайни точки: дори без сривове, забавяне на времето за отговор с 200ms може да сигнализира за проблем. Metric comparison (baseline vs current) се автоматизира в Datadog или Grafana.
Обратната връзка от потребители — не по-малко важна от числовите метрики. В първите часове след издаване потребителите активно оставят отзиви в магазините и пишат на поддръжката. Грешките, неуловени от тестовете, бързо изплуват в отзивите. Team lead или определеният QA инженер следи отзивите на всеки 30 минути в първите 4 часа и ги класифицира: false positive, known issue (вече в списъка с известни проблеми), new bug. New bugs P0/P1 — тригер за спиране на rollout.
Rollback — връщане към предишната стабилна версия при откриване на критични проблеми. Решението за rollback се взема от release manager съвместно с tech lead, ако: crash-free rate на новото издание падне под 99%, бъде открито изтичане на данни, критична функционалност (плащания, оторизация) не работи за >5% от потребителите или магазинът (App Store Review) отхвърли билда след публикуване. Rollback trigger трябва да бъде определен преди издаването, така че решението да се взема на базата на факти, а не на емоции.
За Android: rollback в Google Play Console — спиране на staged rollout и превключване към предишната версия. Ако текущият билд вече е на 100% от потребителите — публикуване на предишната версия като ново издание. За iOS: чрез App Store Connect — Phased Release → Pause Release → пускане на нова версия с корекция (App Store не позволява връщане към предишна версия). iOS rollback е по-сложен: разработчикът трябва да изгради нов билд с revert commit-и и да премине отново през ревю.
След rollback екипът преминава в режим на инцидент: root cause analysis, hotfix или следващо издание с корекция, post-mortem. Rollback — не е провал, а стандартна процедура. Екипите, които никога не са правили rollback, вероятно не забелязват проблема, а не че пускат безгрешни издания. Rollback rate — един от DORA метриките: високоефективните екипи правят rollback при <10% от изданията и се възстановяват за <1 час.
Често задавани въпроси
Най-добрите дни — вторник, сряда или четвъртък. Понеделник — висок трафик от уикенда, петък — риск да влезем в уикенда с проблемно издание. Избягвайте петък: ако след деплойване се открие проблем, екипът ще го поправя през уикенда или ще чака до понеделник.
Прочетете причината за отхвърляне в Resolution Center, поправете и качете отново билда. Чести причини: неработещи връзки, непопълнени полета, съдържание без абонамент (ако се изисква), остарели екранни снимки. App Review rejection забавя издаването с 24-48 часа, затова първото качване на билд трябва да бъде 3-5 дни преди планираната дата на издаване.
За големи издания (major changes) — 1%. За patch издания — 5-10%. Първият етап трябва да бъде достатъчно малък, така че в случай на грешка въздействието да е минимално, но достатъчно голям, за да се получат статистически значими метрики. 1% за приложение с 10 милиона потребители — 100 хиляди души, достатъчно за откриване на критични проблеми.
Release party (екипно празнуване) — опционално, но полезно за морала. По-добре да се проведе след успешен rollout на 100%, а не в момента на качване на билда. Release celebration може да се комбинира с release retrospective, за да се обсъди какво е минало добре и какво може да се подобри.
Отговорността е на release manager (обикновено senior engineer или tech lead). Решението се взема на базата на данни от release dashboard, а не на базата на краен срок. Release manager има правомощието да отложи издаването, ако метриките не преминат go/no-go gate.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също