Corrigindo Rejeições de Ícones na App Store: sRGB, Canais Alpha e Outras Armadilhas
A validação de ícones da App Store Connect falha silenciosamente. Você faz o upload de um PNG 1024×1024 que parece perfeito em todos os editores de imagem que você possui, e a resposta é uma variação de “A imagem não pôde ser processada.” Nenhuma menção ao espaço de cor. Nenhuma referência ao alpha. Apenas uma barreira entre a sua submissão e a App Store.
Na realidade, o validador verifica um conjunto restrito de propriedades técnicas, e qualquer uma delas falhando produz o mesmo erro genérico. As três causas mais comuns são: um perfil de cor não-sRGB (geralmente Display P3 de ferramentas de design modernas), um canal alpha que a loja proíbe explicitamente, e – com menos frequência – um modo de cor indexado que não deveria aparecer em um ícone produzido em 2025, mas ainda aparece quando arquivos passam por pipelines de otimização mais antigos. Todos os três são corrigíveis pelo terminal em menos de um minuto quando você sabe o que está olhando.
O Que a App Store Connect Realmente Exige
Os requisitos da Apple para o ícone de listagem na App Store são específicos. O arquivo deve ser um PNG. As dimensões devem ser 1024×1024 pixels. Não deve haver canal alpha – não uma transparência parcial, não um alpha totalmente opaco incorporado nos metadados, simplesmente nenhum dado alpha. O espaço de cor deve ser sRGB. E o modo de cor deve ser RGB TrueColor, não uma paleta indexada.
A restrição ao alpha existe porque a App Store Connect aplica seu próprio raio de canto e composição aos ícones. Um ícone com canal alpha interferiria nesse processo. A restrição ao sRGB existe porque a loja renderiza ícones em uma ampla variedade de dispositivos com diferentes perfis de exibição; o sRGB é a linha de base comum. Display P3, o espaço de cor de ampla gama da Apple habilitado por padrão no Figma, Sketch e Affinity Designer em Macs com chip série M, não é aceito apesar de ser o próprio formato da Apple.
Diagnosticando o Problema com sips
O macOS vem com o sips (Scriptable Image Processing System), uma ferramenta de linha de comando que pode inspecionar e transformar imagens sem nenhuma dependência de terceiros. É a maneira mais rápida de ver exatamente o que seu arquivo de ícone contém.
sips --getProperty all icon.png
A saída é uma lista plana de propriedades. Os campos que importam para a validação na App Store são hasAlpha, space e profile. Um arquivo com problemas normalmente mostra algo assim:
hasAlpha: yes
space: RGB
profile: Display P3
Essa combinação vai falhar. O valor space: RGB não distingue entre RGB genérico e sRGB – o campo de perfil é o que desambigua. Um ícone limpo pronto para upload deve mostrar hasAlpha: no e um perfil com a leitura “sRGB IEC61966-2.1” ou equivalente.
Você também pode consultar propriedades individuais se quiser uma verificação mais rápida durante um script de build:
sips --getProperty hasAlpha icon.png
sips --getProperty profile icon.png
O Problema do Perfil de Cor
A causa mais comum de rejeição é um perfil de cor Display P3. Os displays modernos de Mac são capazes de P3, e as ferramentas de design no Apple Silicon exportam por padrão no espaço de cor do display ativo, a menos que você substitua isso explicitamente. As Configurações de Documento do Figma têm como padrão “Não gerenciado” até que você o defina como sRGB. O Sketch tem um botão de alternância similar por documento. Se seu designer está trabalhando em um MacBook Pro e exporta sem verificar essa configuração, o PNG resultante é P3.
A correção é converter – não apenas etiquetar – o arquivo para sRGB. Há uma distinção importante aqui. O sinalizador sips -s profile incorpora um perfil diferente nos metadados sem transformar os valores dos pixels. Isso produz uma mentira: os pixels são codificados como P3, mas rotulados como sRGB. O sinalizador correto é --matchTo, que realiza uma conversão real do espaço de cor:
sips --matchTo '/System/Library/ColorSync/Profiles/sRGB Profile.icc' icon.png --out icon-srgb.png
Isso lê os pixels de origem como P3, os converte para equivalentes sRGB e escreve um novo arquivo. A mudança de cor é imperceptível na maioria dos displays, mas importa para a conformidade com o validador. Após executar isso, confirme o resultado:
sips --getProperty profile icon-srgb.png
O perfil agora deve relatar “sRGB IEC61966-2.1”.
Removendo o Canal Alpha
O sips não consegue remover canais alpha. Ele pode inspecioná-los e pode adicionar um perfil a um arquivo que os possua, mas remover a camada alpha requer uma ferramenta diferente. O convert do ImageMagick lida com isso de forma limpa:
convert icon-srgb.png -background white -alpha remove -alpha off icon-final.png
Os sinalizadores funcionam em sequência. -background white define a cor fosca que substituirá os pixels transparentes. -alpha remove compõe a imagem sobre esse fundo, eliminando a transparência. -alpha off remove o canal alpha dos metadados de saída completamente. O resultado é um PNG plano e opaco que o validador da App Store aceita.
Se o seu ícone não tem transparência real – todos os pixels são totalmente opacos – mas o arquivo ainda carrega um canal alpha em sua estrutura, você pode usar o pngcrush em vez disso. Ele remove o fragmento alpha dos metadados PNG sem qualquer transformação de pixel:
pngcrush -ow -rem alla icon.png
O sinalizador -rem alla remove todos os fragmentos alpha auxiliares no lugar. Isso é mais rápido e sem perdas, mas só funciona quando não há transparência real para achatar. Se identify -verbose icon.png | grep Alpha mostrar pixels não-opacos, use a rota do ImageMagick.
O Caso Extremo do Modo de Cor Indexado
O RGB TrueColor armazena cada pixel como três valores independentes de canal de 8 bits (ou 16 bits). O modo indexado armazena uma paleta de cores e as referencia por índice inteiro – um formato projetado para GIFs pequenos em 1989, não para ícones de aplicativos. A maioria das ferramentas de design nunca produz PNGs indexados, mas alguns pipelines de otimização web – especialmente os mais antigos que usam ferramentas como pngquant de forma agressiva – podem converter ícones TrueColor para indexados como efeito colateral da quantização de paleta.
Para verificar o modo de cor com o ImageMagick:
identify -verbose icon.png | grep -E "^ Type"
Um arquivo TrueColor relata Type: TrueColor ou Type: TrueColorAlpha. Um arquivo indexado relata Type: Palette. Se você vir Palette, converta:
convert icon.png -type TrueColor icon-truecolor.png
Na prática, essa é a razão menos comum de rejeição, mas aparece de forma confiável em codebases onde os ícones foram processados por um script de otimização de ativos em algum momento de sua história.
O Pipeline de Correção Combinado
Quando um ícone tem os três problemas – perfil P3, canal alpha e possivelmente metadados desatualizados – a abordagem mais limpa é um único comando do ImageMagick que lida com tudo:
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
O sinalizador -strip no final remove todos os perfis incorporados, comentários e fragmentos de metadados auxiliares da saída. Isso produz o PNG menor e mais limpo possível – exatamente o que a App Store Connect espera. Após executar isso, um sips --getProperty all icon-final.png final deve confirmar hasAlpha: no, space: RGB e nenhum perfil ou o perfil sRGB explicitamente incorporado.
Corrigindo o Problema na Origem
As correções pela linha de comando funcionam, mas a solução real é configurar sua ferramenta de design para exportar corretamente da primeira vez. No Figma, vá em Arquivo → Configurações do Documento e defina o perfil de cor como sRGB antes de exportar qualquer ativo. No Sketch, o equivalente está em Documento → Perfil de Cor. No Affinity Designer, verifique as configurações em Configuração do Documento → Formato de Cor e certifique-se de que o perfil esteja definido como sRGB IEC61966-2.1.
Para ícones da App Store especificamente, a exportação deve ser PNG, 1024×1024, sem escalonamento aplicado, com o perfil sRGB ativo. Se o seu pipeline de CI/CD faz upload para a App Store Connect via xcrun altool ou diretamente pela API da App Store Connect, adicione uma etapa de validação antes do upload que execute sips --getProperty hasAlpha e falhe o build se o alpha estiver presente. Capturar isso antes da chamada de API economiza o tempo de ida e volta e a investigação manual.
A lição subjacente aqui é que a validação da App Store Connect está fazendo exatamente o que a Apple documentou. O problema é que a documentação não é exibida durante o fluxo de upload, e as mensagens de erro não correspondem a condições de falha específicas. Uma vez que você conhece as três propriedades sendo verificadas, o processo de validação deixa de ser misterioso e se torna uma lista de verificação direta.
Insights Relacionados
- Do Conceito SwiftUI à App Store em Semanas – O cronograma mais amplo e as decisões envolvidas em levar um aplicativo pela submissão, incluindo o processo de provisionamento e revisão.
- Criando um Aplicativo de Preparação para Exames com Milhares de Perguntas – Decisões de arquitetura para um aplicativo iOS modular com backend Supabase e capacidade offline.
- Concorrência no Swift 6: Um Guia Prático de Migração – Migrando aplicativos SwiftUI para a concorrência estrita do Swift 6, com avisos reais do compilador e suas correções.