Teams wählen meist einen dieser drei Ansätze für Mobile Environments:
- Zwei App IDs (Production + Pre-Production)
- Eine App ID + dynamisches Umschalten der Runtime-Umgebung
- Eine App ID + Capgo Channels
Die ersten beiden Optionen funktionieren, erzeugen aber langfristig Reibung. In echten Teams ist das Capgo-Channel-Modell in der Regel am saubersten.
Warum doppelte App-IDs für Rauschen sorgen
Verwendung com.myapp und com.myapp.beta klingt einfach, führt aber schnell zu Duplikaten:
- Zwei Release-Pipelines
- Zwei Sätze an Push-IDs, Deep Links und Entitlement-Mappings
- Zwei Analytics- und Crash-Identitäten
- Abweichende Konfiguration und inkonsistentes Verhalten zwischen den Umgebungen
Am Ende verwaltest du zwei Produkte über Store-Konsolen, Teams und interne QA-Anweisungen.
Warum Runtime-Switching-Configs oft unübersichtlich sind
Das Muster „eine App-ID + Runtime-Switch“ bedeutet in der Regel, dass deine App beim Start Umgebungsvariablen oder Flags liest und APIs, Keys sowie das Update-Verhalten dynamisch umleitet.
Das funktioniert so lange, bis:
- QA beginnt, beabsichtigte Flows zu umgehen, weil der Config-Status veraltet ist,
- jemand in Produktion den falschen Endpoint nutzt,
- Environment-Drift schwer reproduzierbare Bugs verursacht,
- du auf dem Gerät eines Users debuggen musst: „Welche Config-Version nutzt dieses Binary?“
Diese Komplexität wächst mit jedem Release und bremst das Team aus.
Der Capgo-Weg: eine App-ID, viele Channels
Capgo macht die Environment-Kontrolle durch Channels explizit:
- Nutze eine einzige Production-App-ID im App Store / Play Store.
- Liefere ein natives Binary für die „Shell“ aus (bis native Änderungen ein echtes Rebuild erfordern).
- Steuere das Verhalten über Channels, statt die App-Identität zu duplizieren.
In der Praxis bedeutet das:
production: alle Nutzerstaging: interne QA und Release Candidatesbeta: eingeladene Testerhotfix: Notfall-Patch-Track
Deine interne TestFlight/Play-Test-App kann eingeschaltet bleiben staging für immer.
Du kannst dort JS/CSS/Asset-Updates wiederholt über Capgo durchführen, ohne einen neuen Native Build zu veröffentlichen.
Empfohlene Struktur in der Praxis
1) Native-Release-Baseline
Deine letzte native Binary bleibt über viele JS-Iterationen hinweg gleich:
bun run build
bunx cap sync
# generate Xcode/Android Studio archives as usual
Du baust die native Binary nur dann neu, wenn du tatsächlich native Bereiche geändert hast.
2) Dedizierte Channels für Umgebungen nutzen
Updates mit Channels veröffentlichen:
bun run build
bunx @capgo/cli deploy --channel staging
Auf QA testen, Probleme beheben, dann promoten:
bunx @capgo/cli promote vX.Y.Z --channel production
Wenn du explizites Versioning bevorzugst:
bunx @capgo/cli deploy vX.Y.Z --channel staging
bunx @capgo/cli promote vX.Y.Z --channel production
3) TestFlight immer im Pre-Prod-Bereich halten
In iOS-Workflows bedeutet das, dass dein TestFlight-Build weiterhin mit Pre-Production-Updates verknüpft bleiben kann:
- Keine häufigen nativen Einreichungen für jede JS-Änderung.
- QA validiert über den Staging-Channel stets nahezu produktionsreife code.
- Produktionsnutzer erhalten nur Bundles aus dem produktionsreifen Channel.
4) Channel-Wechsel nur für kontrollierte Workflows nutzen
Für fortgeschrittene Teams: Kontrollierte Channel-Wechsel für QA-/Admin-Nutzer bereitstellen:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({
channel: 'staging',
triggerAutoUpdate: true
});
Dies ist optional. Die meisten Teams nutzen Channel-Zuweisungen aus dem Dashboard und wechseln den Channel nur für interne Nutzer, nicht für alle Kunden.
Operative Checkliste
- Nur eine App-ID (keine doppelten Production-/Staging-IDs)
- Eine Baseline-native Build-Pipeline
- Channel-Mapping dokumentiert (
staging,beta,production,hotfix) - Promotionspfad in CI/CD erzwungen
- Native Rebuild nur bei echten nativen Änderungen
- Rollback regelmäßig getestet
Praktischer Nutzen
Dieser Ansatz beseitigt Environment-Drift, reduziert Build-Churn und beschleunigt Fixes:
- QA erhält realistische Binaries (keine falsche „Staging-App“-Identität),
- euer TestFlight-Pfad bleibt stabil,
- euer Team vermeidet „Two-App-ID-Schulden“,
- ihr könnt viele JS-only-Fixes schnell über Capgo pushen.
Das Endergebnis ist einfachere Governance: weniger Artefakte, sauberere Telemetrie und weniger Überraschungen im Release-Betrieb.
Weiter geht’s mit Capgo Environment Best Practices: Staging mit einer mobilen App-ID
Wenn du es nutzt Capgo Environment Best Practices: Staging mit einer Mobile App ID um Channel-Routing und Staged Rollout zu planen, verbinde es mit Kanäle für die Implementierungsdetails in Channels, Kanäle für die Implementierungsdetails in Channels, Kanäle für die Implementierungsdetails in Channels, Beta-Testing-Lösung für den Produkt-Workflow in der Beta-Testing-Lösung, und Version-Targeting-Lösung für den Produkt-Workflow in der Version-Targeting-Lösung.