Zielversion
Kopieren Sie einen Einrichtungsprompt mit den Installationsanweisungen und der vollständigen Markdown-Guideline für diesen Plugin.
Diese Anleitung erklärt, wie man automatisch den neuesten kompatiblen Bundle an Benutzer liefert, basierend auf ihrer native App-Version, ähnlich wie Ionic AppFlow’s Ansatz. Dies stellt eine vereinfachte Update-Verwaltung und schnellere Bereitstellungen sicher, während gleichzeitig Kompatibilitätsprobleme verhindert werden.
Übersicht
Abschnitt mit dem Titel „Übersicht“Capgo's Versionsziel-System ermöglicht Ihnen:
- Automatisches Liefern von kompatiblen Updates an Benutzer auf der Grundlage ihrer native App-Version
- Verhindern von Bruchänderungen von inkompatiblen App-Versionen
- Mehrere App-Versionen verwalten gleichzeitig ohne komplexes Logik
- Aktualisierungen ohne Komplikationen bereitstellen spezifischen Benutzergruppen
Warum Version-Zielgruppierung wichtig ist (Besonders für AppFlow-Nutzer)
Abschnitt mit dem Titel “Warum Version-Zielgruppierung wichtig ist (Besonders für AppFlow-Nutzer)”Wenn Sie mit Ionic AppFlowbekannt sind, wissen Sie, wie wichtig es ist, sicherzustellen, dass Benutzer nur kompatible Updates erhalten. AppFlow matchte automatisch Live-Update-Bundles mit nativen App-Versionen, um inkompatibles JavaScript von älteren nativen code zu verhindern.
Capgo bietet die gleichen Sicherheitsgarantienmit zusätzlichen Funktionen:
- Mehr granulare Kontrolle über Versionsabgleich
- Mehrere Strategien (Kanäle, semver, native Einschränkungen)
- Bessere Sichtbarkeit in die Versionsverteilung
- API und CLI Kontrolle neben Dashboard-Verwaltung
Diese Vorgehensweise ist insbesondere nützlich, wenn:
- Sie haben Benutzer auf verschiedenen Hauptversionen Ihrer App (z.B. v1.x, v2.x, v3.x)
- Sie müssen die rückwärtskompatible Weiterentwicklung aufrechterhalten, während Sie wichtige Änderungen durchführen
- Sie möchten verhindern, dass neuerere Pakete ältere native code beschädigen
- Sie migrieren Benutzer allmählich von einer Version zur anderen
- Sie migrieren von AppFlow und möchten die gleiche Sicherheit bei Updates aufrechterhalten und möchten die gleiche Sicherheit bei Updates aufrechterhalten
Wie es funktioniert
Abschnitt mit dem Titel “Wie es funktioniert”Capgo verwendet einen mehrschichtigen Ansatz, um Benutzer mit kompatiblen Updates zu verbinden:
- Native Version Einschränkungen: Verhindern Sie, dass Bundles an inkompatiblen native Versionen geliefert werden
- Kanalbasierte Routing: Leiten Sie verschiedene App-Versionen an verschiedene Update-Kanäle weiter
- Semantische Versionskontrolle: Blockieren Sie automatisch Updates über Major/Major/Minor-Grenzen
- Geräteebene-Überschreibungen: Ziel spezifische Geräte oder Benutzergruppen
Versionsabgleich-Fluss
Abschnitt mit dem Titel “Versionsabgleich-Fluss”graph TD A[User Opens App] --> B{Check Device Override} B -->|Override Set| C[Use Override Channel] B -->|No Override| D{Check defaultChannel in App} D -->|Has defaultChannel| E[Use App's defaultChannel] D -->|No defaultChannel| F[Use Cloud Default Channel] C --> G{Check Version Constraints} E --> G F --> G G -->|Compatible| H[Deliver Update] G -->|Incompatible| I[Skip Update]Strategie 1: Kanalbasierte Versionsrouting
Abschnitt mit dem Titel „Strategie 1: Kanalbasierte Versionsrouting”Dies ist der __CAPGO_KEEP_0__ empfohlene Ansatz
für die Verwaltung von Änderungen und großen Versionsupdates. Er ähnelt dem Liefermodell von AppFlow.
Beispiel-Szenario- Abschnitt mit dem Titel „Beispiel-Szenario” App v1.x
production(100.000 Benutzer) → - Kanal (50.000 Benutzer mit Änderungen, die das Produkt beeinträchtigen) →
v2Kanal - App v3.x (10.000 Beta-Testern) →
v3Kanal
Implementierung
Schritt 1: Konfigurieren Sie Kanäle für jede HauptversionKopieren Sie auf die Zwischenablage
Kopieren Sie auf die Zwischenablage// capacitor.config.ts for version 1.x buildsimport { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', // or omit for default } }};
export default config;// capacitor.config.ts for version 2.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v2', // Routes v2 users automatically } }};// capacitor.config.ts for version 3.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v3', // Routes v3 users automatically } }};Schritt 2: Kanäle erstellen
Abschnitt mit dem Titel „Schritt 2: Kanäle erstellen”# Create channels for each major versionnpx @capgo/cli channel create productionnpx @capgo/cli channel create v2npx @capgo/cli channel create v3
# Enable self-assignment so apps can switch channelsnpx @capgo/cli channel set production --self-assignnpx @capgo/cli channel set v2 --self-assignnpx @capgo/cli channel set v3 --self-assignSchritt 3: Versions-spezifische Pakete hochladen
Abschnitt mit dem Titel „Schritt 3: Versions-spezifische Pakete hochladen”# For v1.x users (from v1-maintenance branch)git checkout v1-maintenancenpm run buildnpx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)git checkout mainnpm run buildnpx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)git checkout betanpm run buildnpx @capgo/cli bundle upload --channel v3- Null code Änderungen - Der Kanalrouting erfolgt automatisch
- Klare Trennung - Jede Version hat ihren eigenen Update-Pfad
- Flexible Zielgruppen - Push-Updates für bestimmte Versionen
- Sichere Rollouts - Bruchstellen werden nie in inkompatible Versionen geliefert
Strategie 2: Kontrolle über semantische Versionierung
Abschnitt mit dem Titel „Strategie 2: Kontrolle über semantische Versionierung”Verwenden Sie Capgo’s integrierte semantische Versionskontrolle, um Updates über Versionsgrenzen hinweg zu verhindern.
Automatische Updates über Hauptversionen deaktivieren
Abschnitt mit dem Titel „Automatische Updates über Hauptversionen deaktivieren“# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorDiese Konfiguration bedeutet:
- Benutzer mit der App-Version 1.2.3 werden Updates bis zur 1.9.9
- Benutzer werden NICHT Updates der Version 2.0.0 automatisch erhalten
- Verhindert Änderungen, die ältere native code beschädigen
Granulare Kontrollmöglichkeiten
Abschnitt mit dem Titel “Granulare Kontrollmöglichkeiten”# Block minor version updates (1.2.x won't get 1.3.0)npx @capgo/cli channel set stable --disable-auto-update minor
# Block patch updates (1.2.3 won't get 1.2.4)npx @capgo/cli channel set stable --disable-auto-update patch
# Allow all updatesnpx @capgo/cli channel set stable --disable-auto-update noneAbschnitt mit dem Titel “Strategie 3: Einschränkungen für native Versionen”
Legen Sie die Mindestanforderungen für native Versionen für Bundles fest, um die Lieferung an inkompatible Geräte zu verhindern.Copy to clipboard
Mit nativeVersion Delay Bedingung verwenden
Abschnitt: "Mit nativeVersion Delay Bedingung verwenden"Wenn Sie ein Bundle hochladen, können Sie eine Mindestversion für native Version angeben:
# This bundle requires native version 2.0.0 or highernpx @capgo/cli bundle upload \ --channel production \ --native-version "2.0.0"Verwendungsfälle
Abschnitt: "Verwendungsfälle"-
Neuer Native-Plugin erforderlich
Terminal-Fenster # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli bundle upload --native-version "2.0.0" -
Native API-Änderungen
Terminalfenster # Bundle uses new Capacitor 6 APIsnpx @capgo/cli bundle upload --native-version "3.0.0" -
Schrittweise Migration
Terminalfenster # Test bundle only on latest native versionnpx @capgo/cli bundle upload \--channel beta \--native-version "2.5.0"
Strategie 4: Vermeidung von automatischen Downgrades
Abschnitt: Strategie 4: Vermeidung von automatischen DowngradesVerhindere, dass Benutzer Pakete erhalten, die älter sind als ihre aktuelle native Version.
Aktivieren Sie in den Kanal-Einstellungen
Abschnitt: Aktivieren Sie in den Kanal-EinstellungenIn der Capgo-Oberfläche:
- Gehe zu Kanäle → Wähle deinen Kanal
- Aktivieren „Deaktivieren Sie die automatische Downgrade unter native“
- Speichern Sie Änderungen
Oder über CLI:
npx @capgo/cli channel set production --disable-downgrade- Geräte des Benutzers: Native Version 1.2.5
- Kanalbundle: Version 1.2.3
- Ergbnis: Aktualisierung ist blockiert (würde eine Downgrade bedeuten)
Dies ist nützlich, wenn:
- Benutzer haben manuell eine neuere Version aus dem App-Store installiert
- Sie benötigen sicherzustellen, dass Benutzer immer die neuesten Sicherheitspatches haben
- Sie möchten Regressionsfehler verhindern
Strategie 5: Geräteebene Zielsetzung
Abschnitt mit dem Titel „Strategie 5: Geräteebene Zielsetzung“Überschreiben der Kanalzuweisung für bestimmte Geräte oder Benutzergruppen
Zwingen einer bestimmten Version für Testzwecke
Abschnitt mit dem Titel „Zwingen Sie eine bestimmte Version für die Testung“import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channelasync function assignBetaTesters() { const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester if (isBetaTester(userId)) { await CapacitorUpdater.setChannel({ channel: 'v3' }) }}Übersicht Geräteumgehung
Abschnitt mit dem Titel „Übersicht Geräteumgehung“Gehen Sie in der Capgo-Übersicht:
- Zu Geräte → Gerät finden
- Klicken Kanal festlegen oder Version festlegen
- Mit einer spezifischen Kanal- oder Paketversion überschreiben
- Das Gerät erhält Updates von der überschriebenen Quelle
Vollständiger AppFlow-Style Workflow
Hier ist ein vollständiges Beispiel, das alle Strategien kombiniert:1. Initialisierung (App v1.0.0)
Terminalfenster
Zur Zwischenablage kopieren# Create production channel with semver controlsnpx @capgo/cli channel create production \ --disable-auto-update major \ --disable-downgradeconst config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', } }};2. Release-Breaking-Change (App v2.0.0)
Abschnitt mit dem Titel „2. Release-Breaking-Change (App v2.0.0)“# Create v2 channel for new versionnpx @capgo/cli channel create v2 \ --disable-auto-update major \ --disable-downgrade \ --self-assign
# Create git branch for v1 maintenancegit checkout -b v1-maintenancegit push origin v1-maintenance// capacitor.config.ts for v2.0.0const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v2', // New users get v2 channel } }};3. Updates auf beide Versionen pushen
Abschnitt mit dem Titel „3. Updates auf beide Versionen pushen“# Update v1.x users (bug fix)git checkout v1-maintenance# Make changesnpx @capgo/cli bundle upload \ --channel production \ --native-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @capgo/cli bundle upload \ --channel v2 \ --native-version "2.0.0"4. Versionsverteilung überwachen
Abschnitt mit dem Titel “4. Versionenverteilung überwachen”Verwende das Capgo-Dashboard, um zu überwachen:
- Wie viele Benutzer sind auf v1 gegenüber v2
- Zuordnungen von Bundeln pro Version
- Fehler oder Abstürze pro Version
5. Veraltete Version deaktivieren
Abschnitt mit dem Titel “5. Veraltete Version deaktivieren”Sobald die v1-Nutzung unter der Schwellenwert liegt:
# Stop uploading to production channel# Optional: Delete v1 maintenance branchgit branch -d v1-maintenance
# Move all remaining users to default# (They'll need to update via app store)Kanalvorrang
Abschnitt mit dem Titel “Kanalvorrang”Wenn mehrere Kanal-Konfigurationen existieren, verwendet Capgo diese Vorrangfolge:
- Geräte-Übernahme (Dashboard oder API) - Höchste Priorität
- Cloud-Übernahme über
setChannel()Anruf - defaultChannel in capacitor.config.ts
- Standard-Kanal (Cloud-Einstellung) - Niedrigste Priorität
Gute Praktiken
Abschnitt mit dem Titel “Gute Praktiken”1. Setzen Sie immer defaultChannel für Hauptversionen
Abschnitt mit dem Titel “1. Setzen Sie immer defaultChannel für Hauptversionen”// ✅ Good: Each major version has explicit channel// v1.x → production// v2.x → v2// v3.x → v3
// ❌ Bad: Relying on dynamic channel switching// All versions → production, switch manually2. Verwenden Sie semantische Versionsnummerierung
Abschnitt mit dem Titel “2. Verwenden Sie semantische Versionsnummerierung”# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. Halten Sie separate Branches
Abschnitt mit dem Titel „3. Halten Sie separate Branches“# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. Testen Sie vor der Veröffentlichung
Abschnitt mit dem Titel „4. Testen Sie vor der Veröffentlichung“# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. Überwachen Sie die Versionsverteilung
Abschnitt mit dem Titel „5. Überwachen Sie die Versionsverteilung“Regelmäßig überprüfen Sie Ihren Dashboard:
- Stellen sich die Benutzer auf neueren nativen Versionen um?
- Bekommen alte Versionen noch viel Traffic?
- Sollten Sie alte Kanäle deprecieren?
Vergleich mit Ionic AppFlow
Abschnitt mit dem Titel “Vergleich mit Ionic AppFlow”Für Teams, die von Ionic AppFlowhier ist, wie Capgo’s Versionszielvergleich funktioniert:
| Funktion | Ionic AppFlow | Capgo |
|---|---|---|
| Versionsbasierte Routing | Automatisch basierend auf der native Version | Automatisch über defaultChannel + mehrere Strategien |
| Semantische Versionsnummer | Grundlegende Unterstützung | Erweitert mit --disable-auto-update (Major/Minor/Patch) |
| Native Versionenbeschränkungen | Manuelle Konfiguration im AppFlow-Dashboard | Eingebaut --native-version Flag in CLI |
| Kanalverwaltung | Web UI + CLI | Web UI + CLI + API |
| Geräteüberschreibungen | Eingeschränkte Geräteeinstellungen | Vollständige Kontrolle über das Dashboard/API |
| Verhinderung von automatischen Downgrades | Ja | Ja über --disable-downgrade |
| Wartung mehrerer Versionen | Manuelle Verwaltung von Branchen und Kanälen | Automatisiert mit Vorrang des Kanals |
| Selbsthosting | Nein | Ja (vollständige Kontrolle) |
| Version-Analytik | Grundlegend | Detaillierte pro-Version-Metriken |
Fehlersuche
Abschnitt: 'Fehlersuche'Benutzer erhalten keine Updates
Abschnitt: "Benutzer erhalten keine Updates"Überprüfen Sie Folgendes:
-
Kanalzuweisung: Überprüfen Sie, ob das Gerät auf dem richtigen Kanal ist
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Versionseinschränkungen: Überprüfen Sie, ob das Bundle native Versionen anfordert
- Dashboard → Pakete → Überprüfen Sie die Spalte "Native Version"
-
Semver-Einstellungen: Überprüfen Sie die Einstellung des Kanals
disable-auto-updatesettingTerminalfenster npx @capgo/cli channel list -
Geräteumstellung: Überprüfen Sie, ob das Gerät eine manuelle Umstellung hat
- Zentraleinstieg → Geräte → Gerät suchen → Kanal-Version überprüfen
Bundle an falsche Version geliefert
Abschnitt mit Titel „Bundle an falsche Version geliefert“- Standardkanal überprüfen: Stellen Sie sicher, dass der richtige Kanal in
capacitor.config.ts - Bundle hochladen überprüfen: Überprüfen Sie, ob das Bundle an den richtigen Kanal hochgeladen wurde
- Native Version überprüfen: Bestätigen
--native-versionDie Flagge wurde korrekt verwendet
Änderungen, die alte Versionen betreffen
Abschnitt mit dem Titel „Änderungen, die alte Versionen betreffen“- Eilmaßnahme: Übernehmen Sie auf betroffene Geräte eine sichere Bundle
- Zentrale Oberfläche → Geräte → Masseauswahl → Version festlegen
- Langfristige Lösung: Erstellen Sie kanalisierte Versionen und halten Sie separate Branches
- Vorbeugung: Testen Sie Updates immer auf repräsentativen Geräten vor der Rollout
Migration von Ionic AppFlow
Abschnitt mit dem Titel “Migration von Ionic AppFlow”Wenn Sie von Ionic AppFlow, funktioniert die Version-Zielsetzung in Capgo sehr ähnlich, mit verbessertem Flexibilität:
Konzeptkarte
Abschnitt mit dem Titel “Konzeptkarte”| AppFlow-Konzept | Capgo Äquivalent | Hinweise |
|---|---|---|
| Veröffentlichungs-Kanal | Capgo Kanal | Das gleiche Konzept, aber mit mehr Macht |
| Native Version Lock | --native-version Flag | Mehr Kontrolle auf granularer Ebene |
| Kanalpriorität | Kanalvorrang (Überschreiben → Cloud → Standard) | Mehr transparenter Vorrang |
| Zielsystem für die Bereitstellung | Kanal + semver-Kontrollen | Mehrere Strategien verfügbar |
| Produktionskanal | production Kanal (oder beliebiger Name) | Flexible Namensgebung |
| gitbasierte Bereitstellung | CLI-Paket-Upload aus der Branch | Selbe Workflow |
| Automatische Versionsübereinstimmung | defaultChannel + Versionsbeschränkungen | Verbessert mit mehreren Strategien |
Schlüsselunterschiede für AppFlow-Nutzer
Abschnitt mit dem Titel “Schlüsselunterschiede für AppFlow-Nutzer”- Mehr Kontrolle: Capgo bietet Ihnen mehrere Strategien (Kanäle, semver, native Version), die kombiniert werden können
- Bessere Sichtbarkeit: Das Dashboard zeigt die Versionsverteilung und Kompatibilitätsprobleme an
- API Zugriff: Vollständige programmatische Kontrolle über die Versionsziele
- Selbst-Hosting: Option, eigene Update-Server mit gleicher Versionslogik zu betreiben
Migrationsschritte
Abschnitt mit dem Titel “Migrationsschritte”- Mappen Sie Ihre AppFlow-Kanäle zu Capgo Kanälen (üblicherweise 1:1)
- Setzen Sie
defaultChannelincapacitor.config.tsfür jede Hauptversion - Konfigurieren Sie semver-Regeln Wenn Sie automatische Blockierung an Versionsgrenzen wünschen
- Versionsspezifische Bundles hochladen mit
--native-versionFlagge - Versionen verteilen in Capgo-Dashboard
Erweiterte Muster
Abschnitt mit dem Titel „Erweiterte Muster“Schrittweise Bereitstellung nach Version
Abschnitt mit dem Titel „Schrittweise Bereitstellung nach Version”// Gradually migrate v1 users to v2async function migrateUsers() { const deviceId = await CapacitorUpdater.getDeviceId() const rolloutPercentage = 10 // Start with 10%
// Hash device ID to get deterministic percentage const hash = hashCode(deviceId) % 100
if (hash < rolloutPercentage) { // User is in rollout group - migrate to v2 await CapacitorUpdater.setChannel({ channel: 'v2' }) }}Funktionsschalter nach Version
Abschnitt mit dem Titel „Funktionsschalter nach Version”// Enable features based on native versionasync function checkFeatureAvailability() { const info = await CapacitorUpdater.getDeviceId() const nativeVersion = info.nativeVersion
if (compareVersions(nativeVersion, '2.0.0') >= 0) { // Enable features requiring v2.0.0+ enableNewCameraFeature() }}A/B-Testung über Versionen hinweg
Abschnitt mit dem Titel „A/B-Testung über Versionen hinweg”// Run A/B tests within same native versionasync function assignABTest() { const nativeVersion = await getNativeVersion()
if (nativeVersion.startsWith('2.')) { // Only A/B test on v2 users const variant = Math.random() < 0.5 ? 'v2-test-a' : 'v2-test-b' await CapacitorUpdater.setChannel({ channel: variant }) }}Zusammenfassung
Abschnitt mit dem Titel „Zusammenfassung”Capgo bietet mehrere Strategien für die versionsspezifische Lieferung von Updates:
- Kanalbasierte Routing: Automatische Versionsabtrennung über
defaultChannel - Semantische Versionsnummer: Verhindere Updates über Haupt-/Mittel-/Patcheschwellen
- Native Versionsbeschränkungen: Erforderliche Mindestnative Version für Bundles
- Verhindere automatische Downgrade: Liefern Sie niemals ältere Bundles an neue native Versionen
- Geräteüberschreibungen: Manuelle Kontrolle für Tests und Zielsetzung
Indem Sie diese Strategien kombinieren, können Sie AppFlow-Style-Updates mit noch mehr Flexibilität und Kontrolle erreichen. Wählen Sie die Ansätze, die am besten zu Ihrer App-Versionierung und -Veröffentlichungsworkflow passen.
Für weitere Details zu spezifischen Funktionen:
- Änderungen im Überblick - Detaillierte Strategie für die Versionsverwaltung von Kanälen
- Kanalverwaltung - Vollständige Referenz für die Kanalkonfiguration
- Aktualisierungsverhalten - Native Versionen verzögern und setzen Bedingungen