Hai completato l'app. Eseguita correttamente nel browser, l'interfaccia utente si sente giusta e i flussi di base sono stabili. Poi il deployamento compare e trasforma un progetto Ionic semplice in tre diverse tracce di rilascio, ognuna con le proprie regole di firma, processi di revisione e strategie di aggiornamento.
È lì che spesso si perde molto tempo. Non nel scrivere funzionalità, ma nel cucire insieme le costruzioni native, l'hosting web, l'automazione di rilascio e i ripari post-lancio in un processo che le persone possano ripetere senza indovinare. Impacco Ionic Funziona meglio quando smetti di considerare iOS, Android e PWA come progetti separati e inizi a considerarli come un sistema di rilascio unico con output diversi.
Tavola dei Contenuti
- Ora che hai creato il tuo app Ionic, cosa fare?
- Preparare il tuo progetto per la produzione
- Deploy nativo per iOS e Android
- Distribuisci la tua App Ionic come PWA
- L'automazione dei build con pipeline CI/CD
- L'invio di aggiornamenti istantanei con Capgo
- Problemi e Pratiche di Deploy Comuni
Ora il tuo App Ionic è Costruito, cosa fare?
La maggior parte dei sviluppatori incontra lo stesso punto. ionic serve Si guarda bene, le chiamate locali API funzionano, e l'app sembra completa. Non è completa. È solo testata nel browser, non firmata e non collegata alle restrizioni di App Store, Play, e hosting web di produzione.
La distribuzione in produzione cambia le domande che si fanno. Si smette di chiedere se l'app si rende e si inizia a chiedere se il bundle è riproducibilese i progetti nativi sono sincronizzati, se le variabili di ambiente sono separate in modo pulito, e se si può risolvere un bug non-nativo dopo il rilascio senza creare uno scompiglio di resubmissione nel negozio.
Questo spostamento è importante perché Ionic si trova in una corsia ibrida. La tua app ha un layer web, ma le conchiglie native decidono ancora come viene installata, firmata, valutata e aggiornata. Le squadre che trattano la distribuzione come un dopo pensiero finiscono spesso con una deriva di configurazione tra piattaforme, progetti nativi obsoleti, e passaggi di rilascio manuali fragili. Le squadre che lo fanno bene definiscono un percorso di rilascio unico per tutti i target e rendono esplicito ogni passaggio specifico per piattaforma.
Un ciclo di vita di deploy pulito solitamente assomiglia a questo:
- Preparare il progetto così Capacitor config, identificatori dell'applicazione, icone, valori di ambiente e build di produzione sono coerenti.
- Creare artefatti di rilascio nativi per Android e iOS utilizzando gli strumenti di piattaforma, non solo comandi Ionic.
- Invia un build PWA per gli utenti che hanno bisogno di accesso immediato al browser.
- Automatizza le parti routine in modo che i build non dipendano da un solo sviluppatore che ricorda un elenco di controllo.
- Pianifica gli aggiornamenti post-lancio in modo che i ripari per gli asset web non attendano la revisione dell'app store quando non è necessario.
Se la tua applicazione attuale sembra ancora “un'app web che si apre in un guscio di telefono”, risolvi questo problema per primo. Una utile guida per questa transizione è questo manuale su trasformare un'app web in un'app mobile con Capacitor.
La tua prima sottomissione di store di successo solitamente deriva dalla disciplina, non dalla creatività.
Preparazione del Progetto per la Produzione
Prima di generare qualsiasi build, trattare il progetto come un candidato di rilascio. La maggior parte delle distribuzioni rotte deriva da piccoli disallineamenti che erano innocui nel development locale e costosi in produzione.

Inizia con i controlli di ambiente
Esegui i fondamentali per prima:
ionic doctor
npm ci
npx cap doctor
ionic doctor rileva comuni problemi di CLI e di ambiente. npm ci è meglio di npm install per il lavoro di rilascio perché installa esattamente dal file di lockfile come commesso. npx cap doctor aiuta a portare alla luce le disallineamenti dei plugin e delle piattaforme prima che Xcode o Android Studio li trasformino in errori più difficili da leggere.
Utilizza i build di rilascio da uno stato pulito ogni volta che è possibile. Se l'app si costruisce solo dopo la patch locale, le cartelle cancellate o i file nativi modificati a mano, il tuo processo di distribuzione non è ancora stabile.
Alcuni controlli sono degni di essere eseguiti ogni volta:
- Verifica l'ID dell'app. Modificare
appIdritardare può creare confusione sullo store e la firma. - Conferma lo stato del plugin. Le modifiche ai plugin nativi richiedono spesso una sincronizzazione fresca, e a volte un riapertura della piattaforma.
- Recensisci l'iniezione dell'ambiente. I punti di fine API, le chiavi e le bandiere di feature dovrebbero provenire da una configurazione specifica dell'ambiente, non da costanti inline.
Per una maggiore analisi di cosa dovrebbe differire tra i target di rilascio, questo articolo su le differenze tra sviluppo e produzione nei Capacitor app è una guida pratica.
Blocca la configurazione Capacitor
Apri capacitor.config.ts e recensiscila come l'infrastruttura di produzione, non come metadati dell'app.
A un file tipico assomiglia questo:
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.example.myapp',
appName: 'My App',
webDir: 'www',
bundledWebRuntime: false,
};
export default config;
Il seguente campo è importante:
| Impostazione | Perché è importante | Errore comune |
|---|---|---|
| appId | Identificatore del pacchetto nativo utilizzato dai negozi e dalla firma | Lasciare un placeholder da un progetto starter |
| appName | Nome dell'app di faccia nei gusci nativi | Utilizzare un etichetta di sviluppatore e dimenticarsi di cambiarla |
| webDir | Directory Capacitor copia all'interno dei progetti nativi | La costruzione in una cartella di output diversa da quella che Capacitor aspetta |
Se utilizzi un server di sviluppo locale durante lo sviluppo, assicurati che la configurazione di produzione non punti i costruzioni native verso di esso. Quel singolo errore causa molti 'funziona in dev, schermo bianco in rilascio' incidenti.
Regola pratica: Se un costrutto di rilascio dipende da una impostazione di server locale attiva, non è un costrutto di rilascio.
Genera gli asset una volta sola
Non ridimensiona manualmente le icone e le schermate di splash. Utilizza un singolo asset di alta qualità come fonte e generare gli output per le piattaforme da esso.
Nelle attuali workflow di Capacitor, molti team utilizzano gli strumenti di asset ufficiali attraverso l'ecosistema CLI. Il pacchetto esatto può variare in base alla versione dello stack, ma la disciplina è la stessa: tieni una sola icona canonica e una sola schermata di splash canonica sotto controllo di versione, genera gli output, poi esamina i risultati all'interno di Xcode e Android Studio prima della sottoscrizione.
Ciò evita un modo di fallimento familiare dove l'icona PWA è attuale, Android utilizza ancora un asset di foreground più vecchio e iOS mostra un'immagine di lancio datata perché una cartella non è mai stata aggiornata.
Un passaggio di produzione solido include:
- Costruisci gli asset web in modalità di produzione.
- Sincronizza i progetti nativi.
- Apri ogni IDE nativo e ispeziona manualmente nome dell'app, icone, autorizzazioni e impostazioni di firma.
- Testa l'app su un dispositivo fisico prima di pacchettizzare qualcosa per le store.
Deployamento Nativo per iOS e Android
Il deployamento nativo è il punto in cui la tua app Ionic smette di essere “solo web” e inizia a rispondere alle regole della piattaforma. Il bundle web può essere condiviso, ma iOS e Android divergono rapidamente non appena entrano in gioco la firma, la confezione e le richieste delle store.

Costruisci la layer web per prima.
Produce sempre asset web freschi prima di toccare la confezione nativa:
ionic build
npx cap sync
Alcune squadre dicono ancora ionic build --prod per abitudine. In progetti moderni, il comportamento di produzione esatto dipende dalle tue tooling del framework, ma il principio non è cambiato: genera un build di rilascio ottimizzato, poi sincronizzalo con le piattaforme native.
Dopo la sincronizzazione, apri i progetti nativi direttamente:
npx cap open android
npx cap open ios
Questo è anche un buon punto per revisionare la configurazione di Android per le app Capacitor Se il tuo progetto ancora ha una configurazione nativa incerta.
Flusso di rilascio Android
La strada di rilascio di Android è di solito più prevedibile di quella di iOS, ma ancora si rompe quando la firma è configurata in modo casuale.
Genera un keystore di caricamento una volta sola e memoralo in modo sicuro:
keytool -genkeypair -v -keystore upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
Tieni il file del keystore, l'alias e le password in un archivio segreto sicuro. Non li commetti. Non li lasciare in un chat di squadra. Non assumere che qualcun altro li abbia salvati.
Poi collega la firma a Gradle. Le squadre configurano questo in build.gradle file o utilizzano l'interfaccia utente di firma di Android Studio, a seconda di quanto del processo vogliono scriptare. Una configurazione tipica include un signingConfigs blocco e un tipo di costruzione di rilascio che punta a esso.
L'artefatto di rilascio che si desidera di solito per la sottoscrizione di Play Store è un AAB, non un APK di debug. In Android Studio, utilizza il percorso della menu per generare un bundle firmato, scegli la variante di rilascio e esporta l'app bundle. Se preferisci gli edifici a riga di comando, Gradle può gestirlo una volta configurata la firma.
Comuni trappole Android si manifestano in modi familiari:
- Password di keystore errato produce fallimenti di firma che sembrano più drammatici di quanto siano.
- Residui di debug della firma creare build che installano localmente ma non sono validi per la rilascio nel negozio.
- Disincastro di plugin si verifica quando qualcuno modifica una dipendenza di plugin nativo e salta
npx cap sync. - Nome di pacchetto non corrispondente causa problemi se l'entry dell'app Play Store è stato creato con un identificatore diverso.
Un pattern che funziona bene è questo: commit web code, costruisci il layer web, sincronizza nativo, costruisci l'artefatto di rilascio dal progetto nativo, e archivia l'hash di commit esatto accanto al bundle generato.
Flusso di rilascio iOS
iOS è più rigoroso, e la maggior parte dei problemi di distribuzione derivano dalla confusione dell'identità di firma piuttosto che code problemi.
Aprite il progetto in Xcode e andate direttamente a Firma & CapacitàAssicurati di aver selezionato la squadra corretta, che l'identificatore del pacchetto corrisponda al record dell'applicazione che intendi distribuire, e che la firma automatica sia funzionante come previsto o sostituita intenzionalmente con la configurazione manuale.
Di solito, si tratta di questi elementi in movimento:
| Elemento | Cosa fa | Dove le persone inciampano |
|---|---|---|
| Identificatore del pacchetto | Lega l'applicazione al record dell'App Store e alla configurazione di provisioning | Non corrisponde a ciò che Apple aspetta |
| Certificato | Identifica il firmatario | È installato o è scaduto il certificato sbagliato |
| Profilo di provisioning | Autorizza la costruzione per un'app specifica e contesto | Il profilo non corrisponde all'ID dell'app o al team |
Per il lavoro di rilascio locale, costruisci l'app in Xcode, seleziona un dispositivo fisico o un dispositivo iOS generico come destinazione, quindi scegli Archivia. Una volta completato l'archiviazione, utilizza la finestra dell'Organizzatore per validare e distribuire su App Store Connect.
Se Xcode dice che la firma è rotta, leggi l'ID del bundle esatto, il team e i nomi dei profili prima di modificare qualcosa. Regenerare casualmente i certificati spesso peggiora il problema.
Se non hai un Mac, ancora hai bisogno di un ambiente macOS per produrre un artefatto di rilascio iOS reale. In pratica, le squadre risolvono questo problema con un Mac locale, un Mac in affitto nel cloud o un servizio di CI/CD mobile che esegue costruzioni macOS per loro.
Questa guida è un utile primo passo prima della tua prima archiviazione e sottoscrizione:
Un'altra lezione dura imparata: non editare i file nativi generati casualmente se puoi evitarlo. Inserisci la configurazione ripetibile nelle impostazioni del progetto, nella configurazione del plugin o nei script di costruzione. Le modifiche manuali non documentate sono il motivo per cui un rilascio ha successo una volta e poi fallisce la volta successiva quando un altro sviluppatore sincronizza il progetto.
La distribuzione della tua app Ionic come PWA
Un percorso PWA dà alla tua app Ionic la strada più veloce per gli utenti. Nessuna revisione della store. Nessuna cerimonia di firma. Nessuna frizione di installazione per le persone che hanno bisogno di accedere immediatamente dal browser.
Quella velocità è utile anche quando le app native rimangono il tuo canale principale. Molti team utilizzano la PWA come superficie di distribuzione parallela per strumenti interni, esperienze di accesso pre-login, pannelli amministrativi o mercati in cui l'installazione del negozio aggiunge una resistenza inutile.
Costruisci per il web con intenzione
La tua PWA inizia con una build web di produzione:
ionic build
La parte importante non è il comando stesso. È assicurarsi che l'output sia ottimizzato, punti ai servizi di produzione e contenga gli asset finali e il manifesto che intendi distribuire.
Controlla questi file prima di distribuirli:
index.htmldovrebbe fare riferimento agli asset compilati corretti.manifest.webmanifestdovrebbe avere il nome di produzione, icone e impostazioni di visualizzazione che desideri.- File del servizio di lavoro dovrebbero esistere solo se intendi utilizzare la cache offline.
- Output dell'ambiente dovrebbe fare riferimento a endpoint live, non a servizi locali o di staging.
Abilita il comportamento offline con cura
If il tuo stack Ionic utilizza Angular, il servizio di lavoro Angular è il percorso usuale per il supporto offline e la cache. È potente, ma è anche facile da configurare male.
Cache troppo aggressivamente e gli utenti rimangono bloccati su dati obsoleti. Cache troppo poco e l'app non si sente resiliente quando le connessioni diventano flaccide. La configurazione giusta dipende dall'app. Una shell orientata al marketing può cache pesantemente. Una dashboard con dati operativi in rapida evoluzione ha bisogno di una strategia più conservativa.
Considera il supporto offline come una decisione di prodotto, non come un semplice checkbox. Alcune schermate dovrebbero cache. Altre dovrebbero sempre recuperare dati freschi.
Testa scenari reali, non solo ipotesi di tipo Lighthouse. Apri l'app una volta, disconnetti il dispositivo, rilancia l'app e ispeziona cosa funziona ancora. Poi riconnetti e conferma che il servizio di lavoro si aggiorni senza intrappolare gli utenti in una UI obsoleta.
Scegli l'hosting in base al flusso di lavoro
Per le PWAs Ionic, le piattaforme di hosting statico sono abbastanza sufficienti. Le principali opzioni che le squadre raggiungono sono Netlify, Vercel e Firebase Hosting.
Ecco la visione pratica del trade-off:
| Piattaforma | Scelta migliore | Controlla: |
|---|---|---|
| Netlify | Deployamenti statici semplici e anteprime | La comportamento di reindirizzamento richiede una revisione esplicita |
| Vercel | Gli squadri con un focus su frontend che utilizzano già flussi di lavoro basati su Git | Alcuni settaggi di routing dell'app necessitano di un aggiustamento |
| Firebase Hosting | Gli squadri che già utilizzano servizi Firebase | La struttura del progetto può diventare sovraccarica se Firebase fa troppo |
Un flusso di distribuzione diretto su qualsiasi di loro assomiglia a: collegare il repository, impostare il comando di build, impostare la directory di output, aggiungere variabili di ambiente, e verificare le regole di rewrite per evitare che la routing client-side si rompa al refresh.
Per le app Ionic che utilizzano la navigazione basata su router, lo setup di hosting deve inviare le rotte non corrispondenti al punto di ingresso dell'app. Se non è configurata la rewrite, la pagina di home funziona e i collegamenti profondi falliscono. È uno dei più comuni errori di distribuzione PWA.
Automazione dei Build con pipeline di CI/CD
Lavoro di rilascio manuale è accettabile una volta. Dopo di che, diventa una responsabilità. Qualcuno dimentica un passo di sincronizzazione, qualcuno costruisce da una branca sporca, qualcuno firma con la configurazione sbagliata, e improvvisamente l'artefatto generato non può essere più fidato.
Il CI/CD risolve questo problema trasformando la sequenza di rilascio in code. Invece di affidarsi alla memoria, si definisce esattamente come l'app viene costruita, sincronizzata, testata e pacchettizzata ogni volta.

Cosa appartiene alla pipeline
Per i progetti Ionic, una pipeline utile esegue questi compiti in ordine:
- Installa le dipendenze dal file di lock.
- Costruisce l'app web.
- Sincronizza le piattaforme di Capacitor.
- Esegui i test o almeno una basic validation.
- Produce gli artefatti nativi per la piattaforma di destinazione.
- Memorizza o pubblica l'output di costruzione.
Quel flusso è anche dove le buone abitudini di infrastruttura contano. Se i tuoi esecutori di build, il storage degli artefatti o i passaggi di distribuzione sembrano fragili, questa guida all'ottimizzazione cloud essenziale per le piccole imprese è degna di essere letta perché la stessa disciplina operativa si applica alle pipeline di consegna mobile. Essenziale ottimizzazione cloud per le piccole imprese È degno di essere letto perché la stessa disciplina operativa si applica alle pipeline di consegna mobile.
A forma pratica di GitHub Actions
GitHub Actions è una buona scelta di default perché molte squadre Ionic già ospitano code su GitHub. Il flusso di lavoro riportato di seguito mostra la forma generale per un rilascio di build Android.
name: Android Release Build
on:
push:
branches:
- main
jobs:
build-android:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm ci
- name: Build web assets
run: npm run build
- name: Sync Capacitor
run: npx cap sync android
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Build Android bundle
run: cd android && ./gradlew bundleRelease
Questo non firmerebbe un rilascio da solo a meno che non fornisca anche materiali per la chiave di sicurezza e la configurazione di compilazione di Gradle. Ciò è intenzionale. La firma dovrebbe rimanere separata dal file di workflow pubblico.
Se desidera un percorso di implementazione focalizzato sul mobile, questo post su l'impostazione della CI/CD per le app Capacitor è direttamente rilevante.
L'igiene delle segrete e delle firme
La parte più difficile della CI/CD per i dispositivi mobili non è scrivere YAML. È gestire le segrete senza creare un incidente futuro.
Usare segrete del repository o dell'organizzazione per:
- Le password delle chiavi di sicurezza
- Gli alias delle chiavi
- I file di chiave di sicurezza codificati
- API token utilizzati durante la release
- Valori di costruzione specifici dell'ambiente
Un modello comune per Android è quello di codificare in base64 il keystore, memorizzare la stringa codificata in un segreto, ricostruire la stringa durante il workflow e puntare Gradle al file ricostruito. Lo stesso principio si applica a qualsiasi materiale di firma: iniettalo durante la costruzione, non memorizzarlo nel repository.
Il CI/CD dovrebbe eliminare l'errore umano, non centralizzare la conoscenza tribale nascosta. Se solo un developer comprende come i segreti di release si combinano, il pipeline è ancora fragile.
Una raccomandazione pratica: separare la validazione dalla release. Lascia che le richieste di pull eseguano l'installazione, lint, test e costruzione web. Lascia che un ramo protetto o l'approvazione manuale attivi gli artefatti di produzione firmati. Ciò mantiene il pipeline veloce per lo sviluppo normale e controllato per la distribuzione effettiva.
Le aggiornamenti di spedizione istantanei con Capgo
I rilasci di archiviazione sono necessari per le modifiche native code, le modifiche di autorizzazione e qualsiasi cosa modifichi il binario dell'applicazione. Non sono un buon veicolo per ogni correzione di testo, correzione di stile o bug JavaScript che vive interamente nella layer web.
Quello è il motivo per cui Aggiornamenti OTA hanno importanza nei progetti Ionic e Capacitor. Consentono ai team di spedire gli asset web aggiornati agli app installati senza dover attendere la revisione del negozio, fintanto che la modifica rimane entro i limiti di cosa il shell nativo già supporta.

Cosa gli aggiornamenti OTA dovrebbero gestire
Utilizza gli aggiornamenti OTA per modifiche come:
- Correzioni dei logici JavaScript che non richiedono un nuovo plugin nativo.
- Adattamenti CSS per layout rotti o aggiornamenti del marchio.
- Copiare modifiche come testo, etichette e testo legale.
- Sostituisci asset statici ove l'app già sappia come caricarli.
Non usarli come workaround per vere modifiche native. Se aggiungi una nuova dipendenza nativa, modifichi i permessi o alteri qualcosa che il binario revisionato dallo store deve contenere, invia una rilascio normale dello store.
Quel confine conta perché il punto principale degli OTA è la velocità con controllo, non bypassare le regole della piattaforma con disinvoltura.
Configura i canali prima del tuo primo incidente
Le migliori workflow OTA utilizzano canali. Un canale di produzione fornisce aggiornamenti stabili agli utenti. Un canale di staging o beta riceve gli aggiornamenti per primi, in modo che i tester interni possano validarli su applicazioni installate in rete.
Quel modello ti aiuta a evitare il peggiore errore OTA, che è quello di inviare direttamente a tutti perché una correzione sembra urgente. Le correzioni urgenti ancora hanno bisogno di barriere di sicurezza.
Un setup tipico inizia con l'installazione del plugin e l'inizializzazione dell'applicazione secondo le istruzioni del documento del platform, quindi l'assegnazione del canale in base all'ambiente. L'articolo su aggiornamenti OTA sicuri per l'app store è un punto di riferimento utile per impostare correttamente quei confini.
Invia piccole correzioni senza toccare il nativo code
Una volta integrato l'aggiornatore, il workflow pratico diventa semplice. Costruisci gli asset web aggiornati, pubblicali sul canale destinato, quindi lascia che l'applicazione li prenda e li applichi al lancio secondo la tua politica di aggiornamento.
Un esempio reale è un hotfix per una regressione di layout mobile:
- Regola il CSS nell'app Ionic.
- Esegui la costruzione web di produzione.
- Pubblica il bundle risultante sul canale di staging.
- Testa le versioni installate.
- Promuovi o pubblica la stessa correzione per la produzione.
Quell'approccio cambia la risposta agli incidenti. Senza OTA, un bug nel layer web può lasciarti in attesa della revisione della store e dell'adozione da parte degli utenti della nuova versione binaria. Con OTA, puoi correggere i file interessati, inviarli al pubblico giusto e osservare il rollout in modo controllato.
Gli aggiornamenti veloci sono utili solo se puoi mirarli in modo sicuro e annullarli quando necessario.
Il team che beneficia di più dall'OTA non sono i team temerari. Sono team disciplinati con confini di rilascio chiari, canali denominati e l'abitudine di trattare le correzioni del layer web come un flusso separato dalle rilasci nativi.
Problemi comuni di distribuzione e migliori pratiche.
La maggior parte dei problemi di distribuzione non è unica. Si ripetono tra i team perché gli stessi errori continuano a verificarsi sotto pressione di scadenza.
Fallimenti che si ripetono.
Errori di firma Android solitamente si riducono al password sbagliato, alias sbagliato o file keystore sbagliato utilizzato nella configurazione di rilascio. Quando succede, smetti di girare le credenziali a casaccio. Verifica il file, l'alias e i valori segreti prima di procedere.
Errori di costruzione iOS spesso si risolvono con una disallineamento tra identificatore del bundle, selezione del team, certificato e profilo di provisioning. I messaggi di errore di Xcode possono sembrare densi, ma la disallineamento è spesso letterale. Uno di quei valori non si allinea con gli altri.
Schermate bianche dopo l'installazione sono un classico. Le cause comuni includono:
- Applicazione di produzione che punta a un server di sviluppo al posto di risorse bundle
- Risorse web non ricostruite prima
npx cap sync - prima di lavorare su una nuova funzionalità prima di lavorare
- Modifiche dei plugin non sincronizzate nelle progetti nativi
Valori di ambiente runtime mancanti
nella versione di rilascio effettiva
Abitudini di rilascio che prevenire il lavoro di riparazione
Il meglio delle pratiche sono noiosi, e questo è il motivo per cui funzionano.
Se il tuo team distribuisce Capacitor app e vuole una via più sicura per inviare aggiornamenti del layer web dopo il lancio, Capgo è consigliabile valutare. Ti offre un workflow OTA strutturato con canali, roll-out controllati e supporto per il rollback, in modo da poter inviare aggiornamenti di JavaScript, CSS, copia e asset senza trasformare ogni piccolo aggiornamento in un'altra richiesta di pubblicazione dell'app store.