Correggere le icone rifiutate dall’App Store: sRGB, canale alfa e altre insidie
La convalida delle icone in App Store Connect fallisce senza spiegazioni utili. Carichi un PNG da 1024×1024 che appare perfetto in ogni editor di immagini, e la risposta è una variante di «Impossibile elaborare l’immagine». Nessun riferimento allo spazio colore. Nessuna indicazione sul canale alfa. Solo un ostacolo tra l’invio della tua app e l’App Store.
In realtà, il validatore controlla un insieme ristretto di proprietà tecniche, e il mancato rispetto anche di una sola produce lo stesso errore generico. Le tre cause più comuni sono un profilo colore diverso da sRGB, di solito Display P3 esportato dagli strumenti di progettazione moderni, un canale alfa espressamente vietato dallo store e, meno frequentemente, una modalità colore indicizzata che non dovrebbe comparire in un’icona prodotta nel 2025, ma compare ancora quando i file passano attraverso vecchie pipeline di ottimizzazione. Tutti e tre i problemi si risolvono dal terminale in meno di un minuto, una volta capito cosa controllare.
Che cosa richiede davvero App Store Connect
I requisiti di Apple per l’icona della scheda nell’App Store sono precisi. Il file deve essere un PNG. Le dimensioni devono essere 1024×1024 pixel. Non deve esserci un canale alfa: né parzialmente trasparente, né completamente opaco, ma nessun dato alfa. Lo spazio colore dovrebbe essere sRGB: le Human Interface Guidelines di Apple indicano anche Display P3 e Gray Gamma 2.2 tra gli spazi colore supportati per le icone delle app, ma, nella nostra esperienza, sRGB è la scelta più sicura per l’icona dell’App Store. La modalità colore dovrebbe essere RGB TrueColor, non una palette indicizzata.
Il vincolo sul canale alfa esiste perché App Store Connect applica alle icone il proprio raggio di arrotondamento degli angoli e la propria composizione. Un’icona con canale alfa interferirebbe con questo processo. Il vincolo sRGB esiste perché lo store visualizza le icone su molti dispositivi con profili di visualizzazione diversi; sRGB è il riferimento comune. Display P3, lo spazio colore ad ampia gamma di Apple, è un’opzione di esportazione comune in strumenti come Figma, Sketch e Affinity Designer e, nella nostra esperienza, le icone contrassegnate come P3 sono all’origine di molti dei problemi trattati in questa guida.
Diagnosticare il problema con sips
macOS include sips (Scriptable Image Processing System), uno strumento da riga di comando che può ispezionare e trasformare immagini senza dipendenze di terze parti. È il modo più rapido per vedere esattamente cosa contiene il file dell’icona.
sips --getProperty all icon.png
L’output è un semplice elenco di proprietà. I campi rilevanti per la convalida dell’App Store sono hasAlpha, space e profile. Un file problematico mostra in genere qualcosa del genere:
hasAlpha: yes
space: RGB
profile: Display P3
Questa combinazione non supera la convalida. Il valore space: RGB non distingue tra RGB generico e sRGB: è il campo profile a chiarirlo. Un’icona pronta per il caricamento dovrebbe mostrare hasAlpha: no e il profilo «sRGB IEC61966-2.1» o equivalente.
Puoi anche interrogare singole proprietà per un controllo più rapido in uno script di build:
sips --getProperty hasAlpha icon.png
sips --getProperty profile icon.png
Il problema del profilo colore
La causa più comune di rifiuto è un profilo colore Display P3. Gli schermi dei Mac moderni supportano P3 e gli strumenti di progettazione possono esportare con un profilo ad ampia gamma, a meno di scegliere esplicitamente sRGB. Figma ha rimosso l’opzione «Unmanaged» nell’agosto 2023; ora ogni file usa sRGB o Display P3 e le esportazioni usano il profilo del file, salvo modificarlo nelle impostazioni di esportazione. Sketch ha un’impostazione analoga per documento. Se il designer lavora su un MacBook Pro ed esporta senza controllarla, il PNG risultante è P3.
La soluzione è convertire il file in sRGB, non limitarsi ad assegnargli un’etichetta. La distinzione è importante. L’opzione sips -s profile incorpora un profilo diverso nei metadati senza trasformare i valori dei pixel. Il risultato è una rappresentazione falsa: i pixel sono codificati in P3 ma etichettati come sRGB. L’opzione corretta è --matchTo, che esegue una vera conversione dello spazio colore:
sips --matchTo '/System/Library/ColorSync/Profiles/sRGB Profile.icc' icon.png --out icon-srgb.png
Il comando legge i pixel di origine come P3, li converte negli equivalenti sRGB e scrive un nuovo file. La variazione cromatica è impercettibile sulla maggior parte degli schermi, ma conta per la conformità al validatore. Dopo l’esecuzione, verifica il risultato:
sips --getProperty profile icon-srgb.png
Il profilo dovrebbe ora risultare «sRGB IEC61966-2.1».
Rimuovere il canale alfa
sips non può rimuovere i canali alfa. Può ispezionarli e aggiungere un profilo a un file che ne contiene uno, ma per eliminare il livello alfa serve un altro strumento. Il comando convert di ImageMagick gestisce bene questa operazione:
convert icon-srgb.png -background white -alpha remove -alpha off icon-final.png
Le opzioni agiscono in sequenza. -background white imposta il colore di fondo che sostituirà i pixel trasparenti. -alpha remove compone l’immagine su quel fondo, eliminando la trasparenza. -alpha off rimuove completamente il canale alfa dall’output. Il risultato è un PNG privo di trasparenza che il validatore dell’App Store accetta.
Se l’icona non ha trasparenza effettiva, perché tutti i pixel sono completamente opachi, ma il file contiene comunque un canale alfa nella propria struttura, puoi usare pngcrush. La sua riduzione senza perdita del tipo di colore, attiva per impostazione predefinita da pngcrush 1.8.0, riscrive un’immagine RGBA completamente opaca come RGB senza modificare alcun valore dei pixel:
pngcrush -ow -rem alla icon.png
Il canale alfa è costituito da dati dei pixel, non è un blocco di metadati, quindi l’opzione -rem alla non lo rimuove. Questa opzione rimuove tutti i blocchi ausiliari noti tranne tRNS, incluso qualsiasi profilo colore incorporato: verifica quindi di nuovo il profilo al termine. -ow sovrascrive il file originale. È più veloce e senza perdita di dati, ma la riduzione avviene solo se non c’è trasparenza effettiva da appiattire. Se identify -verbose icon.png | grep Alpha mostra pixel non opachi, usa ImageMagick.
Il caso particolare della modalità colore indicizzata
RGB TrueColor memorizza ogni pixel come tre valori di canale indipendenti a 8 bit o 16 bit. La modalità indicizzata memorizza una palette di colori e li richiama tramite un indice intero: un formato progettato per piccoli GIF nel 1989, non per icone di app. La maggior parte degli strumenti di progettazione non produce mai PNG indicizzati, ma alcune pipeline di ottimizzazione web, soprattutto quelle più vecchie che usano in modo aggressivo strumenti come pngquant, possono convertire le icone TrueColor in indicizzate come effetto della quantizzazione della palette.
Per controllare la modalità colore con ImageMagick:
identify -verbose icon.png | grep -E "^ Type"
Un file TrueColor mostra Type: TrueColor o Type: TrueColorAlpha. Un file indicizzato mostra Type: Palette. Se compare Palette, convertilo:
convert icon.png -type TrueColor icon-truecolor.png
Nella pratica, questa è la causa di rifiuto meno comune, ma si presenta regolarmente nelle basi di codice in cui le icone sono state elaborate, a un certo punto, da uno script di ottimizzazione degli asset.
La pipeline di correzione combinata
Quando un’icona presenta tutti e tre i problemi, profilo P3, canale alfa e possibili metadati obsoleti, l’approccio più pulito è una breve pipeline: sips per la conversione colore, seguito da un comando ImageMagick per tutto il resto:
sips --matchTo '/System/Library/ColorSync/Profiles/sRGB Profile.icc' icon.png --out /tmp/icon-srgb.png && convert /tmp/icon-srgb.png -type TrueColor -background white -alpha remove -alpha off -strip icon-final.png
L’opzione finale -strip rimuove tutti i profili incorporati, i commenti e i blocchi di metadati ausiliari dall’output. A quel punto i pixel sono già convertiti in sRGB, quindi si ottiene un PNG piccolo e pulito; se vuoi mantenere il tag sRGB esplicito consigliato sopra, ometti -strip. Dopo l’esecuzione, un controllo finale con sips --getProperty all icon-final.png dovrebbe confermare hasAlpha: no, space: RGB e l’assenza di profilo oppure il profilo sRGB incorporato esplicitamente.
Risolvere il problema all’origine
Le correzioni da riga di comando funzionano, ma la vera soluzione è configurare lo strumento di progettazione per esportare correttamente fin dall’inizio. In Figma, imposta il profilo colore del file su sRGB, oppure scegli sRGB nelle impostazioni di esportazione, prima di esportare gli asset. In Sketch, fai clic su un’area vuota del canvas e imposta Color Profile nell’Inspector. In Affinity Designer, apri File → Document Setup, scegli la scheda Color e verifica che il profilo sia sRGB IEC61966-2.1.
Per le icone dell’App Store, l’esportazione deve essere in PNG, a 1024×1024, senza ridimensionamento e con il profilo sRGB attivo. Se la pipeline CI/CD carica direttamente su App Store Connect tramite xcrun altool o l’App Store Connect API, aggiungi prima del caricamento una verifica che esegua sips --getProperty hasAlpha e faccia fallire la build se è presente un canale alfa. Intercettare il problema prima della chiamata API evita i tempi della richiesta e l’indagine manuale.
La lezione di fondo è che la convalida di App Store Connect fa esattamente ciò che Apple ha documentato. Il problema è che la documentazione non viene mostrata durante il flusso di caricamento e i messaggi di errore non identificano le specifiche condizioni non rispettate. Una volta note le tre proprietà controllate, la convalida smette di essere misteriosa e diventa una semplice checklist.
Approfondimenti correlati
- Dal concept SwiftUI all’App Store in poche settimane — Tempi e decisioni del processo di invio di un’app, inclusi provisioning e revisione.
- Costruire un’app di preparazione agli esami con migliaia di domande — Scelte architetturali per un’app iOS modulare con backend Supabase e funzionalità offline.
- Concorrenza in Swift 6: una guida pratica alla migrazione — Migrare le app SwiftUI alla concorrenza rigorosa di Swift 6, con avvisi reali del compilatore e relative correzioni.