Dzień wydania (release day) — zaplanowana data wydania nowej wersji aplikacji mobilnej, obejmująca przygotowanie builda, recenzję w sklepie, staged rollout i monitorowanie. Dla aplikacji iOS proces rozpoczyna się od przesłania builda do App Store Connect na 24-48 godzin przed planowaną datą wydania ze względu na obowiązkową recenzję Apple. Dla Androida — zbudowanie i przesłanie do Google Play Console, gdzie proces recenzji zwykle trwa 1-4 godziny. Według Apple Developer Guidelines (2025), 90% buildów przechodzi recenzję w ciągu 24 godzin. Staged rollout pozwala zminimalizować wpływ w przypadku wykrycia błędów po publikacji.
Najważniejsze
Dzień wydania — to nie tylko moment naciśnięcia przycisku Publish. To skoordynowany proces, w którym uczestniczą programiści, QA, devopsi, product managerowie i czasem wsparcie. Przygotowanie zaczyna się 2-3 tygodnie przed dniem wydania: uzgodnienie zakresu, code freeze, testy regresyjne, przygotowanie release notes i materiałów marketingowych. Im dokładniejsze przygotowanie, tym spokojniej przebiega sam dzień wydania.
Checklist przygotowania do dnia wydania obejmuje: końcowy QA przebieg (regression + smoke suite) na buildzie wydaniowym; sprawdzenie metadanych w sklepach (nazwa, opis, zrzuty ekranu, keywords); uzgodnienie staged rollout percentage z product managerem; przygotowanie planu rollback (który tag przedeployować, ile czasu zajmie); powiadomienie zespołu i powiązanych serwisów o zbliżającym się wydaniu. Release checklist powinien być zautomatyzowany przez CI/CD — na przykład w postaci GitHub Actions workflow, który sprawdza wszystkie punkty przed utworzeniem taga wydania.
Ważny element przygotowania — blackout period (okres, w którym deploy na produkcję są zabronione). Zazwyczaj blackout wprowadza się na 48 godzin przed dniem wydania i zdejmuje 24 godziny po udanym rollout na 100%. Zapobiega to przypadkowym deployom, które mogą zakłócić wydanie. Change freeze w okresie blackout dotyczy wszystkich serwisów związanych z wydaniem.
Na 24-48 godzin przed dniem wydania wprowadzany jest code freeze — całkowite zatrzymanie zmian w kodzie. Programiści przełączają się na przygotowanie dokumentacji i release notes. DevOps buduje build wydaniowy z ustalonego taga (np. v2.6.0-rc1). Build przechodzi pełny regression suite (testy automatyczne + ręczne). Jeśli znalezione zostaną critical bugs — są naprawiane przed code freeze lub wydanie jest przesuwane. Release candidate (RC) — build, który przeszedł QA i jest gotowy do wysłania do sklepu.
Tagowanie w Git: tworzony jest adnotowany tag (git tag -a v2.6.0 -m "Release v2.6.0"). CI/CD pipeline buduje AAB (Android App Bundle) dla Google Play i IPA (iOS App Store Package) dla Apple App Store. Do builda dołączane są: plik z sumami kontrolnymi (SHA256), changelog i lista znanych problemów (known issues). Reproducible builds — idealna praktyka, przy której ponowne zbudowanie z tego samego taga daje binarnie identyczny wynik.
# Rurociąg wydania — tworzenie tagu i budowanie
# Zakłada, że code freeze jest już aktywny
# Utwórz gałąź wydania z develop
git checkout develop
git pull origin develop
git checkout -b release/v2.6.0
git push origin release/v2.6.0
# Code freeze: reguły ochrony gałęzi blokują nowe PR
# Uruchom zestaw regresji w CI/CD
./gradlew clean testReleaseUnitTest connectedReleaseTest
# Utwórz tag wydania po pomyślnej QA
git tag -a v2.6.0 -m "Release v2.6.0: payment module, dark mode"
git push origin v2.6.0
# Zbuduj binarkę wydania przez CI/CD
# fastlane build_release tworzy AAB + uniwersalny APK
fastlane build_release
Ważne: version bump (aktualizacja version code i version name) jest robiony przed code freeze. Po code freeze wersja się nie zmienia. Dla Androida: versionCode — monotonicznie rosnąca liczba całkowita; versionName — wersja semantyczna (2.6.0). Dla iOS: CFBundleVersion (build number) i CFBundleShortVersionString (wersja semantyczna). Versioning powinno być zautomatyzowane w gradle/xcconfig.
Dla iOS: build jest przesyłany przez Xcode, Transporter lub fastlane do App Store Connect. Po przesłaniu build przechodzi automatyczne sprawdzenie Apple (processing), następnie jest wysyłany do ręcznej recenzji. Średni czas recenzji — 24 godziny, ale może się wahać od 1 godziny do 7 dni w zależności od obciążenia recenzentów Apple i wymogów compliance. Expedited review — prośba o przyspieszoną recenzję dla krytycznych poprawek błędów (dostępna nie częściej niż raz w miesiącu, nie gwarantowana).
Dla Androida: build jest przesyłany przez Google Play Console. Google stosuje podejście kombinowane: automatyczne testowanie (accessibility, malware, policy compliance) + wybiórcza ręczna recenzja. Średni czas recenzji — 1-4 godziny. Internal test track i Closed track pozwalają przeprowadzić końcowe testowanie przed publikacją w Production track. Zalecane: 1-2 dni na Internal test → 1 dzień na Closed beta → stopniowy Production rollout.
Dla obu platform krytycznie ważne jest sprawdzenie metadanych przed przesłaniem builda: nazwa aplikacji, opis (short + full), zrzuty ekranu dla każdego supported device (iPhone 6.5", 5.5", iPad, Android phone, tablet), keywords (iOS) lub store listing experiments (Android). Błąd w metadanych może opóźnić recenzję o dodatkową dobę. App metadata powinna być zlokalizowana na wszystkie obsługiwane języki.
Staged rollout (gradual rollout, staged deployment) — strategia, w której nowa wersja staje się dostępna dla użytkowników nie od razu, ale etapowo. Typowy schemat dla dojrzałego zespołu: 1% użytkowników (pierwsze 2-4 godziny) → 10% (24 godziny) → 25% (24 godziny) → 50% (24 godziny) → 100%. Każdy etap obejmuje monitorowanie metryk i sprawdzenie braku krytycznych błędów. Staged rollout — podstawowe narzędzie minimalizacji ryzyka przy wydaniach.
Google Play Console zapewnia wbudowany staged rollout: można określić procent użytkowników i zaplanować stopniowe zwiększanie. Dla iOS App Store Connect nie ma takiej wbudowanej możliwości — staged rollout jest realizowany przez Phased Release (automatyczne zwiększanie zasięgu w ciągu 7 dni z możliwością wstrzymania) lub przez server-side feature flags z georozproszeniem. Phased release w App Store Connect daje możliwość Pause Release w przypadku wykrycia problemów.
Kluczowe metryki do przejścia do następnego etapu: crash-free rate (≥99.9% dla nowego wydania), ANR rate (Android, ≤0.1%), error rate na backend API (≤0.5% 5xx), oceny użytkowników (nie niższe niż poprzednia wersja), apdex score (≥0.94). Jeśli jakakolwiek metryka wyjdzie poza próg — rollout jest wstrzymywany do wyjaśnienia przyczyn. Go/no-go gate na każdym etapie — odpowiedzialność release managera lub on-call inżyniera.
Pierwsze 4 godziny po wydaniu — najbardziej krytyczny czas. Zespół monitoruje crash rate (Sentry, Firebase Crashlytics, App Center), error rate 5xx na backendzie, custom events (udane płatności, logowania, rejestracje), oceny użytkowników w App Store i Google Play, wzmianki w mediach społecznościowych (Twitter, Reddit). Dashboard monitorowania powinien być przygotowany wcześniej i dostępny na dużym ekranie w biurze lub na dedykowanym kanale Slack. Release dashboard — single pane of glass dla wszystkich metryk wydania.
Szczególna uwaga — metryki regresji: porównanie crash rate z poprzednią wersją za analogiczny okres. Jeśli crash rate wzrósł o więcej niż 0.1% — to red flag wymagający natychmiastowej analizy. Ważne jest również porównanie mediany i p95 latencji kluczowych endpointów API: nawet bez crashy, spowolnienie czasu odpowiedzi o 200ms może sygnalizować problem. Metric comparison (baseline vs current) jest automatyzowane w Datadog lub Grafana.
User feedback — nie mniej ważny niż metryki liczbowe. W pierwszych godzinach po wydaniu użytkownicy aktywnie zostawiają opinie w sklepach i piszą do supportu. Błędy nie wychwycone przez testy szybko wypływają w opiniach. Team lead lub wyznaczony QA inżynier monitoruje opinie co 30 minut w pierwszych 4 godzinach i klasyfikuje: false positive, known issue (już na liście known issues), new bug. New bugs P0/P1 — trigger do wstrzymania rollout.
Rollback — wycofanie do poprzedniej stabilnej wersji w przypadku wykrycia krytycznych problemów. Decyzja o rollback podejmowana jest przez release managera wspólnie z tech leadem, jeśli: crash-free rate nowego wydania spada poniżej 99%, wykryto wyciek danych, krytyczna funkcjonalność (płatności, autoryzacja) nie działa dla >5% użytkowników, lub sklep (App Store Review) odrzucił build po publikacji. Rollback trigger powinien być określony przed wydaniem, aby decyzja była podejmowana na podstawie faktów, a nie emocji.
Dla Androida: rollback w Google Play Console — zatrzymanie staged rollout i przełączenie na poprzednią wersję. Jeśli obecny build jest już na 100% użytkowników — publikacja poprzedniej wersji jako nowego wydania. Dla iOS: przez App Store Connect — Phased Release → Pause Release → wydanie nowej wersji z poprawką (App Store nie pozwala wycofać do poprzedniej wersji). iOS rollback jest trudniejszy: programista musi zbudować nowy build z revert-commitami i przejść recenzję od nowa.
Po rollback zespół przechodzi w tryb incydentu: root cause analysis, hotfix lub następne wydanie z poprawką, post-mortem. Rollback — to nie porażka, ale standardowa procedura. Zespoły, które nigdy nie robiły rollback, prawdopodobnie nie zauważają problemu, a nie wypuszczają bezbłędnych wydań. Rollback rate — jedna z DORA metrics: wysokowydajne zespoły robią rollback <10% wydań i odzyskują sprawność w <1 godzinę.
Często zadawane pytania
Najlepsze dni — wtorek, środa lub czwartek. Poniedziałek — wysoki ruch po weekendzie, piątek — ryzyko wchodzenia w weekend z problematycznym wydaniem. Unikaj piątku: jeśli po deployu zostanie wykryty problem, zespół będzie go naprawiać w weekend lub czekać do poniedziałku.
Przeczytaj powód odrzucenia w Resolution Center, popraw i prześlij ponownie build. Częste przyczyny: niedziałające linki, nieuzupełnione pola, treść bez subskrypcji (jeśli wymagana), nieaktualne zrzuty ekranu. App Review rejection opóźnia wydanie o 24-48 godzin, dlatego pierwsze przesłanie builda powinno nastąpić 3-5 dni przed planowaną datą wydania.
Dla dużych wydań (major changes) — 1%. Dla patch release — 5-10%. Pierwszy etap powinien być wystarczająco mały, aby w przypadku błędu wpływ był minimalny, ale wystarczająco duży, aby uzyskać statystycznie istotne metryki. 1% dla aplikacji z 10 milionami użytkowników — 100 tysięcy osób, wystarczająco do wykrycia krytycznych problemów.
Release party (zespołowe świętowanie) — opcjonalne, ale korzystne dla morale. Lepiej przeprowadzić po udanym rollout na 100%, a nie w momencie przesyłania builda. Release celebration można połączyć z release retrospective, aby omówić, co poszło dobrze, a co można poprawić.
Odpowiedzialność leży na release managerze (zwykle senior engineer lub tech lead). Decyzja jest podejmowana na podstawie danych z release dashboard, a nie na podstawie deadline'u. Release manager ma autorytet opóźnić wydanie, jeśli metryki nie przechodzą go/no-go gate.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również