CodePush

CodePush ile OTA Güncelleme

CodePushOTACI/CD

CodePush ile JS ve asset OTA dağıtımı: native sınırlar, staging/production, Hermes uyumu, mandatory update ve rollback runbook.

EG

Emre Gürbüz

26 Temmuz 2026 · 4 dk okuma

CodePush (App Center mirası ve topluluk devamları), native binary değiştirmeden JavaScript bundle ve asset’leri cihazlara dağıtır. Buna OTA (Over-The-Air — mağaza dışı güncelleme) denir.

Doğru kullanıldığında hotfix günlerden dakikalara iner; yanlış kullanıldığında “yarı güncellenmiş” kullanıcı, okunamaz crash ve store politika riski doğar. OTA bir dağıtım kanalıdır — mimari kaçış kapısı veya native upgrade yerine geçmez.

OTA neyi günceller, neyi güncellemez?

Güvenle gönderilebilir:
  • JS/TS bundle (Hermes .hbc bytecode dahil)
  • Packager asset’leri: görseller, fontlar, Lottie JSON (native taraf değişmediyse)
  • Remote config driven UI logic — native API sözleşmesi aynı kaldığı sürece
Gönderilmemeli / gönderilemez:
  • Yeni native SDK, Gradle/Pod dependency, izin manifest değişikliği
  • Turbo Module / Fabric native implementasyon değişikliği
  • Hermes veya RN native sürüm değişikliği
  • Store politika gerektiren binary değişiklikleri

Altın kural: Native sözleşme kırıldıysa OTA değil, store release.

Mimari akış

  1. CI, store ile aynı binary target’a karşı bundle üretir (targetBinaryVersion).
  2. Bundle Hermes bytecode’a derlenir (release Hermes kullanıyorsa).
  3. Source map üretilir ve OTA label ile arşivlenir.
  4. Staging’e yayınlanır.
  5. QA smoke: login, ödeme, offline, deep link.
  6. Production’a kademeli rollout.
  7. Crash spike → rollback (önceki bundle label).

Kim staging’e basar, kim production promote eder, kim rollback yetkisine sahip — net olsun.

Staging / production ve binary eşlemesi

En az iki deployment:

  • Staging: internal cohort
  • Production: gerçek kullanıcılar

targetBinaryVersion şarttır. 1.8.1 binary’sine 1.8.2 native API bekleyen bundle basmak klasik outage’tır.

Pratikler:

  • Binary semver ile OTA label’ı karıştırmayın
  • iOS ve Android ayrı bundle, ayrı metrik
  • Uyumsuz bundle asla publish edilmemeli

Mandatory vs optional

PolitikaNe zamanRisk
OptionalUX iyileştirme, düşük risk bugKullanıcı eski bundle’da kalabilir
MandatoryKritik güvenlik, ödeme/data bugKötü ağda açılış bloklanır

Mandatory’yi ürün silahı yapmayın. Çoğu hotfix optional + restart prompt yeter. Mandatory’de progress UI, timeout/retry ve rollback runbook hazır olsun.

Hermes ve CodePush

Release binary Hermes kullanıyorsa OTA artifact da Hermes pipeline’dan geçmeli. Düz JS + Hermes runtime (veya tersi) uyumsuzluk üretir.

CI disiplini: Store bundle komutu = OTA bundle komutu. Tek script, tek metro/Babel config.

Release bundle üretme örneği:

npx react-native bundle \
  --platform ios \
  --dev false \
  --entry-file index.js \
  --bundle-output build/main.jsbundle \
  --assets-dest build/assets \
  --sourcemap-output build/main.jsbundle.map

Source map’i OTA label ile arşivleyin. Sentry/Crashlytics upload OTA publish’in parçası olsun.

Dev bundle (__DEV__ true) production’a asla basılmamalı.

Rollback

  1. Crash spike eşiği aşıldı.
  2. Yetkili kişi önceki stable label’a dön.
  3. CDN/manifest propagation (5–15 dk) — cohort hâlâ yeni indirebilir.
  4. Crash metrik düşüşü doğrulanır.
  5. Post-mortem: staging neden yakalamadı?

Rollback’i quarter’da bir bilinçli drill olarak çalıştırın.

Store politika

Apple ve Google, OTA ile store kurallarını delmeyi kısıtlar. JS bug fix genelde kabul edilir; uygulamanın “farklı bir uygulama” gibi davranması risklidir. Regüle sektörde audit trail tutun.

Sık tuzaklar

  • Native upgrade’i OTA ile idare etmek
  • Uyumsuz bundle + karışık cohort
  • Debug bundle production’a basmak
  • Source map arşivlememek
  • Rollback prova etmemek
  • Staging’siz production publish

Production checklist

  • targetBinaryVersion doğru
  • Store script = OTA script (Hermes dahil)
  • Staging smoke: login, pay, offline, deep link, push
  • Source map arşivlendi ve crash servisine upload
  • Rollback komutu dokümante; yetkili net
  • Mandatory ürün onayı alındı mı?
  • iOS + Android ayrı yayın, ayrı metrik
  • Rollback drill son 90 günde yapıldı mı?

Özet

CodePush hız kazandırır — disiplin yoksa hız yalnızca outage’ı öne çeker. Native sınırı koruyun, Hermes sözleşmesini CI’da kilitleyin, staging’siz production’a basmayın. OTA, store release’in yerini almaz; aradaki boşluğu güvenli doldurur.


Diğer yazılar