ITMS-90717: corrigir “Invalid large app icon” no Expo
Por Mehdi Azizi
Publicado em , 8 min
ITMS-90717: o ícone 1024 x 1024 do seu build tem transparência ou canal alfa. Exporte opaco, confira com sips e gere um novo build.
ITMS-90717 é uma verificação automática da Apple no seu build. Ela diz que o ícone grande do app, aquele de 1024 x 1024 pixels que aparece na App Store, contém transparência ou um canal alfa. A correção: um ícone quadrado e opaco, exportado sem canal alfa, e depois um novo build.
Com o Expo, o seu arquivo PNG raramente é o culpado: o prebuild já coloca ele sobre um fundo branco. Li esse código no SDK 57 e conferi os ícones do Solys, do TradaZen e do Nolera. Nesse caso, o erro costuma vir de uma pasta ios versionada ou de um arquivo do Icon Composer. Veja como descobrir qual é, e como corrigir.
O que significa o erro ITMS-90717?
A mensagem se chama "ITMS-90717: Invalid large app icon". Ela explica que o ícone grande do catálogo de imagens do seu app "can't be transparent or contain an alpha channel": não pode ser transparente nem conter canal alfa. As mensagens antigas falavam em "Invalid App Store Icon". É a mesma regra.
Esse ícone grande é o da App Store. A documentação do Xcode sobre ícones explica: um app distribuído na App Store precisa fornecer o ícone de 1024 pontos no catálogo de imagens.
O canal alfa é a quarta camada de um PNG, ao lado do vermelho, do verde e do azul. Ele guarda a transparência de cada pixel. Um ícone pode parecer totalmente preenchido e ainda manter esse canal: é a armadilha que aparece em todas as threads de fórum.
Como os outros erros ITMS, isso não é a rejeição de um revisor. A Apple analisou o binário na entrega. Dependendo da ferramenta de envio, o erro aparece como falha de validação, por exemplo com o código 409.
Verificar seu ícone com o sips
No Mac, o sips já vem instalado. Uma linha basta:
sips -g hasAlpha assets/icon.png
Você quer ler hasAlpha: no. Em 15 de outubro de 2026, rodei esse comando nos ícones declarados nos app.json do Solys, do TradaZen e do Nolera: todos respondem no, em 1024 x 1024.
Também criei um ícone de teste: um quadrado azul totalmente opaco, mas salvo com canal alfa. O sips responde yes. Nenhum pixel é transparente, e mesmo assim o canal está lá. É por isso que tantos desenvolvedores escrevem "meu ícone não tem nenhuma transparência" embaixo dessa mensagem.
No Preview, o inspetor (Tools, Show Inspector) também lista as propriedades da imagem, incluindo o canal alfa.
Corrigir: exportar o ícone sem canal alfa
Três métodos, do mais simples ao mais preciso.
1. Preview. File, Export, formato PNG, depois desmarque a opção Alpha. O arquivo exportado não tem mais canal alfa.
2. sips, sem instalar nada. O sips não remove o canal alfa de um PNG. É preciso passar por um JPEG, que não tem esse canal:
sips -s format jpeg -s formatOptions 100 icon.png --out icon.jpg
sips -s format png icon.jpg --out icon-opaque.png
sips -g hasAlpha icon-opaque.png
No meu ícone de teste com cantos transparentes, os cantos ficaram brancos e a última linha responde no. A passagem pelo JPEG comprime um pouco a imagem, mesmo na qualidade máxima: olhe o resultado de perto.
3. ImageMagick. Se você tem ele instalado, pode escolher a cor de fundo:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
Segundo a documentação do ImageMagick, -alpha remove coloca a imagem sobre a cor de fundo, e -alpha off desativa o canal.
Esses três métodos preenchem a transparência com uma cor sólida. Se o seu logo flutuava sobre um fundo transparente, o mais limpo é voltar ao arquivo original e desenhar um fundo de verdade. O Expo pede isso no guia do ícone do app: o ícone deve preencher o quadrado inteiro, sem cantos arredondados nem pixels transparentes. O próprio iOS aplica a máscara.
Onde o Expo pega seu ícone, e o que faz com ele
O Expo lê primeiro ios.icon, depois o campo icon na raiz da sua configuração. Segundo a referência de configuração do Expo, ios.icon aceita três formas: um PNG, um objeto com variantes light, dark e tinted, ou uma pasta .icon criada com o Icon Composer.
A tabela a seguir vem do código que gera o ícone iOS no prebuild, @expo/prebuild-config 57.0.16 (SDK 57), lido em 15 de outubro de 2026:
| O que você declara | O que o prebuild faz | Risco ITMS-90717 |
|---|---|---|
icon em PNG | Achatado em fundo branco | Baixo |
ios.icon.light | Achatado em fundo branco | Baixo |
ios.icon.tinted | Achatado em fundo branco | Baixo |
ios.icon.dark | Transparência mantida | Desejado pela Apple |
ios.icon em .icon | Copiado do jeito que está | Real |
Pasta ios versionada | Prebuild não é executado | Real |
Com um PNG, o próprio Expo remove a transparência e coloca branco no lugar. Um logo recortado acaba então num quadrado branco: sem erro, mas com um visual que talvez você não queria. A variante escura mantém a transparência, e isso é intencional: a Apple pede fundo transparente no ícone escuro, para que o fundo fornecido pelo sistema apareça.
No Nolera, que declara as três variantes, o sips responde no para os ícones claro e tingido gerados, e yes para o escuro. Pela data do commit dessas variantes, a versão 1.0.2, que está no ar, inclui esses ícones. Não conferi isso no IPA.
O caso da pasta ios versionada
É a causa mais provável com o Expo. A página do Expo sobre geração nativa contínua diz: se o seu projeto contém as pastas android e ios, o EAS Build não executa o prebuild. Aí o seu app.json não mexe mais no ícone: é o PNG da pasta ios que vai para a Apple.
Confira a partir da raiz do projeto:
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
Se o comando responder yes para o ícone 1024, substitua esse arquivo pela sua versão opaca, com o mesmo nome. Se você não fez nenhuma alteração nativa na mão, também pode apagar a pasta ios e adicioná-la ao .gitignore: o EAS vai gerá-la de novo a cada build. No Solys, no TradaZen e no Nolera, essa pasta é ignorada pelo git.
O formato do iOS 26: Icon Composer
O Icon Composer é a ferramenta da Apple para os ícones Liquid Glass do iOS 26. Ele gera um único arquivo .icon com várias camadas. Segundo o guia da Apple sobre o Icon Composer, o Xcode também tira dele as imagens para versões mais antigas do iOS.
O Expo suporta esse formato desde o SDK 54. Você declara a pasta como texto, nunca no objeto de variantes:
{
"expo": {
"ios": {
"icon": "./assets/app.icon"
}
}
}
Nesse caso, o prebuild copia a pasta sem mexer nela, e é o Xcode que produz o ícone final. Então você precisa do Xcode 26 ou superior, o das imagens recentes do EAS, como explico no guia sobre o ITMS-90725.
Desde agosto de 2025, no fórum de desenvolvedores da Apple, há threads relatando ITMS-90717 com arquivos .icon. As pistas relatadas: uma camada PNG transparente, uma camada maior que a tela de desenho, um grupo com o efeito Blur perto da borda. As soluções paliativas citadas: desligar o Blur, manter um fundo sólido ou voltar para um PNG. Essas threads não trazem nenhuma correção oficial da Apple, e o erro ainda era relatado em agosto de 2026.
As regras da Apple sobre ícones vão na mesma direção: se você importar uma camada de fundo, ela precisa cobrir toda a área e ser opaca. Meus apps ainda usam PNG, então não testei o Icon Composer em produção. Se um arquivo .icon estiver travando seu envio, volte ios.icon para um PNG: o Expo vai achatá-lo, e seu ícone vai passar nessa verificação.
Verificar o ícone no build final
No IPA, o ícone 1024 não é um arquivo PNG: o Xcode compila ele dentro de Assets.car. Baixe o IPA na página do build em expo.dev e rode:
unzip -q MyApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
Cada ícone mostra um campo Opaque. Em 15 de outubro de 2026, compilei com o actool, a ferramenta do Xcode, o ícone do Solys e o meu ícone de teste com cantos transparentes. O primeiro sai como "Opaque" : true, o segundo como "Opaque" : false. A Apple não documenta esse campo: trate como um indício, não como a verificação da Apple.
Uma armadilha para conhecer: não teste com o sips os PNGs pequenos que ficam na raiz do app. O Xcode grava esses arquivos com canal alfa, mesmo quando a fonte é opaca. No meu teste com o ícone do Solys, o sips responde yes para eles.
Os outros erros de ícone
| Código | O que a Apple aponta | Pista com o Expo |
|---|---|---|
| ITMS-90717 | Ícone 1024 transparente | Exportar sem alfa |
| ITMS-90704 | Ícone 1024 ausente | Falta a entrada 1024 |
| ITMS-90022 | Ícone de iPhone ausente | Catálogo incompleto |
| ITMS-90023 | Ícone de iPad ausente | Catálogo incompleto |
As três últimas mensagens são principalmente de 2017 e 2018, quando o Xcode 9 mudou as regras dos ícones.
Com o Expo, elas ficaram raras. O prebuild grava um único ícone universal de 1024, e o Xcode gera os outros tamanhos. Sem ícone declarado, o Expo cria até um quadrado branco, para evitar uma falha no envio. Se um desses erros aparecer, olhe a pasta ios versionada: o arquivo Contents.json de AppIcon.appiconset precisa ter uma entrada de tamanho 1024x1024, e o PNG que ela cita precisa existir.
Antes do seu próximo envio
Um ícone se corrige em dez minutos, mas cada erro custa um build. As outras verificações automáticas exigem o mesmo cuidado, como o ITMS-90683 para as frases de permissão ou o ITMS-91053 para o manifesto de privacidade. Depois que o build for aceito, instale com o TestFlight para ver seu ícone na tela de início.
As rejeições de um revisor pedem mais calma: o passo a passo está na página app rejeitado pela Apple, e os motivos mais comuns estão em por que a Apple rejeita um app.
Para conferir seu projeto antes do envio, o Review Kit reúne meu checklist e skills do Claude Code que revisam seu projeto. Se o seu envio travou e você quer um olhar humano, reserve uma hora comigo: a gente revisa seu projeto por videochamada, na sua tela. E se você está preparando seu primeiro lançamento, faça seu diagnóstico gratuito: ele coloca as etapas em ordem e te envia meu checklist anti-rejeição da Apple.
Perguntas frequentes
Por que a Apple vê um canal alfa se meu ícone não tem nenhuma transparência?
Porque um PNG pode manter um canal alfa mesmo quando todos os pixels são opacos. Muitas ferramentas adicionam esse canal por padrão na exportação. Verifique com sips -g hasAlpha e exporte o ícone de novo sem esse canal.
Dá para corrigir o ITMS-90717 com uma atualização remota?
Não. O ícone é compilado no binário, dentro de Assets.car. Uma atualização remota só muda o JavaScript e os recursos do app. Corrija o ícone, gere um novo build e envie de novo.
O ícone escuro pode ser transparente?
Pode. A Apple pede fundo transparente na variante escura, e o Expo mantém essa transparência. Concluo daí que a verificação mira o ícone principal, o da App Store: é ele que precisa ser opaco.
Preciso arredondar os cantos do ícone iOS?
Não. Entregue um quadrado cheio: o próprio iOS aplica a máscara. Cantos arredondados deixam pixels transparentes nas pontas, exatamente o que essa verificação recusa.
O Expo suporta os ícones do Icon Composer do iOS 26?
Sim, desde o SDK 54: declare o caminho da pasta .icon em ios.icon, como texto. O prebuild copia a pasta do jeito que está e o Xcode 26 compila. Se der ITMS-90717 com esse formato, verifique as camadas transparentes e o efeito Blur, ou volte temporariamente para um PNG.

