Saltare al contenuto principale

Aggiornatore Open Source: Guida all'Architettura e alla Sicurezza

Scopri l'architettura, la sicurezza e l'integrazione dell'aggiornatore open source nel 2026. Una guida completa per gli sviluppatori.

Aggiornatore open source: Guida all'architettura e alla sicurezza

L'open source ora si trova al centro del software commerciale, non ai margini. Una sintesi del 2024 di Synopsys e Open Source Security and Risk Analysis ha trovato che 96% di codici commerciali contenevano software open source, e 77% della code in quei codici era open source, mentre uno studio della Linux Foundation del 2022 stimava che il contenuto open source medio fosse di circa 70% a 90% di un insieme di codice software (la panoramica di Intel sull'uso di open source). Se il tuo prodotto viene spedito su telefoni, desktop o dispositivi, un aggiornatore open source non è una funzionalità di comodità. È parte del sistema di consegna che mantiene quelle dipendenze, bundle e asset runtime al sicuro per essere eseguiti in produzione.

Quello conta perché il traffico degli aggiornamenti non è più piccolo o occasionale. NetApp Instaclustr ha riferito che npm gestiva 4,5 miliardi di richieste di download nel 2024, PyPI ha raggiunto 530 miliardi di download, Maven Central ha elaborato 1,5 trilioni di downloade NuGet gestiti 159 miliardi di richieste nello stesso anno, con ecosistemi che servono più di 6,6 trilioni di pacchetti dal 2019 (Statistiche sui software open source di Instaclustr). In quel contesto, l'aggiornatore è un'infrastruttura. È la cosa che decide se un fix raggiunge gli utenti in modo pulito o se un bundle dannoso diventa un incidente di supporto.

Elenco dei contenuti

Perché gli aggiornatori open source sono importanti nel software moderno

Un aggiornatore open source è la macchina client-side che controlla la presenza di una versione più recente, scarica le modifiche, le verifica e le applica senza forzare una rilascio completo del magazzino o una reinstallazione manuale. In pratica, ciò può significare un plugin Capacitor che invia nuovi asset web a un'app mobile, un aggiornatore di Electron che sostituisce i bundle desktop, o un piccolo agente che aggiorna la configurazione su un dispositivo embedded. La forma cambia a seconda della piattaforma, ma il compito rimane lo stesso, spostare code affidabili dal server al dispositivo con il minimo attrito possibile.

Un'infografica intitolata Perché gli aggiornatori open source sono importanti, che evidenzia la sicurezza e la manutenzione per i componenti di software open source.

Perché il problema è più grande di quanto sembri.

Molti team incontrano per la prima volta gli strumenti di aggiornamento come richiesta di funzionalità del prodotto. Un cliente ha bisogno di un hotfix più veloce, un team di supporto vuole meno reinstallazioni, o una rilascio mobile richiede un modo per bypassare i ritardi di revisione del negozio. Questa prospettiva è troppo piccola. Una volta che il tuo'app dipende da pacchetti open source, l'aggiornatore diventa un punto di controllo per la freschezza, la sicurezza del rollback e la fiducia dei code.

La scala dietro a quel cambiamento è già visibile nella catena di fornitura. Se i pacchetti si muovono a un volume di richieste di un trilione, un percorso di aggiornamento difettoso non colpisce solo un installazione, ma si moltiplica attraverso i canali, le regioni e i treni di rilascio. L'aggiornatore si trova davanti a tutto ciò. È la porta finale prima che i code raggiungano gli utenti finali, e ogni controllo aggiuntivo, firma e percorso di fallback deve guadagnare il suo posto.

Un buon modello mentale è trattare la logica dell'aggiornamento come lavoro di hosting e manutenzione, non come plugin che si aggiunge alla fine. Più il tuo app è critica per le release, più il tuo aggiornamento assomiglia a parte delle operazioni. Un'overview pratica di quel mindset è descritto nel 2026 guida di hosting e manutenzione , che è utile perché la stessa disciplina si applica qui, il patching, la verifica e il rollback sono preoccupazioni operative, non solo dettagli ingegneristici.

Come funziona l'aggiornamento

Un aggiornamento affidabile esegue di solito quattro compiti. Esso controlla una fonte remota per il canale o la versione giusta, scarica solo ciò che serve, verifica che il payload sia autentico, e applica il risultato in un modo che non lascia l'applicazione rotta in volo. Se alcune di quelle fasi sono deboli, l'intera esperienza si sente poco affidabile anche quando il livello di trasporto è veloce.

Quello è il motivo per cui la distinzione tra “può recuperare gli aggiornamenti” e “può consegnare gli aggiornamenti in modo sicuro” conta così tanto. Le squadre spesso iniziano cercando una libreria che renda la distribuzione più facile, poi scoprono che il problema più difficile è la fiducia, la distribuzione in fasi e la ripresa. Per le squadre Capacitor, un punto di partenza utile è l'ecosistema intorno al modello di aggiornamento open-source descritto in Capgo's Capacitor guida per l'aggiornamentoperché mostra come la consegna client-side diventi parte delle meccaniche di rilascio dell'applicazione.

Dove questi strumenti si presentano

Si vede il pattern nelle app mobili costruite con Capacitor, nei tool desktop costruiti con Electron e anche nel software di dispositivo specializzato dove l'app non può dipendere da un flusso di lavoro di tipo store. In ogni caso, l'aggiornatore è un ponte tra il controllo di rilascio server-side e l'esecuzione client-side. Quel ponte deve essere stretto, esplicito e facile da auditare.

Per un ingegnere mobile senior, la domanda pratica è semplice. Questo aggiornatore può consegnare un bundle, provare che è valido e tornare indietro pulito se il bundle è sbagliato? Se la risposta è vaga, lo strumento è ancora un prototipo.

Come funziona un Aggiornatore Open Source sotto la cappa

Un aggiornatore di produzione separa metadati dal blob di dati. Il client richiede per primo un manifesto compatto che dice quale versione è disponibile, cosa è cambiato e cosa il dispositivo dovrebbe aspettarsi. Solo dopo scarica il payload stesso, o il delta tra bundle di origine e di destinazione, che è come molti sistemi tengono le trasferimenti più piccoli di una reinstallazione completa (il design di aggiornamento di Android).

Un infographic a quattro passaggi che illustra il processo di ciclo di aggiornamento dal controllo periodico all'applicazione finale atomica.

The update path from check to apply

Il ciclo di vita inizia di solito con un controllo della versione. L'app invia un ping a un endpoint remoto, spesso all'avvio o alla ripresa, e chiede se esiste una versione più recente del suo canale corrente. La risposta del server rimane intenzionalmente piccola, perché il client ha bisogno solo di dati sufficienti per decidere se continuare.

Poi arriva la comparazione del manifesto. Il manifesto dice al client quali file, hash o identificatori di bundle dovrebbero esistere nella versione di destinazione. Quella comparazione è il punto in cui l'aggiornatore decide se ha bisogno di un payload completo o di un set di delta più piccolo. Un aggiornatore ben progettato si comporta più come un fetch di oggetti Git che come un download di archivio completo, perché solo il contenuto modificato dovrebbe essere trasferito via cavo.

Dopo di che, il client scarica il blob di dati . In sistemi basati su bundle, ciò può essere un pacchetto di asset web o un archivio compresso. In sistemi basati su file, ciò può essere un insieme di artefatti modificati che vengono assemblati localmente. In ogni caso, la parte importante è che il client non si fida di byte solo perché sono arrivati.

Infine, l'aggiornatore esegue un' applicazione atomica. La nuova versione è messa in scena, validata e sostituita in un passo controllato anziché sostituire file in esecuzione pezzo per pezzo. L'applicazione atomica riduce la possibilità di un installazione a metà, che è l'equivalente di un'aggiornamento di migrazione del database parziale.

Regola pratica: se l'aggiornatore non può spiegare cosa è cambiato prima di scaricare, probabilmente stai inviando un payload completo più spesso del necessario.

Perché i payload delta sono importanti

I payload delta sono la parte che molti team sottovalutano. Fanno più che salvare banda, riducono l'esposizione durante il rollout perché il client gestisce solo la superficie di cambiamento. Ciò conta nelle reti mobili, nei dispositivi con risorse limitate e in qualsiasi punto un riavvio o un trasferimento fallito è costoso.

Il manifesto vi dà anche spazio per la politica. Potete decidere se un build è idoneo per un flusso beta, un rollout di produzione in fase di staging o un rilascio specifico per i clienti. In un flusso di lavoro Capacitor, quel controllo del canale si mappa chiaramente alla spedizione di bundle web senza dover tornare ogni volta attraverso la store di app. Per una riferimento pratico su quel flusso di lavoro, vedere un riferimento pratico per i flussi di lavoro di aggiornamento live Capacitor.

Cosa rende il sistema affidabile

La sincronizzazione non può contare solo sulla sicurezza dei trasporti. Ha bisogno di controlli di integrità sul manifesto e sul carico, quindi un modello di applicazione che eviti di corrompere l'installazione live. È per questo che i sistemi maturi separano la decisione di cosa cambiare dalla scrittura dei byte. La separazione offre un luogo per verificare prima di modificare qualcosa.

Quando gli squadre saltano quella separazione, costruiscono spesso percorsi di aggiornamento fragili che sono difficili da debuggare e ancora più difficili da ripristinare. I sistemi migliori trattano la verifica come parte della pipeline di applicazione, non come un extra estetico.

Perché sopravvivere agli aggiornamenti dannosi è più importante del loro recupero.

Ottenere byte sui dispositivi è routine. Il problema più difficile è mantenere la produzione stabile quando un nuovo pacchetto esporre un bug, una disallineamento di configurazione o un'assunzione rotta nell'ambiente live.

Endor Labs ha riferito che 95% degli aggiornamenti di versione open-source contengono almeno un cambiamento dirompentee anche le patch hanno una 75% probabilità di causare un break (Infosecurity Magazine copertura della ricerca di Endor LabsQuesto cambia la mia valutazione di un sincronizzatore nella pratica. Mi importa meno di sapere se può scaricare una versione e più di sapere se può assorbire la falla senza costringere gli utenti a un build funzionante.

La rollback non è facoltativa

Un sincronizzatore serio ha bisogno di un percorso di rollback chiaro. wyUpdate documenta la rollback in caso di errore irreversibile o annullamento dell'utente, e TUF è stato costruito per aggiungere fiducia stratificata e verifica contro compromissione del repository o della chiave di firma (wyUpdate e TUF di riferimentoEssi risolvono parti diverse del problema, ma la lezione si allinea, la ripresa deve essere parte del design fin dall'inizio.

In ambito mobile, ho visto bundle cattivi partire perché il code compilato, gli asset firmati e il dispositivo di test passato. La falla si manifestava solo quando un piccolo subset di dispositivi colpiva un caso di bordo nello stato di runtime. Se l'aggiornatore non può ripristinare la versione precedente funzionante automaticamente, il carico di supporto cresce rapidamente e il rilascio diventa una responsabilità.

La rollback dovrebbe essere noioso. Se gli operatori hanno bisogno di un playbook di recupero manuale ogni volta che un bundle si comporta male, il processo di rilascio è già troppo fragile.

La verifica dell'integrità protegge la via di rilascio

Le verifiche dell'integrità fanno più che bloccare payload malintenzionati. Catturano anche la corruzione, gli artefatti di canale sbagliato e gli errori di pubblicazione accidentali prima che l'app scriva qualcosa di permanente. Ciò conta in ambienti regolamentati, dove un rilascio fallito può creare un impatto sui clienti e problemi di audit allo stesso tempo.

La progettazione di un aggiornatore sicuro e il controllo di rilascio operativo si incontrano nella verifica. Se il tuo aggiornatore controlla firme, verifica manifesti e rifiuta di applicare qualcosa ambiguo, riduci un gran numero di rischi a basso livello. La verifica da sola non limita il raggio d'azione di un'esplosione, però. La distribuzione in fasi ancora conta.

La distribuzione in fasi limita il danno

La Staging ti consente di pubblicare un aggiornamento a un pubblico ristretto per prima, osservare il comportamento e poi allargare la rilascio solo se i dati di telemetria rimangono puliti. Quel controllo è particolarmente prezioso per le app faccia a faccia con i clienti, dove un rilascio veloce è utile solo se non costringe a un rollback pochi minuti dopo.

Per me, lo spostamento dell'evaluazione è semplice. Un sicuro aggiornatore non è quello che aggiorna più velocemente. È quello che rende le rilasci difettosi piccoli, visibili e reversibili.

Aggiornatore Open Source Auto-Hostato Versus Servizio di Aggiornamento Gestito

L'aggiornatore auto-hostato attrae le squadre che desiderano un controllo diretto sulle chiavi di firma, sui manifesti, sulle regole di distribuzione e sulla conservazione dei dati. I servizi di aggiornamento gestiti attrae le squadre che desiderano meno infrastruttura da gestire e più barriere operative costruite in. Entrambi possono funzionare. La scelta sbagliata è spesso quella che ignora il carico del giorno due.

Un approccio ibrido è comune nella pratica, dove il plugin del client è open source ma la layer di consegna e politica è gestita. Quel modello dà alle squadre un gran controllo senza costringerle a gestire ogni pezzo della pipeline di rilascio da soli. Un esempio utile di come le squadre pensano attraverso quel trade-off è il discussione sui live updates auto-hostati.

Confronto tra Aggiornatore Auto-Hosted e Aggiornatore Gestito

Dimensione Aggiornatore Open Source Auto-Hostato Servizio di Aggiornamento Gestito
Carico di infrastruttura Il tuo team gestisce lo storage, la consegna, la firma, il monitoraggio e la ripristino. Il provider possiede la maggior parte della logistica di consegna
Modello di sicurezza Controllo totale, ma anche la piena responsabilità delle chiavi e della politica di fiducia Controlli di sicurezza centralizzati con confini definiti dal fornitore
Osservabilità Può essere molto profondo se lo costruisci bene, ma devi costruirlo Di solito integrato, con visibilità a livello di dispositivo e storia delle versioni.
Controllo di distribuzione Personalizzabile in modo molto dettagliato se mantieni l'engine di politica Di solito più facile da gestire all'interno di canali e cohort
Compatibilità con le normative Se il tuo team ha bisogno di un controllo interno esplicito Se le controlli del fornitore sono allineati alle vostre esigenze di audit

Come valutare il costo totale

Il self-hosted sembra più economico sulla carta perché il software stesso può essere open source. In pratica, tuttavia, avete ancora bisogno di infrastruttura di firma, distribuzione CDN, automazione di distribuzione, osservabilità e un modo per gestire il rollback quando qualcosa va storto. Quello è un grande spazio operativo per un piccolo team.

Gli servizi gestiti assorbono gran parte di quel carico, ma aggiungono una relazione con il fornitore e un insieme di vincoli del prodotto. Per un team che distribuisce applicazioni regolamentate o faccia a faccia con i clienti, quel trade-off può essere valutato se il servizio vi dà i log, il controllo del canale e il comportamento di recupero che avete bisogno. Per un team di piattaforma con strumenti interni forti, il self-hosted può essere il giusto fit perché mantiene il percorso di rilascio all'interno del proprio piano di controllo.

Cosa decide di solito la scelta

Il costo è solo un fattore. La proprietà del percorso di rilascio è di solito il fattore decisivo. Se il vostro aggiornatore deve sopravvivere agli audit, alle escalazioni di supporto e alle finestre di rollback strette, il costo totale di proprietà è dove l'indicazione si trova.

Integrare un aggiornatore in Capacitor e App di Electron

On our team, the first time updater tooling came up was when a support lead asked for emergency hotfixes during a holiday window. That kind of request changes the conversation fast. Capacitor and Electron solve similar delivery problems in different runtime shapes, so the updater should fit the platform instead of forcing one release pattern everywhere. In Capacitor, the updater is usually tied to web bundle delivery and app lifecycle events. In Electron, the updater follows the desktop app’s code signing and restart model much more strictly.

Se si sta spostando da strumenti di aggiornamento live più vecchi, si dovrebbe aspettarsi che la configurazione cambi più della mentalità. L'app ancora ha bisogno di un canale di rilascio, una fonte di pacchetti e un punto di decisione per quando applicare un aggiornamento. La differenza pratica è nella pipeline di rilascio. È necessario eseguire controlli di firma prima della pubblicazione, una mappatura chiara dal pacchetto di costruzione al canale e un percorso di riavvio che si comporta in modo predittivo alla prossima esecuzione. Per i modelli di aggiornamento specifici di Electron, le note sull'aggiornamento di Electron sono un punto di riferimento pratico.

Capacitor integrazioni dei modelli

Per Capacitor, il primo compito è installare il plugin di aggiornamento, puntarlo all'endpoint di aggiornamento e decidere quale canale utilizzare per ogni costruzione. Beta, staging e production dovrebbero essere espliciti, perché gli errori di canale sono uno dei modi più facili per spedire il pacchetto sbagliato agli utenti sbagliati. Ho visto team trattare la canalizzazione come un compito di pulizia successivo e che di solito finisce con un rollback confuso.

La prossima mossa è collegare la verifica dell'aggiornamento agli eventi del ciclo di vita dell'applicazione. Lancio e ripresa sono le pale aste ovvie, perché gli utenti attraversano naturalmente quei confini. Alcune squadre aggiungono anche un timer, ma ciò funziona solo se il modello di stato dell'applicazione può tollerare controlli di background senza creare ritentativi rumorosi o download non necessari. Un controllo di background che si attiva mentre l'app è già in fase di ripresa può attivare fetch duplicati, quindi il modello più sicuro è scegliere un trigger per ogni transizione di stato e mantenere il comportamento di ritentativo esplicito.

La tua pipeline di costruzione dovrebbe pacchettizzare il bundle web, firmare l'artefatto dove richiesto, pubblicarlo sul servizio di aggiornamento e registrare quale canale lo ha ricevuto. Dovrebbe anche timbrare la costruzione con l'identificatore di commit o rilascio che ha prodotto il bundle, in modo che il supporto possa tracciare cosa è stato spedito senza dover scavare nei log. Se lo step di pubblicazione è manuale, il drift si manifesta rapidamente, di solito come una costruzione che esiste nel CI ma non raggiunge mai il canale dell'applicazione che sta controllando.

Modelli di integrazione di Electron

Il flusso di autoUpdater di Electron è più opinativo. L'app verifica, scarica e poi applica gli aggiornamenti in un percorso orientato al riavvio, che si adatta meglio al software desktop rispetto al patching di background. Ciò significa che il tuo setup di firma code deve essere solido prima della prima rilascio, perché le catene di fiducia desktop sono meno perdonanti delle sostituzioni di asset web.

Per le squadre che stanno migrando da strumenti più vecchi, il cambiamento più grande è solitamente nella quantità di metadati di rilascio che conservano. Potreste perdere alcune comodità se l'antico sistema nascondeva la complessità del canale dietro un singolo API, ma guadagnate un controllo più chiaro sulla provenienza del pacchetto e sul comportamento di rollback. Questo scambio è valutabile per le squadre che inviano aggiornamenti frequenti per i desktop, perché quando un problema si verifica, avete bisogno di sapere esattamente quale binario è stato offerto, quale è stato accettato e se l'utente ha riavviato in esso.

La migrazione più pulita è quella che considera l'aggiornamento come un problema di artefatto di build, non come un problema di logica dell'applicazione.

Cosa collegare alla CI

Un flusso di lavoro affidabile solitamente fa tre cose. Costruisce il pacchetto, firma l'artefatto e pubblica sul canale corretto. Dopo di che, dovrebbe emettere metadati di rilascio che le squadre di supporto possono utilizzare per tracciare quale costruzione è stata offerta a quale cohort, e un puntatore di rollback che vi consente di fermare l'esposizione se il nuovo pacchetto inizia a fallire.

Un flusso di lavoro di rilascio che non può rispondere a quelle domande è troppo vago per gli aggiornamenti in tempo reale. L'applicazione potrebbe ancora installarsi, ma nessuno avrà fiducia nel processo quando la prima incidente si verifica.

Osservabilità e Risoluzione Problemi per Aggiornamenti in Tempo Reale

Aggirsi gli aggiornamenti avvengono in modi ordinari. I dispositivi sono offline, i manifesti non corrispondono alla versione installata, le verifiche di firma falliscono dopo una rotazione di chiave, o un utente è bloccato su un vecchio pacchetto perché non ha completato un ciclo di riavvio completo. Non è necessario avere una perfetta telemetria per iniziare, ma è necessario avere una sufficiente visibilità per spiegare cosa è accaduto su un dispositivo specifico.

Buona visibilità degli aggiornamenti è la stessa mentalità di una buona visibilità dell'applicazione, solo puntata verso il pipeline di rilascio. guida all'osservabilità dell'applicazione è utile perché inquadra il percorso di rilascio come qualcosa che puoi ispezionare, non solo qualcosa che spera di funzionare.

Cosa registrare

Vorresti registri per dispositivo mostrando quale versione è stata offerta, scaricata, verificata e applicata. Vorresti anche tracciare l'adozione per vedere se una versione sta passando attraverso la tua base di utenti, più registri di fallimento per errori di download, fallimenti di verifica e trigger di rollback. La storia delle versioni è importante anche perché il supporto deve sapere quale versione sta utilizzando l'utente prima di chiedergli di riprovare.

Quei registri non devono essere rumorosi. Devono essere precisi. Un registro di aggiornamento pulito dovrebbe permetterti di rispondere a quattro domande velocemente, cosa il dispositivo ha chiesto, cosa il server ha offerto, se la verifica è passata e se l'applicazione finale è riuscita.

Modi di fallimento comuni

A un utente bloccato su una versione vecchia significa che il flusso di aggiornamento non è mai arrivato in uno stato di applicazione riuscito. In pratica, ciò può essere un problema di riavvio, una disallineamento di canale o un problema di rete che ha mantenuto il manifesto aggiornato ma non ha mai consegnato il payload. Un utente di produzione che riceve una versione beta solitamente indica un errore di mapping di canale o un passaggio di pubblicazione che ha mirato alla wrong cohort.

Gli errori di firma spesso si manifestano dopo una rotazione di chiave o un processo di pubblicazione che ha firmato l'artefatto sbagliato. Quando ciò accade, la prima cosa da verificare non è il client. È il registro di rilascio server-side e la pipeline di firma.

Se il supporto non può vedere la versione offerta e la versione applicata fianco a fianco, il debugging richiederà più tempo del dovuto.

Il minimo rete di sicurezza

Almeno, costruisci un dashboard che mostra la distribuzione delle versioni, i conti di fallimento e gli eventi di rollback. Poi assicurati che il supporto possa cercare un dispositivo per identificatore o account cliente e vedere il percorso di rilascio associato. Ciò non prevenirà ogni problema, ma trasformerà un lamento di aggiornamento vago in qualcosa di azionabile.

Scegliere la strategia di aggiornamento giusta per il tuo team

Solitari sviluppatori desiderano spesso una consegna con basso impatto operativo e il minimo di macchinari di rilascio che possono permettere. Per quel profilo, un aggiornatore gestito o ibrido è spesso più facile da mantenere rispetto a una pila di hosting completamente autonoma. Piccoli team che distribuiscono applicazioni cross-platform spesso hanno bisogno di rilasci in fasi e controllo del canale, quindi un modello ibrido con un client open source e un backend gestito tende a funzionare bene.

Le squadre mobili aziendali in settori regolamentati dovrebbero iniziare con l'auditabilità, il controllo del rollback e le barriere di approvazione. Possono utilizzare strumenti open source di hosting autoamministrato se sono pronti a gestire la layer di piattaforma, ma molti preferiranno un sistema gestito che offre loro una maggiore visibilità operativa senza dover costruire ogni primitivo di rilascio da zero. Le agenzie che gestiscono molte applicazioni client hanno bisogno di controllo multi-tenant e separazione chiara tra i clienti, il che li porta spesso verso un setup gestito o ibrido.

Una grafica mostrante tre strategie di aggiornamento software per sviluppatori etichettate come Solo/Indie, Piccola Squadra e Enterprise con icone.

Una regola di decisione pratica

If you can’t answer these three questions, don’t pick a delivery model yet. Can you roll back without shipping a new app store version, can you see what happened on each device, and can you keep the wrong channel out of production users? If any of those are no, the safer choice is the one that gives you those controls with the least extra machinery.

Inizia con la sicurezza, non con la velocità. La prima distribuzione dovrebbe dimostrare la tua rete di sicurezza, non la tua ambizione.

Un passo successivo semplice è quello di auditare il tuo percorso di aggiornamento attuale, testare il rollback prima di averne bisogno e pubblicare una sola versione di staging controllata prima di ampliare l'accesso. Se stai cercando una live update piattaforma costruita per Capacitor e Electron con controllo di canale, comportamento di rollback, registrazioni per dispositivo e pubblicazione amichevole per CI, visita Capgo e valutalo rispetto ai rischi di rilascio che hai.

Aggiornamenti in tempo reale per le app Capacitor

Quando un bug nel layer web è attivo, invia la correzione attraverso Capgo invece di aspettare giorni per l'approvazione della store. Gli utenti ricevono l'aggiornamento in background mentre le modifiche native rimangono nel normale percorso di revisione.

Ultimi articoli dal nostro Blog

Capgo ti dà le migliori informazioni che ti servono per creare una vera app mobile professionale.